自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇非常全面的無(wú)服務(wù)器遷移實(shí)踐

新聞 前端
“無(wú)服務(wù)器”這個(gè)詞變得很流行。在本文,我將向你介紹如何將本地應(yīng)用程序遷移至無(wú)服務(wù)器環(huán)境,非常詳細(xì)和具體,希望有助于你。

 “無(wú)服務(wù)器”這個(gè)詞變得很流行。在本文,我將向你介紹如何將本地應(yīng)用程序遷移至無(wú)服務(wù)器環(huán)境,非常詳細(xì)和具體,希望有助于你。

注:本文涵蓋了我在 2019 越南 Web 峰會(huì)(越南 IT 界最大的活動(dòng))上展示的所有內(nèi)容。

如今,“無(wú)服務(wù)器”這個(gè)詞變得非常流行。它正在改變開(kāi)發(fā)人員和企業(yè)使用公有云交付業(yè)務(wù)價(jià)值的方式。輸入這個(gè)“關(guān)鍵詞”,你很容易找到相關(guān)文章。但是,我確信,沒(méi)有幾篇文章會(huì)一步一步地向你介紹如何將本地應(yīng)用程序遷移到無(wú)服務(wù)器環(huán)境,但是在本文中,我將這樣做!

我會(huì)向你展示一個(gè)案例研究,介紹我和我的項(xiàng)目團(tuán)隊(duì)如何實(shí)現(xiàn)并交付給我們的一個(gè)客戶。

本文要點(diǎn):

  • 客戶存在的問(wèn)題,為什么要采用無(wú)服務(wù)器?
  • 通往無(wú)服務(wù)器解決方案之路;
  • 我們的遷移方法;
  • 我們面臨的挑戰(zhàn)。

1. 客戶存在的問(wèn)題

我們的客戶提供了一個(gè)在線招聘平臺(tái)。下圖說(shuō)明了該系統(tǒng)是如何工作的。

这可能是目前最全面的无服务器迁移实践

這是一個(gè)很傳統(tǒng)的系統(tǒng),有 2 個(gè) Web 應(yīng)用程序:

1.身份服務(wù)器 Web 應(yīng)用程序:

用于身份驗(yàn)證和授權(quán)。這個(gè) Web 應(yīng)用程序提供了一些基本功能,比如用戶管理(CRUD)、登錄 / 注銷、用戶權(quán)限等等。除此之外,它還允許用戶與他們的谷歌 /Facebook 帳戶進(jìn)行集成。

2.招聘 Web 應(yīng)用程序:

這是整個(gè)系統(tǒng)的核心。作為一個(gè)用戶,我們可以使用求職功能來(lái)找工作,通過(guò)傳文件來(lái)上傳簡(jiǎn)歷…作為一個(gè)管理系統(tǒng),我們可以使用報(bào)表功能以及通過(guò)客戶溝通發(fā)送電子郵件、短信…

這些 Web 應(yīng)用程序使用相同的數(shù)據(jù)庫(kù),稱為“招聘”數(shù)據(jù)庫(kù)。除此之外,系統(tǒng)還包括了消息隊(duì)列、發(fā)送通知的后臺(tái)作業(yè)、報(bào)表的數(shù)據(jù)處理……

2. 那么,問(wèn)題在哪?

[[312725]]

問(wèn)題 1:龐大的代碼庫(kù)

遺留系統(tǒng)太大,無(wú)法完全理解,特別是對(duì)新開(kāi)發(fā)人員來(lái)說(shuō)。

我們的客戶承認(rèn),有一次他們不得不編寫一個(gè)新函數(shù)來(lái)修復(fù) Bug,而不是重構(gòu),因?yàn)閷?dǎo)致問(wèn)題的函數(shù)與其他函數(shù)緊密耦合。

問(wèn)題 2:高昂成本

此外,他們必須購(gòu)買一個(gè)好的服務(wù)器來(lái)部署系統(tǒng)。運(yùn)營(yíng)開(kāi)發(fā)成本不小。

問(wèn)題 3:可伸縮性低

系統(tǒng)中的模塊有沖突資源,所以如果他們想擴(kuò)展特定功能,例如“JobSearch”,就必須擴(kuò)展整個(gè)應(yīng)用程序。

這造成資源浪費(fèi),即使接受了這種浪費(fèi),他們也無(wú)法迅速擴(kuò)大規(guī)模。

