如何使用Azure Cosmos DB和Pulumi構(gòu)建全球分布式應(yīng)用程序

來源:Microsoft Azure
作者:Rimma Nehme
時(shí)間:2020-08-05
1941
Pulumi通過一個(gè)獨(dú)特的平臺(tái),重塑了人們?nèi)绾螛?gòu)建現(xiàn)代云應(yīng)用程序,該平臺(tái)將深度系統(tǒng)和基礎(chǔ)架構(gòu)創(chuàng)新與優(yōu)雅的編程模型和開發(fā)人員工具相結(jié)合。

Pulumi通過一個(gè)獨(dú)特的平臺(tái),重塑了人們?nèi)绾螛?gòu)建現(xiàn)代云應(yīng)用程序,該平臺(tái)將深度系統(tǒng)和基礎(chǔ)架構(gòu)創(chuàng)新與優(yōu)雅的編程模型和開發(fā)人員工具相結(jié)合。

我們生活在奇妙的時(shí)代,不同大陸的人們和企業(yè)可以光速互動(dòng)。眾多行業(yè)和應(yīng)用程序面向全球用戶:電子商務(wù)網(wǎng)站,多人在線游戲,聯(lián)網(wǎng)的IoT設(shè)備,協(xié)作工作和休閑體驗(yàn)等等。所有這些應(yīng)用程序都需要最終用戶附近的計(jì)算和數(shù)據(jù)基礎(chǔ)架構(gòu),以最大程度地減少延遲并保持用戶體驗(yàn)的吸引力?,F(xiàn)代云使這些方案成為可能。

Azure基礎(chǔ)架構(gòu)

Azure Cosmos DB提供了一個(gè)交鑰匙型數(shù)據(jù)分發(fā)到任意數(shù)量的區(qū)域,這意味著可以在運(yùn)行生產(chǎn)工作負(fù)載的同時(shí)添加或刪除位置。Azure負(fù)責(zé)數(shù)據(jù)復(fù)制,彈性和效率,同時(shí)提供用于讀取和寫入操作的API,延遲少于10毫秒。

相反,計(jì)算服務(wù)(虛擬機(jī),容器實(shí)例,Azure App服務(wù),Azure功能和托管的Azure Kubernetes服務(wù))位于單個(gè)Azure區(qū)域中。為了充分利用數(shù)據(jù)庫的地理冗余,用戶應(yīng)將其應(yīng)用程序部署到每個(gè)目標(biāo)區(qū)域。

ia_1700000003.png

該圖顯示了全球分布的應(yīng)用程序。

應(yīng)用程序區(qū)域必須與Azure Cosmos DB區(qū)域保持同步,才能享受低延遲的好處。運(yùn)營團(tuán)隊(duì)必須管理應(yīng)用程序和服務(wù)池,以提供正確的位置以及自動(dòng)擴(kuò)展配置,有效的網(wǎng)絡(luò)連接,安全性和可維護(hù)性。

為了幫助管理復(fù)雜性,采用了將基礎(chǔ)結(jié)構(gòu)作為代碼的方法。

基礎(chǔ)架構(gòu)即代碼

盡管Azure門戶是所有Azure服務(wù)的絕佳選擇,但不應(yīng)將其直接用于供應(yīng)生產(chǎn)應(yīng)用程序。相反,我們應(yīng)該努力用可以執(zhí)行以創(chuàng)建所有必需的云資源的程序來描述基礎(chǔ)架構(gòu)。

傳統(tǒng)上,這可以通過自動(dòng)化腳本(例如PowerShell Cmdlet或調(diào)用Azure CLI的bash腳本)來實(shí)現(xiàn)。但是,這種方法費(fèi)力且容易出錯(cuò)。使環(huán)境從當(dāng)前狀態(tài)達(dá)到理想狀態(tài)通常并非易事。腳本中間的故障通常需要手動(dòng)干預(yù)才能修復(fù)環(huán)境,從而導(dǎo)致停機(jī)。

