• 周五. 5 月 3rd, 2024

黑石智造

大规模个性化定制工业互联网SAAS平台

企业级微服务架构框架Dapr

qduck

5 月 1, 2020

前言
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