分布式应用运行时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/)