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/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与应用之间不是

其实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),备注来意,邀请进群

手把手教你学Dapr - 2. 必须知道的概念的更多相关文章

  1. 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

    上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...

  2. 手把手教你学Dapr - 8. 绑定

    目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...

  3. 手把手教你学Dapr - 9. 可观测性

    目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...

  4. 手把手教你学Dapr - 4. 服务调用

    上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...

  5. 手把手教你学Dapr - 5. 状态管理

    上一篇:手把手教你学Dapr - 4. 服务调用 介绍 使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中. 您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来 ...

  6. 手把手教你学Dapr - 6. 发布订阅

    上一篇:手把手教你学Dapr - 5. 状态管理 介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消 ...

  7. 手把手教你学Dapr - 7. Actors

    上一篇:手把手教你学Dapr - 6. 发布订阅 介绍 Actor模式将Actor描述为最低级别的"计算单元".换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收 ...

  8. 手把手教你学Dapr - 1. .Net开发者的大时代

    Dapr全称 Distributed Application Runtime,分布式应用运行时 Dapr的口号 简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单.可移植 Dapr的目标 最佳实践的 ...

  9. 30分钟手把手教你学webpack实战

    30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...

随机推荐

  1. ubuntu安装glusterFS

    以2台服务器为例: node1: 172.18.1.10 node2: 172.18.1.20 1) 修改主机名,修改hosts文件添加IP地址映射 hostname node1/node2vim / ...

  2. 【HMS Core 6.0全球上线】Toolkit,您的智能辅助编程好帮手

    HMS Core 6.0已于7月15日全球上线.本次版本中,华为HMS Toolkit向广大开发者推出了智能辅助编程助手SmartCoder,帮助开发者轻松高效地集成HMS Core,开发新功能,创建 ...

  3. Vue状态管理Vuex简单使用

    状态管理保存在store\index.js中,简单说明如下 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export def ...

  4. JS006. 详解自执行函数原理与数据类型的快速转换 (声明语句、表达式、运算符剖析)

    今天的主角: Operator Description 一元正值符 " + "(MDN) 一元运算符, 如果操作数在之前不是number,试图将其转换为number. 圆括号运算符 ...

  5. 获取input对应的的选项

    需求是把所有题目中的选项ABCDEF等对应保存到后台, 这个问卷中有多选项和单选项 var data = {}; $(".u-box .u-item").each(function ...

  6. 成本降低40%、资源利用率提高20%的 AI 应用产品云原生容器化之路

    作者 郭云龙,腾讯云高级工程师,目前就职于 CSIG 云产品三部-AI 应用产品中心,现负责中心后台业务框架开发. 导语 为了满足 AI 能力在公有云 SaaS 场景下,服务和模型需要快速迭代交付的需 ...

  7. UML类图及其JAVA的代码实现

    推荐 : https://my.oschina.net/u/3635618/blog/3165129 http://www.uml.org.cn/oobject/201104212.asp

  8. Shell系列(39) - dirname

    dirname作用 dirname实际工作中常常是跟$0一起使用 用于获取当前运行脚本的绝对路径 这个命令要放在shell脚本中使用,在命令行使用意义不大 [yutao@master01 ~]$ di ...

  9. 『Python』面向对象(一)

    类和对象 类(class)是用来描述具有相同属性(attribute)和方法(method)的对象的集合,对象(object)是类(class)的具体实例.比如学生都有名字和分数,他们有着共同的属性. ...

  10. 深入浅出WPF-07.Property(属性)

    依赖属性 1)字段与属性:字段被封装在实例中,要么能够被外界访问(非Private),要么不能够被外界访问(Private).但是我们直接把数据暴露给外界的做法不安全,容易把错误的数据写入字段.于是我 ...