Dapr 基本概念
Sidecar
Dapr API 提供 Http 和 gRPC两种通讯方式。
运行方式则可以是容器也可以是进程,Windows开发推荐使用Self Hosted)。
这样的好处是与运行环境无关,且独立运行不需要应用包含Dapr运行时的代码。只需要通过SDK集成即可,这使得Dapr与应用的逻辑分离。
Building blocks 构建块
官方解释:可通过标准HTTP或gRPC api访问的模块化最佳实践
通俗一点来说,就是API
目前支持的构建块如下,但1.5很快会出一个新的Configuration API(从这个新的API又印证了构建块的本质),由阿里-敖小剑牵头整理的
Github Issue: https://github.com/dapr/dapr/issues/2988
这个提案很长,很曲折。仔细看会发现中外开发大环境下的一些思想碰撞。微软相对保守,阿里相对激进但也更务实。最终长达几个月的激烈讨论下定版。
期间本人也有幸与阿里-敖小剑和阿里-仪式(Layotto的研发同学,Layotto兼容Dapr协议,是蚂蚁在做)开过语音会议一起聊过对于Configuration API的一些设计问题。
- 服务调用
- 状态管理
- 发布订阅
- 绑定
- Actor(这个不建议翻译回中文)
- 可观测性
- 安全
Components 组件
官方解释:被用于构建块和应用程序的模块化功能
Dapr 使用模块化设计,将功能作为组件来提供。 每个组件都有接口定义。 所有组件都是可插拔的,因此您可以将组件换为另一个具有相同接口的组件。
结合构建块来看,组件有接口定义。而构建块则通过接口将组件的功能串联起来
基于对Dapr设计的理解,我们的MASA Framework也定义出了 BuildingBlocks 和 Contrib,与dapr会有些许不同
原因如下:
- 由BuildingBlocks定义标准、串业务流程
- 让Contrib变成我们的最佳实践,并允许开发重新定义BuildingBlocks的具体实现,在保证功能完整的前提下提供更符合业务场景的功能又有参考代码
- 聚焦核心代码稳定性,提供单元测试覆盖率保障,共享大众智慧
组件与构建块并不是一一对应的,组件可以被不同的构建块复用,比如Actor构建块内的状态管理也是用的状态存储组件
- 状态存储
- 服务发现
- 中间件
- 发布订阅代理
- 绑定
- 密钥存储
Configuration 配置
官方解释:变更Dapr Sidecar或全局Dapr系统服务的行为
配置定义和部署形式为YAML文件
在官方文档的Component sepcs可以看到每个组件提供了多少种实现,每个实现特性支持情况
除此之外不同组件的配置文件格式也是应有尽有
官方文档对于组件配置的讲解非常详细,这里举个例子,Redis状态管理的配置文件格式
你需要变更的部分已经用<*>和 # * 做了标记
参考自:https://docs.dapr.io/reference/components-reference/supported-state-stores/setup-redis/
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: <NAME> namespace: <NAMESPACE> spec: type: state.redis version: v1 metadata: - name: redisHost value: <HOST> - name: redisPassword value: <PASSWORD> - name: enableTLS value: <bool> # Optional. Allowed: true, false. - name: failover value: <bool> # Optional. Allowed: true, false. - name: sentinelMasterName value: <string> # Optional - name: maxRetries value: # Optional - name: maxRetryBackoff value: # Optional - name: ttlInSeconds value: <int> # Optional
Observability 可观测性
官方解释:通过跟踪、指标、日志和健康状况监视应用
在构建应用程序时,了解系统如何运行是运维的一个重要部分——这包括有能力观测应用程序的内部调用,评估其性能并在发生问题时立即意识到问题
这对任何系统都是一种挑战,而对于由多个微服务组成的分布式系统来说更是如此
分布式跟踪
配置发送跟踪数据,轻松集成多个监控后端
OpenTelemetry collector
配置OpenTelemetry收集器,使用支持OpenTelemetry的监控后端
Dapr Sidecar和系统服务的可观测性
配置收集Dapr Sidecar和相关服务的指标和日志
Security 安全性
Dapr 用于加密传输中数据的安全机制之一是 相互认证(mutual authentication)TLS 或简写为 mTLS
- 双向身份验证
- 通过加密通道通信
Sidecar与应用通信
Dapr Sidecar通过localhost与应用通信,并提供Token API级别身份验证
Sidecar之间的通信
Dapr默认开启mTLS(可以手动关闭,有一定的性能损耗,大多数情况下可以忽略不计)。Dapr利用Sentry的系统服务充当证书颁发机构,包括证书轮换。
证书默认有效期为24小时,时钟偏差为15分钟。
Self Hosted mTLS
K8s mTLS
Sidecar与系统服务之间的通信
Dapr Sidecar和Dapr系统服务之间是强制性mTLS的,包括Sentry(证书颁发机构)、Placement(Actor安置服务)和K8s Operator
K8s中系统服务的mTLS
- Dapr Sidecar与Dapr系统服务(Actor Placement, Sidecar Injector, Sentry, Operator)之间是通过mTLS
- Kubelet与Dapr Sidecar之间也是通过mTLS
- Dapr Sidecar或者Dapr系统服务与Components之间也是通过mTLS
- Dapr Sidecar与应用之间不是
安装Docker因为Dapr CLI默认会在Docker内启动 redis、zipkin、placement。当然这些也不是必须要安装的,只是推荐安装可以体验Dapr的完整能力,方便后续章节的学习。下载并安 ...