Dapr是一套開源、可移植的事件驅動型運行時,允許開發人員輕松立足云端與邊緣位置運行彈性、微服務、無狀態以及有狀態等應用程序類型。Dapr能夠確保開發人員專注于編寫業務邏輯,而不必分神于解決分布式系統難題,由此顯著提高生產力并縮短開發時長。Dapr降低了構建微服務架構類現代云原生應用程序的入門門檻,Dapr應用程序已經能夠在生產場景中部署自托管基礎設施或Kubernetes集群。當使用自托管模式部署在虛擬機環境選用Consul 作為服務發現組件時, 1.8版本解決了一個問題 : Consul 用作名稱解析組件時,相同的 appid 無法實現負載平衡[1]。
2022年7月8日正式發布了1.8 版本[2],這是自從2021年2月發布首個1.0 版本以來第八次小版本更新,Dapr 1.8.0 版本的貢獻者數量眾多,我們要感謝所有 92位新的和現有的貢獻者,他們幫助實現了這個版本。這次更新的內容很多都是大家期盼的功能,例如分布式鎖API,中間件組件的外部 WASM 支持,更多的成熟Stable組件等。接下來我們一起來看看更新的內容。
1、死信Topic:有時,由于各種原因,應用程序可能無法處理消息。例如,檢索處理消息所需的數據時可能存在暫時性問題,或者應用業務邏輯無法返回錯誤。死信Topic[3]用于轉發無法傳遞到訂閱應用的消息。
2、分布式鎖 API:分布式鎖提供對應用程序中共享資源的互斥訪問。在此版本中,引入了一個新的 alpha API,使您能夠在共享資源上使用互斥鎖。這是踐行標準API的第一個,在Dapr中,處理共享資源的互斥訪問推薦采用Dapr Actor 構建塊,但是呢Dapr Actor 構建塊在社區的采用上比較低,一個例外就是.NET相關的Dapr 解決方案里面對于Actor的采用是非常高的,在其他的Java,go,python等等相關項目中目前采用Dapr Actor的還是很少。
3、對中間件組件的 WASM 支持:現在,您可以使用外部 WASM 模塊編寫 Dapr 中間件組件,并使用非 Go 語言擴展 Dapr。
4、容錯彈性策略[4]進入預覽版階段,Dapr 1.7.0 實現了容錯彈性策略第一階段目標, 1.8 版本進入預覽, Dapr 的組件版本分Alpha、Preview、Stable,我們會把Stable的組件和API 投入到生產。
5、狀態共享的命名空間支持:在應用程序之間共享狀態時,命名空間現在可用于隔離狀態。這允許具有相同命名空間的應用重用相同的狀態存儲。
6、元數據 API 返回組件功能列表:現在可以查詢元數據 API,以獲取該 sidecar 已加載的組件的功能[5],特別是 pub/sub 和 state store
7、邊車證書安裝支持:Dapr sidecar現在可以支持為Linux和Windows容器安裝證書。
8、Kubernetes 改進:Dapr Operator 現在包括一個“看門狗”功能[6],以確保 Dapr sidecar 存在于 Pod 中,這在應用程序或集群故障期間尤其重要,以提供更高水平的彈性。部署 Dapr 時,無論是在 Kubernetes 上還是在 Docker 自托管中,提取的默認容器映像都基于distroless[7],現在,您可以使由Microsoft維護的免費開源Linux發行版和容器基礎映像Mariner[8](正式名稱為CBL-Mariner)的Image。
9、組件改進,在之前的 Dapr 版本中具有穩定候選版本的以下組件已升級為穩定版本
Azure Table Storage State Store (stable candidate)
Azure Event Hubs Binding (stable candidate)
Azure Storage Queues Binding (stable candidate)
Postgresql State Store (stable candidate)
Azure Event Hubs Pubsub (stable candidate)
Dapr現在有超過100多個組件(總共105個)。此版本中添加的新組件,其中2個是華為云的組件,一個是阿里的 Dubbo Binding:
1.6 版本添加的 RouterChecker HTTP Request Routing ,已經有文檔了。
Commerce Tools Binding
Apache Dubbo Binding
Huawei OBS Binding
Huawei CSMS Secret Store
In-memory State Store?used for development
RocketMQ PubSub
Wasm Basic HTTP Middleware
Redis Distributed Lock
10、開發工具SDK 改進:
Python
支持配置 API?Unsubscribe events
支持?per-actor-type configuration
支持Actor 計時器和提醒中的TTL和時間/間隔格式
Java
添加 pubsub routing
.NET
支持配置API的?Unsubscribe events?
支持?per-actor-type configuration
支持?distributed lock API
JavaScript
JavaScript SDK現在在@dapr/dapr上可用。較舊的包 dapr-client 正處于棄用的路上
支持?Actor reminder/timer TTL support
支持?Configuration API
支持?gRPC proxy
支持?configuring the SDK logger
11、CLI 改進:
添加了
注釋
?CLI 命令,用于將 Dapr 注釋添加到已部署的 Kubernetes 配置中。dapr init
在 k8s 模式下,現在可以使用 GHCR 和私有注冊表來拉取映像給 Dapr version 加上了文檔
如果您不熟悉 Dapr,請訪問入門頁面并熟悉 Dapr。文檔已更新,包含此版本的所有新功能和更改。通過概念和開發應用程序文檔開始使用此版本中引入的新功能。要將 Dapr 升級到 1.8.0 版,請跳至本節。
相關鏈接:
[1] Consul 用作名稱解析組件時,相同的 appid 無法實現負載平衡:https://github.com/dapr/components-contrib/issues/1199
[2]Dapr 1.8 版本:https://blog.dapr.io/posts/2022/07/08/dapr-v1.8-is-now-available/
[3]死信Topic:https://v1-8.docs.dapr.io/developing-applications/building-blocks/pubsub/pubsub-deadletter
[4]容錯彈性策略:https://v1-7.docs.dapr.io/operations/resiliency/
[5]組件的功能:https://v1-8.docs.dapr.io/reference/api/metadata_api/#components
[6]Dapr Operator 現在包括一個“看門狗”功能:https://github.com/dapr/dapr/blob/master/charts/dapr/README.md#dapr-operator-options
[7]distroless鏡像:https://github.com/GoogleContainerTools/distroless
[8]CBL-Mariner:https://github.com/microsoft/CBL-Mariner/