微服務體系結構是一種將服務器應用程序構建為一組小型服務的方法,每個服務都按自己的進程運行,并通過 HTTP 和 WebSocket 等協議相互通信。每個微服務都在特定的界定上下文(每服務)中實現特定的端到端域和業務功能,并且必須由自動機制進行自主開發和獨立部署。最后,每個服務都應該擁有自己的相關域數據模型和域邏輯,并能使用不同的數據存儲技術(SQL 和非 SQL),對每個微服務使用不同的編程語言。
為什么要使用微服務? 一言以蔽之,就是因為靈活性。從長遠來看,微服務能夠將應用程序設計為基于許多可獨立部署且能制定具體發布規劃的服務,從而可以在復雜的可高度擴展大型系統中實現極高的可維護性。
微服務的另外一大優勢是,可以獨立擴展。您可以擴展特定的微服務,而無需一次性擴展龐大的應用程序塊整體。這樣一來,可以單獨擴展需要更多處理能力或網絡帶寬以支撐需求的功能區域,而不用擴展應用程序中實際并不需要更多處理能力或網絡帶寬的其他區域。
通過構建精細的微服務應用程序,您可以持續集成和開發,并能加速在應用程序中實現新功能。通過精細分解應用程序,您還可以單獨運行和測試微服務,并能在保持微服務之間的嚴格協定的同時獨立發展微服務。只要您不破壞協定或接口,就可以在后臺更改任何微服務實現,并能添加新功能,而不破壞其他依賴微服務。
使用微服務方法,根本宗旨就是借助靈活更改和快速迭代實現高效率,因為您可以更改復雜的可擴展大型應用程序的特定一小部分。
每個微服務的數據主權
這種方法遵循的一項重要規則是,每個微服務都必須擁有自己的域數據和邏輯(在自治生命周期內),且每個微服務都必須獨立部署。這實際上與完整的應用程序擁有自己的邏輯和數據別無二致。
也就是說,使用此方法,域的概念模型因子系統或微服務而異。以企業應用程序為例,其中客戶關系管理 (CRM) 應用程序、交易購買子系統和客戶支持子系統各自調用唯一客戶實體屬性和數據,并采用不同的界定上下文。
此原則與 DDD 中的原則類似,即每個界定上下文(可與子系統/服務相比的模式)必須擁有自己的域模型(數據和邏輯)。每個 DDD 界定上下文均與不同的微服務相關聯。
另一方面,許多應用程序中使用的傳統(或整體)方法是對整個應用程序及其所有內部子系統使用一個集中數據庫(通常是規范化 SQL 數據庫),如圖 所示。這種方法起初看來比較簡單,似乎能夠在不同的子系統中重復使用實體,從而保持所有對象的一致性。但實際上,您最終會得到為許多不同的子系統提供服務的大型表格,其中包括大多數情況下并不需要的屬性和列。相當于在進行短途徒步旅行、一天自駕游和學習地理知識時使用同一張自然地圖。
微服務無狀態還是有狀態?
如前所述,每個微服務都必須擁有自己的域模型。對于無狀態微服務,數據庫是外部的,并采用 SQL Server 等關系數據庫選項,或 MongoDB 等 NoSQL 選項。進一步探究發現,服務本身可以是有狀態的,也就是說數據駐留在同一微服務中。此類數據不僅可以存在于同一服務器中,還可以存在于同一微服務進程中、內存中、硬盤驅動器中,并能復制到其他節點。
無狀態是非常有效的方法,比有狀態微服務更易于實現,因為無狀態類似于傳統的已知模式。不過,無狀態微服務會導致進程和數據源之間出現延遲,同時還會在通過其他緩存和隊列提高性能時呈現更多移動對象。結果就是,您最終會得到包含許多層級的復雜體系結構。
另一方面,有狀態微服務在高級方案中脫穎而出,因為域邏輯和數據之間沒有延遲。繁重的數據處理、游戲后端、數據庫即服務和其他低延遲方案都受益于有狀態服務,因為它能啟用本地狀態以提高訪問速度。
缺點是, 有狀態服務會增加復雜性,加大了擴展難度。對于跨有狀態微服務副本的數據復制、數據分區等問題,必須實施通常在外部數據庫邊界內實現的功能。而這正是 Service Fabric 最有幫助的一個地方,即簡化有狀態微服務的開發和生命周期。
微服務方法的任何優點都伴隨著缺點。如果您親自操作,則會發現分布式計算和復雜的微服務部署很難管理。Service Fabric 提供了一種體系,方便您以卓有成效的方式創建、部署、運行和管理微服務。
什么是 Service Fabric? 它是一種分布式系統平臺,用于構建面向云的可高度擴展且易于管理的可靠應用程序。Service Fabric 可應對開發和管理云應用程序的巨大挑戰。通過使用 Service Fabric,開發者和管理員無需解決復雜的基礎結構問題,只需專注于實現要求非常高的任務關鍵型工作負載即可,因為他們知道應用程序既可擴展,又可管理,而且還十分可靠。Service Fabric 代表 Microsoft 的下一代中間件平臺,用于構建和管理這些企業級云擴展服務。
Service Fabric 是一種通用的部署環境;您可以部署基于任意語言(Microsoft .NET Framework、Node.js、Java 和 C++)或數據庫運行時(如 MongoDB)的所有可執行文件。
學習Azure Service Fabric,首先需要搭建學習的環境,https://azure.microsoft.com/en-us/documentation/articles/service-fabric-get-started/ 這是微軟官方的入門文檔,我們下面是在Win10/vs2015上的環境搭建。
構建和運行Azure Service Fabric應用程序,需要在開發機器上安裝Service Fabric sdk和工具,也需要激活執行SDK里的PowerShell腳本。
安裝運行時,SDK和開發工具,通過WPI 工具提供三個配置選項,我們選擇 Install the Service Fabric runtime, SDK, and tools for Visual Studio 2015:
安裝完成后再Visual Studio 的 Cloud 下就有了Service Fabric 的應用程序模板
激活PowerShell 腳本執行
Service Fabric 使用PowerShell 腳本來創建本地開發集群和使用Visual Studio部署應用,Windows 默認并沒有激活執行PowerShell腳本的執行,所以首先需要修改PowerShell的執行策略,使用管理員賬號打開PowerShell ,執行下面的命令:
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force -Scope CurrentUse
文章列表