手把手教你学Dapr - 1. .Net开发者的大时代
Dapr全称
Distributed Application Runtime,分布式应用运行时
Dapr的口号
简化云原生应用开发,聚焦在应用的核心逻辑,让代码简单、可移植
Dapr的目标
最佳实践的构建块
任何语言或框架
一致性,可移植,开放的API
采纳标准
可扩展和可插拔的组件
与平台无关(本地,云计算,边缘计算等)
社区驱动,供应商(厂商)中立

Dapr的设计思路
这里首先要先理解几个问题,然后再看Dapr如何解决这些问题的
以下资料都有英文原图,中文翻译为个人理解,英文好的小伙伴可以直接看原图。
微服务为什么很难
开发者要构建自己的运行时处理分布式应用问题
运行时支持的开发语言有限,且有严格控制的特性(功能)集合
运行时的可移植性有限,一般只支持特定的基础架构平台

分布式应用的需求
内容引自 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更具象化了
与应用程序通过HTTP和gRPC通信
内部有一些构建块
运行在云上

Dapr与服务网格
开发者更聚焦在代码层面,通过SDK(图中没有标注)与dapr的构建块通信,面向localhost编程
运维更关注安全性、可观测性、健壮性等问题上。而流量管控的部分,dapr(可能是暂时的)没有。

Sidecar的世界
应用于Sidecar通信是通过Dapr API(已经被封装成不同开发语言的SDK),这个过程中通过OpenTelemetry支持了可观测性(即跟踪、日志、指标)
应用之间通过Sidecar通信,支持mTLS,这个指服务调用(即Service Invocation)
Sidecar 之间通过gRPC(图片中没有显示),Bindings,Pub/Sub都可以通信
可观测性无处不在,通过Prometheus、Zipkin、Fluentd等,可视化OpenTelemetry中的部分数据
但目前据我所知没有一个可以统一接管完整OpenTelemetry的,如果有的话欢迎纠错。
状态管理也是由Sidecar代理的

对于.Net的意义
.Net SDK是微软亲儿子,让.Net有幸和Java一起站在了同一起跑线
分布式应用运行时给.Net的新架构带来了新的思路和机遇
加速.Net技术栈的更新迭代
共享开源生态
我们正在行动,新的框架、新的生态
我们的目标是自由的、易用的、可塑性强的、功能丰富的、健壮的。
所以我们借鉴Building blocks的设计理念,正在做一个新的框架MASA Framework,它有哪些特点呢?
原生支持Dapr,且允许将Dapr替换成传统通信方式
架构不限,单体应用、SOA、微服务都支持
支持.Net原生框架,降低学习负担,除特定领域必须引入的概念,坚持不造新轮子
丰富的生态支持,除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品
核心代码库的单元测试覆盖率90%+
开源、免费、社区驱动
还有什么?我们在等你,一起来讨论
经过几个月的生产项目实践,已完成POC,目前正在把之前的积累重构到新的开源项目中
目前源码已开始同步到Github(文档站点在规划中,会慢慢完善起来):
QQ群:7424099
微信群:加技术运营微信(MasaStackTechOps),备注来意,邀请进群
手把手教你学Dapr - 1. .Net开发者的大时代的更多相关文章
- 手把手教你学Dapr - 8. 绑定
目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...
- 手把手教你学Dapr - 9. 可观测性
目录 手把手教你学Dapr - 1. .Net开发者的大时代 手把手教你学Dapr - 2. 必须知道的概念 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 手把手教你学Dapr ...
- 手把手教你学Dapr - 4. 服务调用
上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...
- 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...
- 手把手教你学Dapr - 5. 状态管理
上一篇:手把手教你学Dapr - 4. 服务调用 介绍 使用状态管理,您的应用程序可以将数据作为键/值对存储在支持的状态存储中. 您的应用程序可以使用 Dapr 的状态管理 API 使用状态存储组件来 ...
- 手把手教你学Dapr - 6. 发布订阅
上一篇:手把手教你学Dapr - 5. 状态管理 介绍 发布/订阅模式允许微服务使用消息相互通信.生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息.这涉及将它们写入输入通道.同样,消 ...
- 手把手教你学Dapr - 7. Actors
上一篇:手把手教你学Dapr - 6. 发布订阅 介绍 Actor模式将Actor描述为最低级别的"计算单元".换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收 ...
- 手把手教你学Dapr - 2. 必须知道的概念
Sidecar 边车 Dapr API提供Http和gRPC两种通讯方式. 运行方式则可以是容器也可以是进程(Windows开发推荐使用Self Hosted,后续会解释). 这样的好处是与运行环境无 ...
- 30分钟手把手教你学webpack实战
30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...
随机推荐
- 微信小程序基础知识笔记
微信小程序笔记 文件构成 全局文件 app.json 小程序全局配置文件,必要,自动生成 app.js 小程序入口JS文件,一般只需申明全局变量.处理生命周期以及版本升级即可,必要 app.wxss ...
- docker快速创建轻量级的可移植的容器(一)
系列其他内容 docker快速创建轻量级的可移植的容器✓ docker&flask快速构建服务接口 docker&uwsgi高性能WSGI服务器生产部署必备 docker&gu ...
- Sentry Web 性能监控 - Metrics
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 如何实现自定义sk_buff数据包并提交协议栈
目录 一.自定义数据包的封装流程 1. 分配skb 2.初始定位(skb_reserve) 3.拷贝数据(skb_push / skb_pull / skb_put / ) 4.设置传输层头部 5.设 ...
- GC-优化-案例
优化案例 Service S 优化 现在看一下执行jstat -gcutil的结果 S0 S1 E O P YGC YGCT FGC FGCT GCT 12.16 0.00 5.18 63.78 20 ...
- DS博客作业05--查找
这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...
- Jmeter系列(15)- 常用断言之大小断言
大小断言 大小断言验证响应数据size大小,它的作用范围有主Sample与子Sample:适用场景,判断附件下载的大小,比如项目安装包 完整响应:全部响应信息 响应头:响应头信息,比如http协议的头 ...
- Linux系列(2) - 命令提示符
命令提示符 起始符 [root@localhost ~]# root:当前登录用户 localhost:主机名 ~:当前所在目录(家目录);管理员为 /root ,user用户为 /home/user ...
- Java面向对象系列(14)- 接口的定义与实现
接口 普通类:只有具体实现 抽象类:具体实现和规范(抽象方法)都有 接口:只有规范!约束和实现分离 接口就是规范,定义的是一组规则,体现了现实世界中"如果你是-则必须能-"的思想. ...
- ☕【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了!
JPA的介绍分析 Java持久化API (JPA) 显著简化了Java Bean的持久性并提供了一个对象关系映射方法,该方法使您可以采用声明方式定义如何通过一种标准的可移植方式,将Java 对象映射到 ...