分布式應用運行時Dapr


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/)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM