微服務:雲驅動的應用架構變革

我們正處在由雲驅動的應用開發和IT管理的改變之中。快速,靈活,低成本,可大規模擴展的雲基礎架構,和提供自助服務,按量付費的計費方式,可大幅提高運營效率,並快速體現業務價值。容器的出現,快速啟動,標準化的應用程序打包和隔離模式,又進一步提高了運營效率和敏捷性。

但是,許多公司發現,使他們的應用程序具有高可用性,可擴展性和敏捷性仍然面臨挑戰。競爭的商業壓力要求應用程序不斷迭代,添加新的功能和特點,同時保持7*24可用。例如,銀行網站是不可接受維護宕機的。同樣,一個電子商務網站即使短時間內宕機,也會導致客戶流失到其它可提供7*24服務的競爭對手網站去。不能滿足這些要求,意味著可能導致丟失業務。

這些業務壓力正在推動開發人員採用"微服務"的應用程序架構模型。在這篇文章中,我將討論微服務體系結構如何以及為什麼能夠幫助應用程序開發和生命周期任務,並描述平台可以提供的支持這些體系結構的功能。然後,我將列舉開發人員通常使用的一些被作為微服務應用程序基礎的平台。

Advertisements

1. 傳統應用模型

數十年來,提供新硬體(無論是物理的還是虛擬的)的成本,時間和複雜性都強烈地影響了應用程序的開發。當這些應用程序是關鍵系統時,這些因素更為明顯,因為高可用性需要高度可用的基礎架構,包括昂貴的硬體(如SAN和硬體負載平衡器)。由於傳統IT基礎設施是靜態的,即使在虛擬化的情況下,應用程序也被編寫為靜態的大小和設計用於特定的硬體。即使將應用程序分解,去盡量減少硬體需求並提供某種級別的敏捷性和獨立擴展,通常也將其納入傳統的三層模式,即Web,業務邏輯和數據層,如下圖所示:

圖1.三層應用

但是,每一層仍然是一個整體,實現了不同的功能,這些功能被組合成一個應用系統,並部署到預先安裝的用於高峰負載的硬體上。當業務導致應用負載超出其硬體配置時,解決方案通常是"升級硬體",以避免數據中心重新配置和軟體重新架構。

Advertisements

整體應用模型是基礎架構局限性的自然結果,但是導致效率低下。靜態的基礎設施和較長的開發周期意味著即便將應用程序分解為幾層以下,也幾乎沒有優勢,所以開發人員在層之間的不相關的應用程序服務之間建立了緊密的耦合。對任何應用程序服務(即使是小應用程序服務)的更改都要求對整個層進行重新測試和重新部署。一個簡單的更新可能會對其他層次產生無法預料的影響,使得變更風險增大,並延長開發周期,以便進行更嚴格的測試。它們依賴於靜態分配的資源和高度可用的硬體,使得應用程序容易受到負載和硬體性能的變化影響。一個硬體故障可能會使整個應用系統陷入困境或使其性能嚴重下降。

最後,利用分層方法的應用系統所面臨的另一個挑戰是通過存儲在後端層中的數據提供快速的性能。一個典型的方法是引入中間緩存來緩衝計算和數據分離造成的低效率,但是通過增加未使用的硬體資源提高了成本,並且創造了額外的開發和更新複雜性。

圖2.使用緩存的三層應用系統

2. 微服務架構

雖然傳統的體系結構仍然有其簡單和有限的規模應用程序,微服務是一種不同的應用程序開發和部署方法,非常適合許多現代雲應用程序的敏捷性,規模和可靠性要求。一個應用程序被分解成獨立的組件,稱為"微服務",協同工作來提供應用程序的整體功能。術語"微服務"強調應用程序應該由足夠小的服務組成,以真正反映獨立的功能點,以便每個微服務實現單一功能。而且,每個微服務都有明確的API,通常是RESTful,用於與其他微服務進行通信和共享數據。微服務還必須能夠相互獨立地進行版本和更新。這種鬆散耦合是支持應用程序快速可靠演變的基礎。圖3顯示了傳統應用系統如何分解成不同的微服務。

圖3.將傳統應用分割成微服務

基於微服務的應用程序還可以將應用程序與運行所在的基礎架構分離。與開發人員向IT部門聲明資源需求的傳統應用不同,微服務將其資源需求聲明為稱為"群集管理器"的分散式軟體系統,該系統將這些資源"調度"或放置到分配給群集的計算機上,以最大化群集總體資源利用率,同時遵守每個微服務對高可用性和數據複製的要求,如圖4所示。由於微服務通常被打包為容器,而且許多通常可以放在單個伺服器或虛擬機中,所以它們的部署速度很快,可以密集打包最小化集群的規模要求。

圖4.使用部署的微服務的伺服器群集

有了這個模型,微服務橫向擴展幾乎是瞬間的,允許應用程序適應不斷變化的負載。它們的鬆散耦合也意味著微服務可以獨立擴展。例如,公共端點HTTP偵聽器是應用程序的面向Web的功能中的一個微服務,可能是應用程序的唯一微服務,可以擴展以處理一些額外的傳入流量。

基於微服務的應用程序的獨立分散式特性也使滾動更新成為可能,在任何給定的時間裡,只有一個微服務實例的子集將被更新。如果檢測到問題,則在錯誤代碼或配置更新所有實例之前,可以"回滾"或取消更新。如果更新系統是自動化的,與持續集成(CI)和持續交付(CD)管道的集成允許開發人員安全且頻繁地發展應用程序,而不用擔心影響可用性。