問(wèn)題 4:可用性低:

一旦他們發(fā)布一個(gè)新功能或改進(jìn),甚至修復(fù)一個(gè)小錯(cuò)誤,他們就必須部署整個(gè)系統(tǒng)。

問(wèn)題 5:可靠性低

任何模塊中的錯(cuò)誤(如堆棧溢出)都可能導(dǎo)致系統(tǒng)崩潰。

此外,由于應(yīng)用程序的所有實(shí)例都是相同的,因此 Bug 會(huì)影響整個(gè)應(yīng)用程序的可用性。

問(wèn)題 6:對(duì)新技術(shù)不開(kāi)放

系統(tǒng)是用.NET 開(kāi)發(fā)的,這意味著 Python、Java 的新特性永遠(yuǎn)都無(wú)法使用,因?yàn)椴捎眯录夹g(shù)會(huì)破壞現(xiàn)有的系統(tǒng)。

我想,你可以在你的公司或者你的客戶系統(tǒng)中找到類似的地方:)

3. 為什么要采用無(wú)服務(wù)器?

我不會(huì)直接給你答案,你可以通過(guò)以下事實(shí)找出答案:

这可能是目前最全面的无服务器迁移实践

據(jù)《財(cái)富》雜志報(bào)道,“車 95% 的時(shí)間都是停著的”。

擁有一輛汽車與購(gòu)買裸金屬服務(wù)器并在該服務(wù)器上部署系統(tǒng)類似。日復(fù)一日,為了確保服務(wù)器正常工作而沒(méi)有任何問(wèn)題,你必須維護(hù)服務(wù)器。

租車類似于使用 VPS 服務(wù)。你可以短期租用 VPS。

例如:圣誕節(jié)要到了,你預(yù)測(cè)很多學(xué)生打算找份兼職。在此期間,你可以租用 VPS 來(lái)支持應(yīng)用程序的擴(kuò)展。

雖然租車有助于改善使用情況,但最好的選擇是共享汽車,如優(yōu)步、滴滴……

是的,這就相當(dāng)于軟件領(lǐng)域的無(wú)服務(wù)器。

4. 通往無(wú)服務(wù)器解決方案之路

隨著云計(jì)算的發(fā)展,IT 基礎(chǔ)設(shè)施經(jīng)歷了一場(chǎng)快速革命。為了給云上軟件增加更多的靈活性和可伸縮性,無(wú)服務(wù)器應(yīng)運(yùn)而生。下圖展示了 IT 基礎(chǔ)設(shè)施的革命。

这可能是目前最全面的无服务器迁移实践

20 世紀(jì) 90 年代

為了在本地服務(wù)器上部署應(yīng)用程序,我們?cè)?jīng)構(gòu)建并操作過(guò)本地服務(wù)器。服務(wù)器是為長(zhǎng)期使用(并存在多年)而構(gòu)建的。

但是,安裝、配置、操作都需要做大量工作。為擴(kuò)展應(yīng)用程序,我們需要擴(kuò)展整個(gè)服務(wù)器。

2000 年以來(lái)

我們?yōu)椴渴鸱?wù)器提供了一個(gè)新選項(xiàng),虛擬機(jī)(VM)加入“游戲”中。

隨著 VM 出現(xiàn)的是虛擬專用服務(wù)器(VPS)。這便于我們短期使用(幾天或幾周),而且?guī)追昼妰?nèi)就可以完成部署。擴(kuò)展以機(jī)器為單位。

2011 年 Docker 出現(xiàn)

docker 的推出,我認(rèn)為是近十年來(lái) IT 基礎(chǔ)設(shè)施最大的變化之一。

它影響了我們?cè)O(shè)計(jì)軟件架構(gòu)和部署應(yīng)用程序的方式。與虛擬機(jī)(VM)相比,容器不僅可以使用更少的資源來(lái)提高應(yīng)用程序的運(yùn)行速度,而且還能擴(kuò)展,使用多個(gè)容器協(xié)作在生產(chǎn)環(huán)境中交付服務(wù)。

但是,容器的廣泛使用極大地增加了管理它們的復(fù)雜性。

無(wú)服務(wù)器沒(méi)有使用容器來(lái)運(yùn)行應(yīng)用程序,無(wú)服務(wù)器計(jì)算用另一個(gè)抽象層代替了容器,在這個(gè)抽象層中,云提供商充當(dāng)服務(wù)器,動(dòng)態(tài)地管理機(jī)器資源的分配。

