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

2023-11-05 21:32

本文主要是介绍手把手教你学Dapr - 2. 必须知道的概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Sidecar 边车

Dapr API提供Http和gRPC两种通讯方式。

运行方式则可以是容器也可以是进程(Windows开发推荐使用Self Hosted,后续会解释)。

这样的好处是与运行环境无关,且独立运行不需要应用包含Dapr运行时的代码。只需要通过SDK集成即可,这使得Dapr与应用的逻辑分离。

8dbf74ce3b0d58b49b434776ec05a5dc.png

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(这个不建议翻译回中文)

  • 可观测性

  • 安全

d2ede5b0859610b164337605f36f6b08.png

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: 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 可观测性

官方解释:通过跟踪、指标、日志和健康状况监视应用

在构建应用程序时,了解系统如何运行是运维的一个重要部分——这包括有能力观测应用程序的内部调用,评估其性能并在发生问题时立即意识到问题

这对任何系统都是一种挑战,而对于由多个微服务组成的分布式系统来说更是如此

分布式跟踪

配置发送跟踪数据,轻松集成多个监控后端

7d8430da3ccdc1dbda65c3301fb681a0.png

OpenTelemetry collector

配置OpenTelemetry收集器,使用支持OpenTelemetry的监控后端

022a7a8f484ad0d866495e16e2aa2619.png

Dapr Sidecar和系统服务的可观测性

配置收集Dapr Sidecar和相关服务的指标和日志

9a9bce5620d99ffbf1028192f0993a77.png

Security 安全性

Dapr 用于加密传输中数据的安全机制之一是 相互认证(mutual authentication)TLS 或简写为 mTLS

  • 双向身份验证

  • 通过加密通道通信

Sidecar与应用通信

Dapr Sidecar通过localhost与应用通信,并提供Token API级别身份验证

Sidecar之间的通信

Dapr默认开启mTLS(可以手动关闭,有一定的性能损耗,大多数情况下可以忽略不计)。Dapr利用Sentry的系统服务充当证书颁发机构,包括证书轮换。

证书默认有效期为24小时,时钟偏差为15分钟。

Self Hosted mTLS

24000381c936bce0c6d80fad362963af.png

K8s mTLS

574ce5c4a69f29c0617de253717b6a97.png

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

9a39ec7679de58730858530d53f61898.png

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

0f153642cb61e8f9c119319e1fac8f6e.png

这篇关于手把手教你学Dapr - 2. 必须知道的概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352650

相关文章

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

【MRI基础】TR 和 TE 时间概念

重复时间 (TR) 磁共振成像 (MRI) 中的 TR(重复时间,repetition time)是施加于同一切片的连续脉冲序列之间的时间间隔。具体而言,TR 是施加一个 RF(射频)脉冲与施加下一个 RF 脉冲之间的持续时间。TR 以毫秒 (ms) 为单位,主要控制后续脉冲之前的纵向弛豫程度(T1 弛豫),使其成为显著影响 MRI 中的图像对比度和信号特性的重要参数。 回声时间 (TE)

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4

【机器学习-一-基础概念篇】

机器学习 定义分类算法 应用 定义 机器学习最早是被Arthur Samuel 提出的一个概念,指计算机无需明确编程即可学习的研究领域。1950年他发明的跳棋程序,这个人机对弈游戏让他的声名鹊起,机器学习这个概念才进入大众的是视线。 在这个跳棋程序里,他编程了一种算法,这个程序与Arthur下了数万次跳棋,计算机逐渐学会了下在哪里有更大的可能会赢得比赛,哪里会输,通过这种方法,最

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。

AI辅助编程里的 Atom Group 的概念和使用

背景 在我们实际的开发当中,一个需求往往会涉及到多个文件修改,而需求也往往有相似性。 举个例子,我经常需要在 auto-coder中需要添加命令行参数,通常是这样的: /coding 添加一个新的命令行参数 --chat_model 默认值为空 实际上这个需求涉及到以下文件列表: /Users/allwefantasy/projects/auto-coder/src/autocoder/auto

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

【生物信息学算法】图算法1:概念和算法

文章目录 1. 图的定义、分类、表达方式图的定义图的分类表达方式Python实现 2.相邻节点和度概念定义python实现 3.路径、距离和搜索路径和距离搜索环 4.图论中的欧拉定理 1. 图的定义、分类、表达方式 图的定义 图G可以由两个集合来定义,即G=(V,E)。其中,V是对象的集合,称为图的顶点或节点; E是V中(u,v)顶点对的集合,称为边或弧,表示u和v之间的关系

[情商-13]:语言的艺术:何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相!

目录 前言: 一、说话的真实程度分级 二、说谎动机分级:善意谎言、中性谎言、恶意谎言 三、小心:所谓真相:只说对自己有利的真相 四、小心:所谓真相:就是别人想让你知道的真相 五、小心:所谓善解人意:就是别人只说你想要听到的话 前言: 何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相! 人与人交流话语中,处处充满了不真实,完全真实的只是其中一小部分,这