所需狀態(tài)配置是基礎(chǔ)結(jié)構(gòu)定義的另一種樣式。用戶以聲明的方式描述基礎(chǔ)結(jié)構(gòu)的所需最終狀態(tài),工具負(fù)責(zé)將環(huán)境從其當(dāng)前狀態(tài)轉(zhuǎn)換為具有所需狀態(tài)的奇偶校驗(yàn)。這樣的程序?qū)τ谘莼透欁兓匀弧?/span>

Azure資源管理器模板是Azure領(lǐng)域中定制的期望狀態(tài)配置工具。狀態(tài)被描述為一個(gè)JSON模板,列出了所有資源和屬性。但是,大型JSON模板很難手動(dòng)編寫。他們的學(xué)習(xí)曲線很高,并且很快變得龐大,復(fù)雜,冗長且重復(fù)。開發(fā)人員發(fā)現(xiàn)自己缺少諸如迭代或自定義函數(shù)之類的簡單編程語言的可能性。

Pulumi通過使用通用編程語言來描述所需的云基礎(chǔ)架構(gòu)狀態(tài)來解決此問題。使用JavaScript,TypeScript或Python可以將代碼量減少很多倍,同時(shí)將諸如函數(shù)和組件之類的結(jié)構(gòu)引入DevOps工具箱。

Pulumi的全球應(yīng)用

為了說明這一點(diǎn),Azure開發(fā)了TypeScript程序來在Azure中置備分布式應(yīng)用程序。

目標(biāo)方案需要大量資源才能在多個(gè)Azure區(qū)域中分布應(yīng)用程序,包括:

在多個(gè)區(qū)域中配置Azure Cosmos數(shù)據(jù)庫帳戶

將應(yīng)用程序?qū)拥母北静渴鸬矫總€(gè)這些區(qū)域

將每個(gè)應(yīng)用程序連接到Azure Cosmos DB本地副本

添加流量管理器以將用戶請求路由到最近的應(yīng)用程序端點(diǎn)

ia_1700000004.png

該圖顯示了使用Azure和Pulumi的全局應(yīng)用程序的流程。

但是,我們可以依靠Pulumi的CosmosApp組件代替手動(dòng)編寫此代碼,如如何使用Azure Cosmos DB和Pulumi構(gòu)建全球分布式應(yīng)用程序中所述。該組件創(chuàng)建分布式Azure Cosmos DB資源以及前端路由組件,同時(shí)允許可插入的計(jì)算層實(shí)現(xiàn)。

可以在可重用組件中找到示例代碼,以使用Azure Cosmos DB創(chuàng)建全局分布的應(yīng)用程序。

Pulumi CLI執(zhí)行代碼,將其轉(zhuǎn)換為要?jiǎng)?chuàng)建的資源樹,然后將所有代碼部署到Azure:

ia_1700000005.png

屏幕截圖顯示了Pulumi的CLI執(zhí)行代碼。

命令成功執(zhí)行后,應(yīng)用程序?qū)⒃谖疫x擇的三個(gè)區(qū)域中啟動(dòng)并運(yùn)行。

基礎(chǔ)架構(gòu)即代碼有助于在全球和可擴(kuò)展的云應(yīng)用程序領(lǐng)域中實(shí)現(xiàn)現(xiàn)代DevOps實(shí)踐。

Pulumi允許您使用通用編程語言來定義基礎(chǔ)結(jié)構(gòu)。它將最佳的工具和實(shí)踐從軟件開發(fā)領(lǐng)域帶到基礎(chǔ)架構(gòu)管理領(lǐng)域。

嘗試使用具有無服務(wù)器功能,容器或虛擬機(jī)的CosmosApp(可在GitHub上使用TypeScript,C#)來開始使用Pulumi和Azure。

立即登錄,閱讀全文
原文鏈接:點(diǎn)擊前往 >
文章來源:Microsoft Azure
版權(quán)說明:本文內(nèi)容來自于Microsoft Azure,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家