Pulumi通過一個獨特的平臺,重塑了人們?nèi)绾螛?gòu)建現(xiàn)代云應用程序,該平臺將深度系統(tǒng)和基礎(chǔ)架構(gòu)創(chuàng)新與優(yōu)雅的編程模型和開發(fā)人員工具相結(jié)合。
我們生活在奇妙的時代,不同大陸的人們和企業(yè)可以光速互動。眾多行業(yè)和應用程序面向全球用戶:電子商務網(wǎng)站,多人在線游戲,聯(lián)網(wǎng)的IoT設備,協(xié)作工作和休閑體驗等等。所有這些應用程序都需要最終用戶附近的計算和數(shù)據(jù)基礎(chǔ)架構(gòu),以最大程度地減少延遲并保持用戶體驗的吸引力?,F(xiàn)代云使這些方案成為可能。
Azure基礎(chǔ)架構(gòu)
Azure Cosmos DB提供了一個交鑰匙型數(shù)據(jù)分發(fā)到任意數(shù)量的區(qū)域,這意味著可以在運行生產(chǎn)工作負載的同時添加或刪除位置。Azure負責數(shù)據(jù)復制,彈性和效率,同時提供用于讀取和寫入操作的API,延遲少于10毫秒。
相反,計算服務(虛擬機,容器實例,Azure App服務,Azure功能和托管的Azure Kubernetes服務)位于單個Azure區(qū)域中。為了充分利用數(shù)據(jù)庫的地理冗余,用戶應將其應用程序部署到每個目標區(qū)域。
該圖顯示了全球分布的應用程序。
應用程序區(qū)域必須與Azure Cosmos DB區(qū)域保持同步,才能享受低延遲的好處。運營團隊必須管理應用程序和服務池,以提供正確的位置以及自動擴展配置,有效的網(wǎng)絡連接,安全性和可維護性。
為了幫助管理復雜性,采用了將基礎(chǔ)結(jié)構(gòu)作為代碼的方法。
基礎(chǔ)架構(gòu)即代碼
盡管Azure門戶是所有Azure服務的絕佳選擇,但不應將其直接用于供應生產(chǎn)應用程序。相反,我們應該努力用可以執(zhí)行以創(chuàng)建所有必需的云資源的程序來描述基礎(chǔ)架構(gòu)。
傳統(tǒng)上,這可以通過自動化腳本(例如PowerShell Cmdlet或調(diào)用Azure CLI的bash腳本)來實現(xiàn)。但是,這種方法費力且容易出錯。使環(huán)境從當前狀態(tài)達到理想狀態(tài)通常并非易事。腳本中間的故障通常需要手動干預才能修復環(huán)境,從而導致停機。
所需狀態(tài)配置是基礎(chǔ)結(jié)構(gòu)定義的另一種樣式。用戶以聲明的方式描述基礎(chǔ)結(jié)構(gòu)的所需最終狀態(tài),工具負責將環(huán)境從其當前狀態(tài)轉(zhuǎn)換為具有所需狀態(tài)的奇偶校驗。這樣的程序?qū)τ谘莼透欁兓匀弧?/span>
Azure資源管理器模板是Azure領(lǐng)域中定制的期望狀態(tài)配置工具。狀態(tài)被描述為一個JSON模板,列出了所有資源和屬性。但是,大型JSON模板很難手動編寫。他們的學習曲線很高,并且很快變得龐大,復雜,冗長且重復。開發(fā)人員發(fā)現(xiàn)自己缺少諸如迭代或自定義函數(shù)之類的簡單編程語言的可能性。
Pulumi通過使用通用編程語言來描述所需的云基礎(chǔ)架構(gòu)狀態(tài)來解決此問題。使用JavaScript,TypeScript或Python可以將代碼量減少很多倍,同時將諸如函數(shù)和組件之類的結(jié)構(gòu)引入DevOps工具箱。
Pulumi的全球應用
為了說明這一點,Azure開發(fā)了TypeScript程序來在Azure中置備分布式應用程序。
目標方案需要大量資源才能在多個Azure區(qū)域中分布應用程序,包括:
在多個區(qū)域中配置Azure Cosmos數(shù)據(jù)庫帳戶
將應用程序?qū)拥母北静渴鸬矫總€這些區(qū)域
將每個應用程序連接到Azure Cosmos DB本地副本
添加流量管理器以將用戶請求路由到最近的應用程序端點
該圖顯示了使用Azure和Pulumi的全局應用程序的流程。
但是,我們可以依靠Pulumi的CosmosApp組件代替手動編寫此代碼,如如何使用Azure Cosmos DB和Pulumi構(gòu)建全球分布式應用程序中所述。該組件創(chuàng)建分布式Azure Cosmos DB資源以及前端路由組件,同時允許可插入的計算層實現(xiàn)。
可以在可重用組件中找到示例代碼,以使用Azure Cosmos DB創(chuàng)建全局分布的應用程序。
Pulumi CLI執(zhí)行代碼,將其轉(zhuǎn)換為要創(chuàng)建的資源樹,然后將所有代碼部署到Azure:
屏幕截圖顯示了Pulumi的CLI執(zhí)行代碼。
命令成功執(zhí)行后,應用程序?qū)⒃谖疫x擇的三個區(qū)域中啟動并運行。
基礎(chǔ)架構(gòu)即代碼有助于在全球和可擴展的云應用程序領(lǐng)域中實現(xiàn)現(xiàn)代DevOps實踐。
Pulumi允許您使用通用編程語言來定義基礎(chǔ)結(jié)構(gòu)。它將最佳的工具和實踐從軟件開發(fā)領(lǐng)域帶到基礎(chǔ)架構(gòu)管理領(lǐng)域。
嘗試使用具有無服務器功能,容器或虛擬機的CosmosApp(可在GitHub上使用TypeScript,C#)來開始使用Pulumi和Azure。