zoukankan      html  css  js  c++  java
  • 手把手教你学Dapr

    目录

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

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

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

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

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

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

    手把手教你学Dapr - 7. Actors

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

    Sidecar 边车

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

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

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

    image-20211026110841963.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(这个不建议翻译回中文)
    • 可观测性
    • 安全

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

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

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

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

    分布式跟踪

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

    image-20211026130356016.png

    OpenTelemetry collector

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

    image-20211026130809148.png

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

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

    image-20211026131138519.png

    Security 安全性

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

    • 双向身份验证
    • 通过加密通道通信

    Sidecar与应用通信

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

    Sidecar之间的通信

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

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

    Self Hosted mTLS

    image-20211026132824439.png

    K8s mTLS

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

    image-20211026133259035.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),备注来意,邀请进群

    masa_stack_tech_ops.png

    自动签名

    欢迎加入技术交流群:

    MASA Stack

    招.Net中/高级开发工程师:坐标杭州下沙,联系方式进群找群主,薪资范围16-30K,有住房补贴

  • 相关阅读:
    VS2012快捷操作功能
    SQL Union和SQL Union All用法
    安装sql server 2008 R2出现 创建usersettings/microsoft.sqlserver.configuration.landingpage.properties.setter
    编码的来历和使用 utf-8 和GB2312比较
    Java内存机制,内存地址
    spring
    使用CMD建立指定格式的文件
    在命令提示符窗口下(cmd)使用指令操作并编译java代码,运行java编译代码
    匿名内部类的使用总结
    网页中插入FLASH(swf文件)的html代码
  • 原文地址:https://www.cnblogs.com/doddgu/p/dapr-learning-2.html
Copyright © 2011-2022 走看看