写点什么

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

  • 2021 年 11 月 16 日
  • 本文字数:1968 字

    阅读完需:约 6 分钟

Dapr 全称

Distributed Application Runtime,分布式应用运行时

Dapr 的口号

简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单、可移植

Dapr 的目标

  1. 最佳实践的构建块

  2. 任何语言或框架

  3. 一致性,可移植,开放的 API

  4. 采纳标准

  5. 可扩展和可插拔的组件

  6. 与平台无关(本地,云计算,边缘计算等)

  7. 社区驱动,供应商(厂商)中立

Dapr 的设计思路

这里首先要先理解几个问题,然后再看 Dapr 如何解决这些问题的


以下资料都有英文原图,中文翻译为个人理解,英文好的小伙伴可以直接看原图。

微服务为什么很难

  1. 开发者要构建自己的运行时处理分布式应用问题

  2. 运行时支持的开发语言有限,且有严格控制的特性(功能)集合

  3. 运行时的可移植性有限,一般只支持特定的基础架构平台


分布式应用的需求

内容引自 Multi-Runtime Microservices Architecture https://www.infoq.com/articles/multi-runtime-microservice-architecture/


注意:二级内容不与图片对应,把功能组合成场景


  • 生命周期

  • 更快的发布周期

  • 自动化部署

  • 从错误中恢复

  • 自动化伸缩

  • 网络

  • 服务发现

  • 跟踪与遥测(可观测性)

  • 信息交换:点对点、发布/订阅,智能路由

  • 状态

  • 服务编排、工作流

  • 分布式单例(Actor)

  • 临时调度(Cron)

  • 幂等性

  • 有状态错误恢复

  • 缓存

  • 绑定

  • 转换协议

  • 支持不同的消息交换模式:轮询、事件驱动、请求/应答等

  • 转换消息格式

  • 执行自定义错误恢复过程

  • 安全机制


传统中间件和云原生对比

传统中间件以各种 SDK 的方式提供能力,而云原生平台则通过各种外围的 Runtime,目前来看比较有趣的是,大家不约而同的选择了 Sidecar。


多运行时微服务边界

  • K8s 和容器在多语言应用程序的生命周期管理方面取得了巨大的飞跃,并为未来的创新奠定了基础

  • Service Mesh 在 K8s 上得到了改进,具有先进的网络功能,并开始深入应用程序

  • Knative 通过快速伸缩来关注无服务器的工作负载,解决了服务编排和事件驱动的绑定需求

  • Dapr 以 K8s、Knative 和 Service Mesh 的思想为基础,深入研究应用程序运行时,处理有状态的工作负载、绑定和集成需求,充当现代分布式中间件

  • 主要分为 3 个部分,K8s、机甲运行时(网关、Dapr + Knative)、业务逻辑。

    Dapr 的出现可以让开发者更专注于业务逻辑,而业务逻辑则作为服务运行时。


多运行时的好处

业务逻辑和不断增加的分布式系统关注点之间的松耦合。


业务逻辑经常变化,取决于业务优先级。

而分布式原语则由软件供应商提供,作为库、容器、服务来使用。这些代码会根据供应商优先级、发布周期、安全补丁、开源治理规则等而变化。

他们互相看不到对方,也无法控制对方。


Dapr 的优势:Any language, anywhere

与语言无关,与平台无关


分布式应用运行时

官方解释


帮助开发人员构建事件驱动的、弹性的分布式应用程序。 无论是在本地、云中还是在边缘设备上,都可以帮助你解决构建微服务所带来的挑战,并保持代码与平台无关。


可以看到 Dapr 更具象化了


  1. 与应用程序通过 HTTP 和 gRPC 通信

  2. 内部有一些构建块

  3. 运行在云上


Dapr 与服务网格

  • 开发者更聚焦在代码层面,通过 SDK(图中没有标注)与 dapr 的构建块通信,面向 localhost 编程

  • 运维更关注安全性、可观测性、健壮性等问题上。而流量管控的部分,dapr(可能是暂时的)没有。


Sidecar 的世界

  1. 应用于 Sidecar 通信是通过 Dapr API(已经被封装成不同开发语言的 SDK),这个过程中通过 OpenTelemetry 支持了可观测性(即跟踪、日志、指标)

  2. 应用之间通过 Sidecar 通信,支持 mTLS,这个指服务调用(即 Service Invocation)

  3. Sidecar 之间通过 gRPC(图片中没有显示),Bindings,Pub/Sub 都可以通信

  4. 可观测性无处不在,通过 Prometheus、Zipkin、Fluentd 等,可视化 OpenTelemetry 中的部分数据


但目前据我所知没有一个可以统一接管完整 OpenTelemetry 的,如果有的话欢迎纠错。


  1. 状态管理也是由 Sidecar 代理的


对于.Net 的意义

  • .Net SDK 是微软亲儿子,让.Net 和 Java 一起在新起点站在了同一起跑线

  • 分布式应用运行时给.Net 的新架构带来了新的思路和机遇

  • 加速.Net 技术栈的更新迭代

  • 共享开源生态

我们正在行动,新的框架、新的生态

我们的目标是自由的易用的可塑性强的功能丰富的健壮的


所以我们借鉴 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),备注来意,邀请进群



转载自:(鬼谷子)

发布于: 5 小时前阅读数: 6
用户头像

还未添加个人签名 2021.10.26 加入

还未添加个人简介

评论

发布
暂无评论
手把手教你学Dapr - 1. .Net开发者的大时代