5. 我們的遷移方法

注:希望當(dāng)你讀到這部分的時(shí)候,已經(jīng)有了一些為什么我們應(yīng)該采用無(wú)服務(wù)器的理由。如果沒(méi)有,請(qǐng)回到第二節(jié)和第三節(jié)再讀一遍,或者給我發(fā)信息。

下圖是我們系統(tǒng)未來(lái)的樣子,換句話說(shuō),這是我們和客戶想要達(dá)成的目標(biāo)。

这可能是目前最全面的无服务器迁移实践

雖然由于某些原因我們選擇 Azure,但你也能很容易找到類似的 AWS 和谷歌云服務(wù)。

我們用 Azure Web 應(yīng)用托管身份服務(wù)器,并使用 Azure SQL Server 為它創(chuàng)建獨(dú)立的數(shù)據(jù)庫(kù)。

此外,我們還用 Azure 流量管理器實(shí)現(xiàn)高可用性和故障轉(zhuǎn)移計(jì)劃。Azure 流量管理器是一個(gè)基于 DNS 的流量負(fù)載均衡器,它使你能跨全球 Azure 區(qū)域?qū)⒘髁恳宰顑?yōu)方式分配給服務(wù)。

未來(lái)系統(tǒng)中的求職 Web 應(yīng)用程序?qū)⒅话?UI/UX,因?yàn)槲覀儗颜麄€(gè)業(yè)務(wù)邏輯轉(zhuǎn)移到 Azure 函數(shù)。Azure API 管理(API Gateway)將被用作一個(gè)單一的入口,以確保來(lái)自求職 Web 應(yīng)用程序的每個(gè)請(qǐng)求都必須通過(guò)它才能訪問(wèn) Azure 函數(shù)。

此外,Azure API 管理還集成了身份服務(wù)器來(lái)進(jìn)行身份驗(yàn)證和授權(quán)。

與身份服務(wù)器類似,我們還將 Azure Web 應(yīng)用程序和流量管理器應(yīng)用于求職 Web 應(yīng)用程序。Azure 應(yīng)用網(wǎng)關(guān)是我們的求職 Web 應(yīng)用的防火墻。

即使身份服務(wù)器和求職 Web 應(yīng)用程序被遷移到云服務(wù),但它們不是無(wú)服務(wù)器,它們只是 PaaS。

要了解關(guān)于 PaaS 和無(wú)服務(wù)器的區(qū)別,請(qǐng)閱讀下面的文章:

https://www.cloudflare.com/learning/serverless/glossary/serverless-vs-paas/

Azure 提供了兩種無(wú)服務(wù)器架構(gòu)方法:

Azure Function:這是一項(xiàng)無(wú)服務(wù)器計(jì)算服務(wù),允許你運(yùn)行事件觸發(fā)的代碼,而不必顯式地提供或管理基礎(chǔ)設(shè)施。

Azure Logic App:它有助于構(gòu)建自動(dòng)化的可伸縮工作流、業(yè)務(wù)流程和企業(yè)編排,以便跨云服務(wù)和本地系統(tǒng)集成應(yīng)用程序和數(shù)據(jù)。

在未來(lái)的系統(tǒng)中,我們將包含以下 Azure 函數(shù):

  • 職位搜索
  • 職位管理
  • 客戶溝通
  • 報(bào)表
  • 發(fā)送郵件
  • 發(fā)送 SMS

此外,還有一個(gè)用于“文件上傳”功能的 Azure Logic App。該功能需要使用不同的流來(lái)提供不同的文件類型。例如,excel 文件用于數(shù)據(jù)導(dǎo)入,jpeg/png 文件用于圖像上傳,需要調(diào)整大小…...

此外,我們還有其他 Azure 服務(wù),比如 Azure 服務(wù)總線、用于文件上傳的 Blob 存儲(chǔ)、用于存儲(chǔ)日志數(shù)據(jù)的表存儲(chǔ)。Azure Application Insight 用于監(jiān)控。

6. 遷移步驟

我們實(shí)現(xiàn)的新體系結(jié)構(gòu)必須與遺留系統(tǒng)并行,以確保對(duì)當(dāng)前業(yè)務(wù)沒(méi)有影響。

[[312726]]

第一步,我們必須選擇遷移到無(wú)服務(wù)器的功能。

