Dapr,一個可以讓每一個開發人員更輕鬆地構建微服務應用程序的開源項目

使人驚訝的是,在過去幾年中,愈來愈多的開發人員轉向利用託管服務來部署和運行可擴展的雲原生應用程序。經過這種轉變,微服務架構已成爲構建雲原生應用程序的標準,而且能夠預見,到2022年,將有90%的新應用程序採用微服務架構。微服務架構提供了使人信服的好處,包括可伸縮性,鬆散的服務耦合和獨立部署,可是這種方法的成本很高,須要瞭解和熟練掌握分佈式系統。git

開發人員但願專一於業務邏輯,頻繁且增量地遷移遺留代碼,同時依靠平臺爲應用程序提供所需的規模,彈性,可維護性,以及雲原生架構的其餘屬性。可是,開發人員發現,雲和邊緣之間的可移植性受到限制,而且他們最終解決了相同的分佈式系統問題,例如狀態管理,彈性方法調用和事件處理。另外,許多編程運行時一般具備狹窄的語言支持和嚴格控制的功能集,這使得構建微服務體系結構具備挑戰性。github

爲了使全部開發人員可以使用任何語言和框架輕鬆地構建便攜式微服務應用程序,不管是編寫新代碼仍是遷移現有代碼,咱們很高興開源了Dapr。web

構建事件驅動,無狀態和有狀態的應用程序數據庫

例如,在構建包含多個服務的電子商務應用程序時,您可能但願使用有狀態的actor來抽象購物車服務,併爲支付和物流服務調用無狀態函數。編寫此應用程序可能須要使用多種語言,開發人員框架和基礎架構平臺,以及與外部服務集成。瞭解和管理如此複雜的技術堆棧會使開發人員沒法專一到核心業務上。編程

micro-app1.png

Dapr:雲和邊緣計算的微服務構件架構

Dapr是一個開源,可移植的,事件驅動的運行時,使開發人員能夠輕鬆構建在雲和邊緣上運行的彈性,微服務架構的無狀態和有狀態應用程序。 Dapr包含全部編程語言和開發人員框架,並簡化了構建應用程序(例如電子商務示例)的過程。併發

Dapr包含了一些構建,這些構件經過標準HTTP或gRPC API訪問,因此支持各類編程語言。這些構件爲全部開發人員提供了行之有效的行業最佳實踐,而且每一個構件都是獨立的。您能夠在應用程序中使用其中的一個或多個。此外,經過開源項目,咱們歡迎社區添加新的構建基塊,並將新的組件貢獻到現有的組件中。 Dapr徹底與平臺無關,這意味着您能夠在任何Kubernetes集羣以及與Dapr集成的其餘託管環境中本地運行應用程序。這使開發人員可以構建無需更改代碼便可在雲和邊緣上運行的微服務應用程序。app

dapr.jpg

Dapr構件目前處於Alpha狀態框架

架構和構建微服務應用程序時須要許多功能。在Dapr的第一個開源alpha版本中,咱們專一於提供一些最經常使用的構建塊。curl

  • 服務調用 - 彈性的服務到服務調用使方法調用(包括重試)能夠在支持的託管環境中運行的任何遠程服務上進行。
  • 狀態管理 - 經過對鍵/值對的狀態管理,能夠輕鬆地編寫長期運行,高可用的有狀態服務以及同一應用程序中的無狀態服務。狀態存儲是可插拔的,而且能夠包括Azure Cosmos或Redis,以及組件路線圖上的其餘內容(例如AWS DynamoDB)。
  • 在服務之間發佈和訂閱消息傳遞 - 採用事件驅動的體系結構解決服務之間發佈事件和訂閱主題,以簡化水平可伸縮性並使它們可以應對故障。
  • 事件驅動的資源綁定 - 資源綁定和觸發器經過在事件驅動的體系結構上進一步構建規模,從而經過從任何外部資源(例如數據庫,隊列,文件系統,blob存儲,webhooks等)接收事件或向其發送事件來實現規模和彈性。例如,能夠觸發代碼經過Azure EventHub服務上的消息,而後將數據寫入Azure CosmosDB。
  • 虛擬atcor - 種無狀態和有狀態對象的模式,經過方法和狀態封裝使併發變得簡單。 Dapr在其虛擬actor運行時中提供了許多功能,包括併發,狀態,用於actor激活/停用的生命週期管理以及計時器和提醒以喚醒actor。
  • 服務間的分佈式追蹤 - 使用W3C Trace Context標準輕鬆診斷和觀察生產中的服務間調用,並將事件推送到跟蹤和監視系統。

