Dapr 简介和背景
简单来说 Dapr 是一个 Application 应用运行时。
应用运行时简单来说就是以 sidecar 的模式将应用与外部交互进行代理。
首先应用与外界交互包括外部服务调用,MQ的pub/sub,database的get/set,configuration的get/set等,
有过一定开发经验的开发者都知道当我们对外部进行上述交互时都要有相应的sdk和代码而这些代码都是重复的且与本应用其实无关的
那么这个时候可以让 sidecar 来帮我们进行这些交互操作
原理与设计解析
Runtime 核心机制
API 接口
DaprServer 包含一系列操作接口,应用端SDK会跟这个API server进行交互
component 组件
State
KV 数据库操作
Pub/Sub
MQ 发布和订阅
Binding
特殊数据的output绑定
Secret
获取加密数据
Actor
Actor机制功能
Configuration
配置 发布和订阅
Lock
分布式锁
Encrypt/Decrypt
加解密数据
Workflow
对接workflow引擎 对流程进行开始停止等操作
非k8s环境
如果非k8s环境 这个时候就可以把 Dapr 看成是独立的外部代理进程
K8s环境
Inject
这个是根据 k8s 的Admission Webhook功能对pod进行 sidecar注入
Operator
Operator 包含如下功能
- api server
负责提供给 sidecar对 HttpEndPoints Component组件的 Watch和 Updated - Service
给 Development StatefulSet Argo.Rollout 创建 Service 目的是为了让 sidecar 之间通过 k8s 的 Service功能达到流量互通,
其实从这一点也可以说明 Dapr 和 Istio 的不同,这个时候你可以选择采用流量代理等方式将service之间的流量代理,比如 Istio、CiliumMesh等 - WatchDog
监控需要部署 dapr sidecar 的pod是否都部署了 sidecar 如果没有则kill掉pod触发重启和inject操作