要說(shuō)這不是一場(chǎng)噩夢(mèng)可不容易。讓我們?cè)O(shè)想一下,你必須深入研究遺留代碼庫(kù)(我在上面提到過(guò)——海量代碼庫(kù)),并在沒(méi)有任何技術(shù)文檔或功能規(guī)范的情況下選擇對(duì)其他人影響較小的功能。

最后,經(jīng)過(guò)業(yè)務(wù)分析團(tuán)隊(duì)、產(chǎn)品負(fù)責(zé)人和開(kāi)發(fā)團(tuán)隊(duì)的多次討論,我們決定將“職位管理”作為采用無(wú)服務(wù)器的第一個(gè)功能。

这可能是目前最全面的无服务器迁移实践

下一步,我們創(chuàng)建一個(gè) Facade 層 (https://sourcemaking.com/design_patterns/facade),它提供了對(duì)職位管理功能的高級(jí)抽象,重構(gòu)了該功能的所有使用者以使用該 Facade。這為我們提供了一個(gè)單一的阻塞點(diǎn),我們將從中限制功能。

現(xiàn)在,該做“快樂(lè)”的部分了——使用 Azure 函數(shù)和 Azure Cosmos 數(shù)據(jù)庫(kù)創(chuàng)建新的實(shí)現(xiàn)。在創(chuàng)建新功能時(shí),謹(jǐn)慎起見(jiàn),我們使用了與構(gòu)建 Facade 時(shí)相同的抽象。

在這一步中,最重要的事情是使用 Cosmos DB 在現(xiàn)有數(shù)據(jù)庫(kù)和新數(shù)據(jù)庫(kù)之間同步數(shù)據(jù),我們稱之為“回填”過(guò)程。

这可能是目前最全面的无服务器迁移实践

下一步,我們創(chuàng)建一個(gè) Toggler——Facade 的第三個(gè)實(shí)現(xiàn),它充當(dāng)某種流量路由器,通過(guò) Facade 層將請(qǐng)求轉(zhuǎn)發(fā)給現(xiàn)有功能或新功能(Azure 函數(shù))。

一旦 Azure 函數(shù)可以使用了。我們從 Canary Launch 開(kāi)始,配置 Toggler 的特性標(biāo)志,使 2% 的請(qǐng)求被發(fā)送到 Azure 函數(shù),而其余 98% 的請(qǐng)求被路由到現(xiàn)有的實(shí)現(xiàn)。

假設(shè)一切順利,我們可以慢慢地增加到新實(shí)現(xiàn)的流量,直到最終 100% 的職位管理功能請(qǐng)求都是通過(guò)我們的新 Azure 函數(shù)交付。如果在新實(shí)現(xiàn)中發(fā)現(xiàn)任何問(wèn)題,將觸發(fā)回滾函數(shù)來(lái)回滾請(qǐng)求并將請(qǐng)求重定向到現(xiàn)有函數(shù)。

这可能是目前最全面的无服务器迁移实践

一旦我們覺(jué)得新實(shí)現(xiàn)令人滿意了——Azure 函數(shù)正在按預(yù)期執(zhí)行——我們就進(jìn)入另一個(gè)有趣的部分——刪除代碼!現(xiàn)在,我們可以刪除已經(jīng)廢棄的“職位管理”功能的實(shí)現(xiàn)。我們現(xiàn)在也可以移除 Toggler 了。

这可能是目前最全面的无服务器迁移实践

7. 我們面臨的挑戰(zhàn)

無(wú)服務(wù)器是個(gè)好主意!這是一種新范式,可以應(yīng)用于在云中開(kāi)發(fā)和運(yùn)行的現(xiàn)代化應(yīng)用程序,從而極大提高開(kāi)發(fā)人員的注意力和工作效率。

但是在開(kāi)發(fā)和交付階段,我們必須克服一些挑戰(zhàn)甚至“陷阱”。

1.新技術(shù)

在項(xiàng)目開(kāi)始時(shí),只有兩個(gè)人曾經(jīng)使用過(guò)云服務(wù)和無(wú)服務(wù)器。

我們組織了許多培訓(xùn)課程。要使新技術(shù)的應(yīng)用在項(xiàng)目中獲得成功,就需要說(shuō)服團(tuán)隊(duì)成員使用它。

理想情況下,你可以讓他們看到這些新技術(shù)的好處,讓他們對(duì)這些好處感到興奮。

2.調(diào)試

分布式應(yīng)用程序意味著你更依賴日志跟蹤來(lái)查找問(wèn)題根源。

你可以下載 Azure 函數(shù) CLI,這是一個(gè)幫助你在開(kāi)發(fā)階段調(diào)試 Azure 函數(shù)的工具。為調(diào)試云上的 Azure 函數(shù),你必須安裝遠(yuǎn)程調(diào)試,這也不容易。

3.集成

如上所述,我們需要實(shí)現(xiàn)新的 Azure 函數(shù)——與遺留系統(tǒng)并行的無(wú)服務(wù)器。因此,新的 Azure 函數(shù)與現(xiàn)有函數(shù)的集成存在很多問(wèn)題。

4.測(cè)試

使用無(wú)服務(wù)器時(shí)測(cè)試非常困難,因?yàn)槭褂脽o(wú)服務(wù)器意味著你無(wú)法直接訪問(wèn)執(zhí)行代碼的環(huán)境。

