写点什么

手把手教你学 Dapr - 2. 必须知道的概念

  • 2021 年 11 月 16 日
  • 本文字数:2392 字

    阅读完需:约 8 分钟

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 会有些许不同

原因如下:

  1. 由 BuildingBlocks 定义标准、串业务流程

  2. 让 Contrib 变成我们的最佳实践,并允许开发重新定义 BuildingBlocks 的具体实现,在保证功能完整的前提下提供更符合业务场景的功能又有参考代码

  3. 聚焦核心代码稳定性,提供单元测试覆盖率保障,共享大众智慧


组件与构建块并不是一一对应的,组件可以被不同的构建块复用,比如 Actor 构建块内的状态管理也是用的状态存储组件


  • 状态存储

  • 服务发现

  • 中间件

  • 发布订阅代理

  • 绑定

  • 密钥存储

Configuration 配置

官方解释:变更 Dapr Sidecar 或全局 Dapr 系统服务的行为


配置定义和部署形式为 YAML 文件


在官方文档的 Component sepcs 可以看到每个组件提供了多少种实现,每个实现特性支持情况

除此之外不同组件的配置文件格式也是应有尽有


官方文档对于组件配置的讲解非常详细,这里举个例子,Redis 状态管理的配置文件格式


你需要变更的部分已经用<*>和 # * 做了标记


参考自:https://docs.dapr.io/reference/components-reference/supported-state-stores/setup-redis/


apiVersion: dapr.io/v1alpha1kind: Componentmetadata:  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 与应用之间不是



其实 Dapr 在安全方面做的工作很多,这里就不继续一一列举了

我们正在行动,新的框架、新的生态

我们的目标是自由的易用的可塑性强的功能丰富的健壮的


所以我们借鉴 Building blocks 的设计理念,正在做一个新的框架MASA Framework,它有哪些特点呢?


  • 原生支持 Dapr,且允许将 Dapr 替换成传统通信方式

  • 架构不限,单体应用、SOA、微服务都支持

  • 支持.Net 原生框架,降低学习负担,除特定领域必须引入的概念,坚持不造新轮子

  • 丰富的生态支持,除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品

  • 核心代码库的单元测试覆盖率 90%+

  • 开源、免费、社区驱动

  • 还有什么?我们在等你,一起来讨论


经过几个月的生产项目实践,已完成 POC,目前正在把之前的积累重构到新的开源项目中


目前源码已开始同步到 Github(文档站点在规划中,会慢慢完善起来):


MASA.BuildingBlocks


MASA.Contrib


MASA.Utils


MASA.EShop


BlazorComponent


MASA.Blazor


QQ 群:7424099


微信群:加技术运营微信(MasaStackTechOps),备注来意,邀请进群



转载自:(鬼谷子)

发布于: 5 小时前阅读数: 10
用户头像

还未添加个人签名 2021.10.26 加入

还未添加个人简介

评论

发布
暂无评论
手把手教你学Dapr - 2. 必须知道的概念