手把手教你学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

相关文章

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

一文带你迅速搞懂路由器/交换机/光猫三者概念区别

《一文带你迅速搞懂路由器/交换机/光猫三者概念区别》讨论网络设备时,常提及路由器、交换机及光猫等词汇,日常生活、工作中,这些设备至关重要,居家上网、企业内部沟通乃至互联网冲浪皆无法脱离其影响力,本文将... 当谈论网络设备时,我们常常会听到路由器、交换机和光猫这几个名词。它们是构建现代网络基础设施的关键组成

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

【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的车辆信息显示与控