請(qǐng)記住,單元測(cè)試必須完整而審慎地編寫。

5.監(jiān)控

無(wú)服務(wù)器允許將應(yīng)用程序分解為更小的模塊。但這可能會(huì)導(dǎo)致分布式監(jiān)控的新問(wèn)題。

通過(guò)將一組無(wú)服務(wù)器組件鏈接在一起,端到端跟蹤請(qǐng)求 / 響應(yīng)的能力變得非常重要,但是與遺留監(jiān)控工具一起使用會(huì)非常麻煩。

雖然 Azure 應(yīng)用程序洞察可以幫助我們監(jiān)控 Azure 函數(shù),但是熟悉度量標(biāo)準(zhǔn)并不容易。

[[312729]]

8. 小結(jié)

從單一服務(wù)器遷移到無(wú)服務(wù)器很不容易。它需要大量投資和管理層的參與。最重要的是,實(shí)際負(fù)責(zé)開(kāi)發(fā)的團(tuán)隊(duì)需要具備難以置信的紀(jì)律和技能。

不過(guò),這樣做的好處很多。

通常,從小事做起是一個(gè)好主意。與其等待一個(gè)大的一次性動(dòng)作,不如試著采取漸進(jìn)步驟,從錯(cuò)誤中學(xué)習(xí)、迭代、再試一次。另外,不要一開(kāi)始就追求完美的設(shè)計(jì)。相反,你應(yīng)該愿意進(jìn)行迭代和改進(jìn)。

最后請(qǐng)記住,無(wú)服務(wù)器不是一個(gè)目的地,而是一個(gè)旅程,一個(gè)持續(xù)改進(jìn)的旅程。

英文原文:

https://hackernoon.com/migration-on-premises-application-to-serverless-72w32ju

 

責(zé)任編輯:張燕妮 來(lái)源: 架構(gòu)頭條
相關(guān)推薦

2019-09-03 09:41:48

運(yùn)維架構(gòu)技術(shù)

2010-12-01 13:05:11

Nikto

2021-12-01 12:30:43

NiceUmiJS前端

2019-09-20 15:05:23

軟件數(shù)據(jù)庫(kù)硬件

2018-08-09 09:05:17

2018-05-10 08:18:12

無(wú)服務(wù)器運(yùn)維服務(wù)器

2018-09-03 09:22:25

監(jiān)控服務(wù)器性能

2019-04-30 10:27:46

無(wú)服務(wù)器云計(jì)算安全

2018-02-24 10:15:36

無(wú)服務(wù)器容器云計(jì)算

2020-09-17 07:00:00

DevOps無(wú)服務(wù)器技術(shù)運(yùn)維

2021-07-29 07:55:20

React實(shí)踐代碼

2021-10-28 08:00:00

數(shù)據(jù)庫(kù)SQL技術(shù)

2022-03-04 08:17:53

PageRank網(wǎng)絡(luò)等級(jí)

2021-07-08 07:30:13

Webpack 前端Tree shakin

2022-01-05 09:28:31

無(wú)服務(wù)器計(jì)算服務(wù)器應(yīng)用程序

2009-06-11 10:54:25

GlassFish服務(wù)

2019-01-30 14:42:00

Apache服務(wù)器web服務(wù)器

2010-09-02 15:09:56

DHCP服務(wù)器

2011-03-02 10:51:09

vsftpd

2025-02-14 09:53:50

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)