雖然應用程序可伸縮性的經典模型是具有負載均衡,無狀態層和共享的外部數據存儲或資料庫來存儲持久狀態,但有狀態的微服務可以實現更高的性能,更低的延遲,大規模和維護開發人員敏捷性以進行服務更新。有狀態的微服務管理持久性數據,通常將其存儲在其所在的伺服器的本地,以避免網路訪問的開銷和跨服務操作的複雜性。這可以實現儘可能快的處理,並且可以消除對高速緩存的需求。此外,為了管理數據大小和傳輸吞吐量超出單個伺服器可以支持的吞吐量,可擴展的有狀態微服務在它們的實例之間分割數據並實現模式版本化,使得即使在更新期間客戶端也能看到一致的版本,而不管它們與哪個微服務實例進行通信用。

3. 微服務應用程序平台

我們在內部運行雲計算微軟服務的經驗使我們深入了解了與雲規模設計,開發和部署大規模應用有關的複雜性。無論應用程序的設計有多好,頻繁更新大型應用程序都是一個挑戰。只是將微服務放入虛擬機甚至容器中並不能充分發揮微服務方法的潛力,這就需要一個以DevOps為中心的工具的微服務應用程序平台。

全功能的微服務應用程序平台提供了所有先前所述的微服務架構的成本效益,可擴展性和全天候可用性。它還需要更進一步。如前所述,它應該使用可擴展的健康模型和自動回滾來編排安全可靠的升級。它還可以幫助微服務通過提供命名服務來發現彼此,並監視和維護其健康。例如,在擴展或修復時,微服務平台通過命名服務將更新后的放置信息傳遞給其他微服務,以便它們可以快速建立或重新建立通信。

為了保持微服務的健康,當運行的軟體或硬體發生故障或必須重新啟動以升級時,平台會自動將實例移動到正常的VM或伺服器。另外,微服務平台必須能夠在私有雲和公共雲中部署。這對於支持從私有雲到公共雲的工作負載混合場景是必要的,並且允許在私有雲中進行生產部署的公共雲開發/測試。在選擇應用程序平台時,支持多雲也解決了供應商鎖定問題,將平台與基礎架構分離。

圖5.微服務應用平台

本節簡要介紹幾種開發人員正在構建和部署微服務應用程序的流行平台。

  • Docker Swarm和Docker Compose

Docker容器的標準打包格式和資源隔離使得它們與微服務架構非常契合。 Docker Compose定義了一個支持多個Docker打包的微服務的應用程序模型,Docker Swarm作為一組基礎結構的集群管理器,提供了與單節點Docker安裝相同的協議,因此它可以與廣泛的Docker工具生態系統。

  • Kubernetes

Kubernetes是一個開源系統,用於自動化部署,操作和擴展集裝箱化應用程序。它將組成應用程序的容器分組為邏輯單元,便於管理和發現。最初由Google開發,它建立在運行搜索和Gmail等大型服務的體驗上。即使是一些傳統的PaaS解決方案也正在與Apprenda等Kubernetes合併。。

  • Mesosphere DCOS,Apache Mesos和Marathon

由Mesos提供支持的Mesosphere DCOS是一個可擴展的集群管理器,包括Mesosphere的Marathon(一種生產級的容器編排工具)。它作為Azure容器服務的一部分提供。Mesosphere DCOS提供微服務平台功能,包括服務發現,負載平衡,運行狀況檢查,布局約束和度量標準聚合。最後,Mesosphere提供了一個提供額外功能的認證服務庫,如Kafka,Chronos,Cassandra,Spark等等,都可以用一個命令來安裝。

  • OpenShift

Red Hat推出的OpenShift是一種平台即服務產品,利用Docker基於容器的打包來部署Kubernetes的容器編排和計算管理功能,使用戶能夠運行容器化的JBoss中間件,多種編程語言,資料庫和其他應用程序運行時。 OpenShift Enterprise 3提供了一個devops體驗,使開發人員能夠在安全的企業級應用程序基礎結構中自動執行應用程序構建和部署過程。

  • Pivotal Cloud Foundry

Pivotal Cloud Foundry通過將Cloud Foundry的工作流程和容器調度與服務發現,客戶端負載平衡,斷路器和分散式跟蹤等微服務模式集成到一起,實現了微服務架構,利用Spring Cloud。 Pivotal Cloud Foundry通過部署和服務管理功能(如自動調節,藍綠色更新,運行狀況監控,應用程序指標,流式日誌等)支持正在進行的微服務操作。

4. 結論

計算世界已經隨著雲的到來而永遠改變。云為開發人員提供了即時,便宜,幾乎無限的基礎設施資源。雲的敏捷性和高可用性以及現代業務的不斷靈活性要求使傳統架構變得難以適應,並導致微服務應用的興起。藉助全面的微服務平台,開發人員可以在公有雲和私有雲上創建支持大規模,高性能,高可用性,成本效益和獨立生命周期管理的應用程序。微服務是由雲驅動的應用程序革命。


作者: Mark Russinovich | CTO, Microsoft Azure。

翻譯:雲星數據 | www.cloud-star.com.cn是國內領先的多雲管理平台和服務提供商,也是全球混和雲領導者RightScale在國內的唯一合作夥伴。其合作推出的雲管理平台RightCloud可以幫企業構建涵蓋IaaS/PaaS/DaaS的多雲體系,提高管控效率,大幅降低企業雲成本。

Advertisements

你可能會喜歡