手把手教你学Dapr - 2. 必须知道的概念
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: redisHostvalue: <HOST>
- name: redisPasswordvalue: <PASSWORD>
- name: enableTLSvalue: <bool> # Optional. Allowed: true, false.
- name: failovervalue: <bool> # Optional. Allowed: true, false.
- name: sentinelMasterNamevalue: <string> # Optional
- name: maxRetriesvalue: # Optional
- name: maxRetryBackoffvalue: # Optional
- name: ttlInSecondsvalue: <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. 必须知道的概念相关推荐
- 手把手教你学Dapr - 5. 状态管理
介绍 使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中. 您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来保存和读取键/值对,如下图所示.例如,通过使用 H ...
- 手把手教你学Dapr - 6. 发布订阅
介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消费者或订阅者订阅该主题并接收其消息,而不知道是什么 ...
- 手把手教你学Dapr - 4. 服务调用
介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用HttpClientFactory呢 先问几个问题: 如何发现和调用不同服务的方 ...
- 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Terminal 运行命令行工具的时候建议以管理员身份,避免踩坑 为 ...
- 手把手教你学Dapr - 1. .Net开发者的大时代
Dapr全称 Distributed Application Runtime,分布式应用运行时 Dapr的口号 简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单.可移植 Dapr的目标 最佳实践的 ...
- 手把手教你学Dapr - 7. Actors
介绍 Actor模式将Actor描述为最低级别的"计算单元".换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收消息并一次处理一个消息,没有任何并发或线程. 再换 ...
- 第11章 UART 串口通信(手把手教你学51单片机pdf部分)
手把手教你学51单片机-C语言版.pdf
- python global用法_14_手把手教你学Python之函数(下)
变量作用域:根据变量定义的位置,可将变量分为全局变量和局部变量. 全局变量:定义在函数外面的变量,可以在多个函数中进行访问,但不能执行赋值操作.如果有赋值语句,相当于创建了一个同名的局部变量: 局部变 ...
- oracle数据库更新语句_20_手把手教你学Python之操作数据库
数据库是数据的仓库,将大量数据按照一定的方式组织并存储起来,方便进行管理和维护,例如快速检索和统计等.数据库的主要特点: 以一定的方式组织.存储数据: 能为多个用户共享: 与程序彼此独立. -- 数据 ...
最新文章
- CPU工作过程——MCU
- 对于随机变量的标准差standard deviation、样本标准差sample standard deviation、标准误差standard error的解释...
- 元组tuple类型内置方法
- 嵌入式编程-C语言使用小技巧
- Docker 存储 网络
- r语言 图形一览_R语言实战(第2版):第三章 图形初阶(01)
- springboot+shiro+jwt实现token认证登录
- java基础知识点整理一
- 计算机端口详解(总结)
- UKEY开发 用户登录流程
- Mac卸载Anaconda
- 安装studio3t
- ubuntu20.04截图快捷键
- Ubuntu 18 安装截图工具 flameshot
- 探索性数据分析EDA(二)—— 缺失值处理
- 区块链学习笔记(2)难度整定,区块形成,区块体,Merkle树,Merkle Proof默克尔证明
- Echars 旭日图 鼠标浮动 显示value值
- 教你如何制作浪漫的表白网站
- 如何报名拼多多官方活动?万顿思电商
- Node.js 体验 — 当 Node.js 邂逅 Windows Azure
热门文章
- 函数学习-abs()
- C#判断某软件是否安装
- python ev3图形化编程软件下载_mPython(图形化编程软件)
- bindresult必须在哪个位置_手机视频剪辑工具哪个好?清爽视频编辑APP有人推荐吗?...
- 【Luogu3931】SAC E#1 - 一道难题 Tree
- Python自动化之语法基础
- Leetcode: Single Number
- HDOJ 1875 HDU 1875 畅通工程再续 ACM 1875 IN HDU
- 超越竞争(2) 价值创新
- 克隆ubuntu硬盘_使用Ubuntu Live CD克隆硬盘