Dapr為微軟開源的一個用於構建分布式應用的框架,Dapr為分布式應用運行時(Distributed Application Runtime)的英文單詞縮寫;Dapr提供了分布式應用所依賴的執行環境,分布式運行時包括了:服務通訊、數據持久化、資源綁定、pub-sub、Actors、密鑰等,通過使用Dapr可以使用任何語言輕松構建與平台無關的微服務應用;
Dapr通過HTTP/gRPC API與語言無關的暴露了分布式的應用調用,官方提供了主流語言Go、Java、Python、.Net等的SDK使得開發者可以方便Dapr的使用;
Dapr使用了sidecar模式公開其Api,應用程序無需包含任何的Dapr運行時代碼,使得應用邏輯與Dapr運行時分離;
核心結構
Dapr核心包括三部分:API、Building Blocks、Components
Building Blocks(構建塊)
目前Dapr中提供了與分布式應用開發息息相關的下列7種構建塊:
service-to-service invocation 服務間調用
State management 狀態管理
Publish and subscribe 發布訂閱
Resource bindings 資源綁定
Actors Actors實現
Observability 可觀測性
Secrets 密鑰
Components(組件)
Dapr使用模塊化設計將功能作為組件提供,定義組件接口,所有組件都可插拔;構建塊也可使用任何組件組合;
Dapr也提供了多種組件:狀態組件、服務發現組件、中間件組件、Pub/Sub代理組件、綁定組件、密鑰存儲組件;
Dapr API
Dapr使用API暴露了分布式能力,將分布式原語映射到API上使之應用可以輕松的的使用成為分布式能力,開發者無需在去引用各種組件;Dapr提供了HTTP1.1/REST 和 HTTP2/gRPC兩種API;
應用只需發起API調用,無論是服務調用、數據存儲或是消息發布,存儲后端是redis還是Mysql應用完全不用關心,都是相同的API;
三者的關系:
API:統一標准暴露組件塊
Building Blocks(組件塊):分布式能力的抽象
Components(組件):分布式能力的具體實現
Dapr部署模式
Dapr支持兩種部署模式:宿主機模式、Kubernetes容器化部署模式;
Dapr使用sidecar模式提供Building blocks的能力,當部署模式為宿主機模式時每個應用服務都有一個Dapr運行時進程(sidecar進程)為一個獨立的進程,模式為容器化模式時sidecar container將被注入到業務Pod中;
宿主機模式
部署默認情況下,也需要使用Docker。
將在Docker中啟動三個容器:placement、zipkin、redis容器;
Placement容器:用於actor 分布方案和關鍵范圍設置。
Redis容器:配置為作為狀態管理和發布/訂閱的默認組件。
Zipkin容器:用於診斷和跟蹤的Zipkin容器。
使用Dapr slim模式將不依賴於Docker,將啟動兩個獨立進程:Daprd、Placement;
Dapr安裝
1、下載Dapr cli
https://github.com/dapr/cli/releases
2、初始化Dapr
dapr init
3、驗證Dapr
Dapr Hello World
啟動 Dapr sidecar,它將在端口 3500 上監聽名為 myapp 的空白應用程序:
dapr run --app-id myapp --dapr-http-port 3500
提交狀態數據:
curl -X POST -H "Content-Type: application/json" -d '[{ "key": "dapr", "value": "Hello World"}]'
http://localhost:3500/v1.0/state/statestore
獲取狀態:
curl http://localhost:3500/v1.0/state/statestore/dapr
Hello World
查看redis中所存儲的數據:
docker exec -it dapr_redis redis-cli
hgetall "myapp||dapr"
參考資料
Dapr | 雲原生的抽象與實現(https://mp.weixin.qq.com/s/4HHMVxa3l_gCsltoX4euyg)
dapr docs(https://docs.dapr.io/)