微服务架构框架Dapr
前言
Dapr是微软开源的一款微服务应用框架,笔者将会把这款开源微服务应用框架写成一个系列专题,从Dapr的基本概念到环境的部署再到实操落地,有兴趣的朋友欢迎关注收藏。
一、Dapr是什么?
官方解释:Dapr (Distributed Application Runtime)是一个可移植的、事件驱动的运行时。Dapr为开发人员提供一个分布式的程序的开发环境,提供分布式的程序所依赖的功能模块库,提供了分布式程序的运行环境,或者说为分布式的程序提供了一套完整运行方案。
- 可移植:指与软件从某一环境转移到另一环境下的难易程度。
- 事件驱动:调用与被调用方解耦
简单来说就是Dapr为任何语言编写的应用程序提供了与环境解耦的功能
二、Dapr解决了什么?
目前微服务架构存在的情况:
- 服务拓扑复杂,调用方式不尽相同如HTTP,MQ,RPC等等,这就需要开发人员编写不同的Proxy实现
- 保存状态数据使用不同组件存储如Redis,Mysql等等,这就需要开发人员编写不同的存储类访问类
- 保存密钥信息也可能用Azure Keyvault或者K8S Secrets等不同密钥存储,这就需要开发人员集成不同SDK
- 服务监测可能用不同中间件,这也需要开发人员进行侵入式编码
- …
以上的种种情况使得开发人员无法专注于业务,需要花很多时间了解很多的中间件,在实际情况中开发人员并无法成为各个中间件的专家,无法正确搭建、使用所有的中间件,Dapr采用了sidecar架构就很好的解决了上面存在的问题
三、Dapr提供了什么?
Dapr提供了如下七大功能模块
-
服务调用
- 提供不同服务调用方式:HTTP 和GRPC
- 可插拔服务发现组件:mDNS、K8S DNS、Cousul、DNS
- 服务重试:如服务请求失败会自动发起重试,重试次数为3。
- 调用安全性:所有调用采用mLTS加密
-
状态管理
- 提供了可插拔的存储组件如Mysql、Redis、PostgreSQL、MongoDB等等
- 并发控制:通过匹配ETag来确认数据是否被修改过
- 一致性
- 事务:存储组件必须支持事务
-
发布/订阅
- 提供了可插拔的消息队列组件如RabbitMQ、Kafka、MQTT、Redis Streams
-
绑定:用于内部服务与外部系统的交互
- 除去连接到消息传递系统 ( 如队列和消息总线 ) 并进行轮询的复杂性
- 聚焦于业务逻辑,而不是如何与系统交互的实现细节
- 使代码不受 SDK 或库的跟踪
- 处理重试和故障恢复
- 构建具有特定于环境的绑定的可移植应用程序,不需要进行代码更改
-
Actors:单线程的任务
- 生命周期 通过内部的timers reminders实现
- 分发与故障转移 通过内部的Palcement service实现
-
可观测性
- W3C标准分布式跟踪
- 健康监测
- 指标收集
- 日志收集
-
Secrets
- 可移植的密钥存储库:服务不用去集成各种SDK
总结
本文给大家介绍了Dapr的一些基本概念,从下篇文章开始,将带领大家从环境搭建开始把Dapr实操起来,欢迎各位朋友的点赞收藏与关注。