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ū)域。
該圖顯示了全球分布的應(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)
該圖顯示了使用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:
屏幕截圖顯示了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。