0%

Dapr 原理与设计解析

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 包含如下功能

  1. api server
    负责提供给 sidecar对 HttpEndPoints Component组件的 Watch和 Updated
  2. Service
    给 Development StatefulSet Argo.Rollout 创建 Service 目的是为了让 sidecar 之间通过 k8s 的 Service功能达到流量互通,
    其实从这一点也可以说明 Dapr 和 Istio 的不同,这个时候你可以选择采用流量代理等方式将service之间的流量代理,比如 Istio、CiliumMesh等
  3. WatchDog
    监控需要部署 dapr sidecar 的pod是否都部署了 sidecar 如果没有则kill掉pod触发重启和inject操作