用於可移植性和可擴展性的標準API

那麼,您如何使用這些Dapr構建塊?例如,假設您正在已部署到Kubernetes羣集中的微服務應用程序中使用Azure Functions運行時,而且您但願利用pub / sub模式在服務之間發送消息。現在,Azure Functions運行時還沒有內置此功能,可是經過在http上使用Dapr pub / sub構建塊,能夠輕鬆添加此新功能。您擁有新的開發人員力量!

此外,Dapr發佈/訂閱構建塊具備可插入的組件模型,這意味着您能夠動態選擇不一樣的實現方式來發送消息,而無需更改任何代碼。例如,您能夠根據本身的喜愛選擇Redis,Kafka或Azure Service Bus發佈/訂閱Dapr組件。並且在兩種狀況下,代碼都保持不變,包括使用標準API在不一樣支持的基礎架構之間可移植。

爲了同時實現可移植性和與現有代碼的輕鬆集成,Dapr經過http或gRPC提供了標準API。與pub / sub示例保持一致,下面的節點代碼顯示如何使用「 http:// <myappaddress> / dapr / subscribe」端點訂閱名爲「 A」和「 B」的主題,而後在什麼時候通知您的應用程序消息將發佈到這些主題。

dapr-js.jpg

爲了進行比較,這是使用從ASP.NET Core CreateWebHostBuilder()調用的UseStartup()處理程序以C#編寫的相同代碼。

dapr-net.jpg

向訂閱了這些主題的服務發佈事件就像使用主題名稱和有效負載調用Dapr本地http publish API同樣簡單。下面的示例節點代碼顯示瞭如何使用Dapr發佈API(在本地端口3500上),也可使用curl命令來完成此操做:
dapr-curl.jpg

如這些示例所示,在您的服務中使用Dapr不須要獲取編譯時間依賴性,僅需簡單地使用消息主體編寫URL便可。

Sidecar架構和支持的基礎架構
Dapr將其API做爲Sidecar體系結構(容器或進程)公開,不須要應用程序代碼包含任何Dapr運行時代碼。這使得與Dapr的集成易於與其餘運行時集成,並提供了應用邏輯的分離,從而提升了可支持性。

Dapr running as a side-car process

在Kubernetes這樣的容器託管環境中,Dapr能夠做爲邊車容器運行,而應用程序容器位於同一容器中:

Dapr running as a side-car container in a Kubernetes pod

Dapr的CLI可使入門變得容易,幷包括支持在開發機器,任何Kubernetes集羣(包括minikube)以及其餘基礎設施平臺(如IoT Edge)和路線圖上的Service Fabric上本地運行。開始使用Dapr,以下:

dapr init                   (for local deployment)
dapr init --kubernetes      (for Kubernetes deployment)

開發人員語言SDK和框架

爲了使Dapr對於不一樣的語言更加天然,它還包括針對Go,Java,JavaScript,.NET和Python的語言特定的SDK。這些SDK經過類型化的語言API(而不是調用http / gRPC API)公開了Dapr構建塊中的功能,例如保存狀態,發佈事件或建立actor。這使開發人員可使用他們選擇的語言編寫無狀態和有狀態功能以及參與者的組合。而且因爲這些SDK共享Dapr運行時,您甚至能夠得到跨語言的actor和功能支持!

此外,Dapr還能夠與任何開發人員框架集成。例如,在Dapr .NET SDK中,您將找到ASP.NET Core集成,該集成帶來了可響應其餘服務的發佈/訂閱事件的狀態路由控制器,從而使ASP.NET Core成爲構建微服務Web應用程序的更好框架。

瞭解更多

您能夠在http://dapr.io上閱讀有關Dapr...,並在https://github.com/dapr/dapr...

相關文章
相關標籤/搜索