Dapr微服务应用开发系列0:概述
題記:Dapr是什么,Dapr包含什么,為什么要用Dapr。
Dapr是什么
Dapr(Distributed Application Runtime),是微軟Azure內部創新孵化團隊的一個開源項目,皆在解決微服務應用開發過程的一些共性問題。以官方文檔的說法,Dapr是一個可移植、事件驅動的運行時,讓企業開發者更容易利用各種語言和框架構建柔性、無狀態和有狀態的微服務應用,并運行在云端和邊緣。
Dapr的核心由Go語言寫成,開發團隊一開始有計劃使用.NET Core/C#來寫,但是考慮到社區的接受程度,遂最終選定Go作為開發語言。當然,還是可以使用任何語言和框架來編寫Dapr的擴展功能。由于Dapr要解決的問題確實是大家面臨的一些痛點,并且Dapr的設計也獨樹一幟,所以一經開源,就成為GitHub上Star增長最快的開源項目之一,甚至達到5K Star的速率超過了Kubernetes。
Dapr包含什么
Dapr做的事情很簡單,就是利用Sidecar的模式,把代碼中的一些橫切關注點需求(Cross-cutting)分離和抽象出來,從而達到運行環境的獨立和對外部依賴(包括服務之間)的獨立。
這種獨立的途徑就是使用開放協議(HTTP和gRPC)來代替依賴特定協議。如下圖所示:
從上圖我們可以看到,使用Dapr開發的微服務應用理論上可以部署到任意的云提供商、邊緣設備、虛擬機、Service Fabric集群、Kubernetes集群里面。
并且在如下方面(稱之為Building Block)進行外部依賴的抽象:
服務之間的調用:不用操心服務注冊和發現的問題,也不用操心重試等問題
狀態的存儲:通過鍵值對來存儲應用邏輯的狀態,讓無狀態服務變為有狀態服務
事件的發布訂閱:微服務之間除了直接的遠程調用外,更多是依賴事件驅動的模式去產生關系,這里對事件發布訂閱進行了統一
外部資源的綁定:當需要把事件發布到微服務應用外部,或者從外部接收事件的時候,就可以使用資源綁定
Actors模式:通過Actors的模式,讓微服務可以以單線程的代碼實現大規模并行處理。實際上,Actors這部分功能的開發人員就是來自于Service Fabric團隊,兩者的API也基本保持一致。通過這樣的模式,也把Actors這種模式引入到了其他運行平臺
可觀測性:Dapr會幫助微服務應用發出基于W3C Trace Context標準和Open Telemetry規范的度量、日志、跟蹤信息,方便對應用進行調試、診斷和監控
密鑰管理:為微服務提供密鑰管理的能力,從而從依賴的外部密鑰管理服務中獨立出來。
下圖很好的展示了以上獨立抽象的能力是如何通過Sidecar模式實現的:
(Sidecar進程模式)
(Sidecar容器模式)
雖然Dapr暴露的所有能力都是基于開放協議HTTP和gRPC的,但是為了方便大家快速開發,目前還是提供了如下語言平臺的SDK:
C++ SDK
Go SDK
Java SDK,可以和Spring Boot集成
Javascript SDK,可以和Express集成
Python SDK,可以和Flask集成
.NET SDK,可以和ASP.NET Core集成
同時,Dapr還可以和微軟開源的FaaS開發框架Azure Functions進行集成,Dapr開發團隊也基于Azure Logic App的邊緣運行時版本為微服務應用提供了Workflows的能力
為什么要用Dapr
根據InfoQ的架構和設計技術趨勢報告(https://www.infoq.com/articles/architecture-trends-2020/),微服務已經成為軟件開發的主流。但是要開發微服務應用,大部分開發人員還是面臨諸多挑戰。根本原因在于我們更熟悉經典的3層架構,而對微服務這種分布式應用的開發經驗會顯得相對不足,很難應對分布式應用所要求的伸縮性、靈活性、可維護性等云原生的特點。
Dapr通過把一些構建微服務應用所需的最佳實踐內置到開放、獨立的Building Block中,讓開發人員更加專注于業務邏輯代碼的編寫,即可開發出功能強大的微服務應用。
更為重要的是,Dapr還抽象了運行環境,避免微服務應用和運行環境強綁定(這也是很多團隊“假上云”——僅使用VM的原因之一)。并且支撐Dapr的運行環境不僅僅限于Cloud,還有廣闊的Edge。
毫無疑問,Dapr獲得了很多用戶的青睞,官網上提到的Geek+使用Dapr構建了倉儲機器人的解決方案,Willow使用Dapr構建了智能鐵路管理系統。也還有很多大型企業正在采用Dapr來構建他們的微服務應用,甚至國內某互聯網巨頭不僅計劃采用還積極參與了Dapr社區的貢獻。
總結
以上是生活随笔為你收集整理的Dapr微服务应用开发系列0:概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes 在知名互联网公司的
- 下一篇: 你以为.NET Core仅仅是开源跨平台