基於微服務設計模式的現代應用程序面臨着一系列挑戰。微服務需要有一個強大的服務發現機制來實現動態連接。它們需要松散耦合,實現自主性和獨立縮放。微服務需要支持多種語言,其中每個服務都是以最合適的語言、框架和運行時實現的。盡管采用容器和編排引擎(如 Kubernetes)可以應對打包、部署和擴展方面的挑戰,但開發過程仍然很復雜。微軟發布的分布式應用程序運行時 (Dapr) 開發現代應用程序的新方法來應對微服務開發的復雜性,這是微服務和雲原生應用程序的一個平台和語言無關的運行時。
Dapr 的體系結構對於開發人員來說非常迷人,尤其是那些熟悉 20 世紀 90 年代 COM 或 EJB 的開發人員。與 COM/DCOM 和 EJB 為在 Windows 和 Java 上運行的分布式應用程序提供管道的方式類似,Dapr 基於容器化、雲原生、微服務的應用程序所需的繁重工作。Dapr 有三大元素:運行時、 服務構建塊和SDK
Dapr 運行時可以安裝在任何可以運行 Docker 的計算機上。核心運行時是容器化的,可以部署在運行 Linux、Windows 或 Mac 操作系統的 x86/ARM 處理器上。它也可以安裝在多節點 Kubernetes 群集中,也可以安裝在資源受限的邊緣設備(如樹莓派)上。唯一的要求是主機環境 能夠運行 Docker。
Dapr 使得使用在同一主機、內部或外部數據服務以及基於 pub/sub 模式的消息傳遞服務中運行的其他微服務變得非常簡單。由於 Dapr 使用Sidecar 模式,因此可以輕松地集成在 Kubernetes 上運行的微服務,以利用構建基塊。Dapr 構建基塊充當配置為組件的內部/外部服務提供商和內部使用者之間的中間層。由於每個服務的使用者始終與一個眾所周知的終結點通信,Dapr 只需將調用重定向到當前配置的組件。
上圖是狀態構建基塊組件封裝構建基塊 API 的實現。狀態構建基塊的實現可能包括 Redis、etcd、MongoDB、Amazon DynamoDB 和 Azure CosmosDB。許多組件是可插拔的,因此一個實現可以很容易地換換到另一個實現。
為了使不同語言使用 Dapr 更自然,它還包括用於 Go、Java、JavaScript、.NET 和 Python 的語言特定 SDK。這些 SDK 通過語言封裝的 API 而不是調用標准 http/gRPC API 公開 Dapr 構建基塊中的功能,例如保存狀態、發布事件或創建Actor。這使開發人員能夠用自己選擇的語言編寫無狀態和有狀態函數和參Actor的組合。
Dapr 將一些經過驗證的技術和最佳實踐帶到微服務開發中。它通過即插即用模型將90 年代的數據驅動的客戶端/服務器應用程序的操作,應用於 現代雲原生應用程序所需的最常見服務。
相關文章: