题记:Dapr是什么,Dapr包含什么,为什么要用Dapr。

Dapr是什么

Dapr(Distributed Application Runtime),是微软Azure内部创新孵化团队的一个开源项目,皆在解决微服务应用开发过程的一些共性问题。以官方文档的说法,Dapr是一个可移植、事件驱动的运行时,让企业开发者更容易利用各种语言和框架构建柔性、无状态和有状态的微服务应用,并运行在云端和边缘。

Dapr的核心由Go语言写成,开发团队一开始有计划使用.NET Core/C#来写,但是考虑到社区的接受程度,遂最终选定Go作为开发语言。当然,还是可以使用任何语言和框架来编写Dapr的扩展功能。由于Dapr要解决的问题确实是大家面临的一些痛点,并且Dapr的设计也独树一帜,所以一经开源,就成为GitHub上Star增长最快的开源项目之一,甚至达到5K Star的速率超过了Kubernetes。

Dapr包含什么

Dapr做的事情很简单,就是利用Sidecar的模式,把代码中的一些横切关注点需求(Cross-cutting)分离和抽象出来,从而达到运行环境的独立对外部依赖(包括服务之间)的独立

这种独立的途径就是使用开放协议(HTTP和gRPC)来代替依赖特定协议。如下图所示:

从上图我们可以看到,使用Dapr开发的微服务应用理论上可以部署到任意的云提供商、边缘设备、虚拟机、Service Fabric集群、Kubernetes集群里面。

并且在如下方面(称之为Building Block)进行外部依赖的抽象:

  • 服务之间的调用:不用操心服务注册和发现的问题,也不用操心重试等问题

  • 状态的存储:通过键值对来存储应用逻辑的状态,让无状态服务变为有状态服务

  • 事件的发布订阅:微服务之间除了直接的远程调用外,更多是依赖事件驱动的模式去产生关系,这里对事件发布订阅进行了统一

  • 外部资源的绑定:当需要把事件发布到微服务应用外部,或者从外部接收事件的时候,就可以使用资源绑定

  • Actors模式:通过Actors的模式,让微服务可以以单线程的代码实现大规模并行处理。实际上,Actors这部分功能的开发人员就是来自于Service Fabric团队,两者的API也基本保持一致。通过这样的模式,也把Actors这种模式引入到了其他运行平台

  • 可观测性:Dapr会帮助微服务应用发出基于W3C Trace Context标准和Open Telemetry规范的度量、日志、跟踪信息,方便对应用进行调试、诊断和监控

  • 密钥管理:为微服务提供密钥管理的能力,从而从依赖的外部密钥管理服务中独立出来。

下图很好的展示了以上独立抽象的能力是如何通过Sidecar模式实现的:

(Sidecar进程模式)

(Sidecar容器模式)

虽然Dapr暴露的所有能力都是基于开放协议HTTP和gRPC的,但是为了方便大家快速开发,目前还是提供了如下语言平台的SDK:

  • C++ SDK

  • Go SDK

  • Java SDK,可以和Spring Boot集成

  • Javascript SDK,可以和Express集成

  • Python SDK,可以和Flask集成

  • .NET SDK,可以和ASP.NET Core集成

同时,Dapr还可以和微软开源的FaaS开发框架Azure Functions进行集成,Dapr开发团队也基于Azure Logic App的边缘运行时版本为微服务应用提供了Workflows的能力

为什么要用Dapr

根据InfoQ的架构和设计技术趋势报告(https://www.infoq.com/articles/architecture-trends-2020/),微服务已经成为软件开发的主流。但是要开发微服务应用,大部分开发人员还是面临诸多挑战。根本原因在于我们更熟悉经典的3层架构,而对微服务这种分布式应用的开发经验会显得相对不足,很难应对分布式应用所要求的伸缩性、灵活性、可维护性等云原生的特点。

Dapr通过把一些构建微服务应用所需的最佳实践内置到开放、独立的Building Block中,让开发人员更加专注于业务逻辑代码的编写,即可开发出功能强大的微服务应用。

更为重要的是,Dapr还抽象了运行环境,避免微服务应用和运行环境强绑定(这也是很多团队“假上云”——仅使用VM的原因之一)。并且支撑Dapr的运行环境不仅仅限于Cloud,还有广阔的Edge。

毫无疑问,Dapr获得了很多用户的青睐,官网上提到的Geek+使用Dapr构建了仓储机器人的解决方案,Willow使用Dapr构建了智能铁路管理系统。也还有很多大型企业正在采用Dapr来构建他们的微服务应用,甚至国内某互联网巨头不仅计划采用还积极参与了Dapr社区的贡献。

Dapr微服务应用开发系列0:概述相关推荐

  1. Dapr微服务应用开发系列5:发布订阅构建块

    题记:这篇介绍发布订阅构建块,这是对事件驱动架构设计的一种实现落地. 注:对于"Building Blocks"这个词组的翻译,我之前使用了"构件块",现在和官 ...

  2. Dapr微服务应用开发系列4:状态管理构件块

    Dapr微服务应用开发系列0:概述 Dapr微服务应用开发系列1:环境配置 Dapr微服务应用开发系列2:Hello World与SDK初接触 Dapr微服务应用开发系列3:服务调用构件块 题记:这篇 ...

  3. Dapr微服务应用开发系列2:Hello World与SDK初接触

    题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...

  4. Dapr微服务应用开发系列3:服务调用构件块

    题记:这篇开始逐一深入介绍各个构件块,从服务调用开始 原理 所谓服务调用,就是通过这个构件块让你方便的通过HTTP或者gRPC协议同步调用其他服务的方法,这些方法也是通过HTTP或者gRPC来暴露的. ...

  5. Dapr微服务应用开发系列1:环境配置

    题记:上篇Dapr系列文章简要介绍了Dapr,这篇来谈一下开发和运行环境配置 本机开发环境配置 安装Docker 为了方便进行Dapr开发,最好(其实不一定必须)首先在本机(开发机器)上安装Docke ...

  6. Blazor+Dapr+K8s微服务之开发环境调试

    1 安装Dapr开发调试环境 1.1 Dapr 完整安装模式不支持开发调试 在上一篇随笔<Blazor+Dapr+K8s微服务之服务调用>中,我们通过为每个微服务运行dapr run -. ...

  7. (二)surging 微服务框架使用系列之surging 的准备工作consul安装(转载 https://www.cnblogs.com/alangur/p/8377977.html)...

    (二)surging 微服务框架使用系列之surging 的准备工作consul安装 suging 的注册中心支持consul跟zookeeper.因为consul跟zookeeper的配置都差不多, ...

  8. Spring Boot与Docker(一):微服务架构和容器化概述

    本文讲的是Spring Boot与Docker(一):微服务架构和容器化概述,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列四部曲的第一篇,本篇将会对我们 ...

  9. gradle 指定springcloud 版本_SpringCloud微服务架构开发实战:实现服务注册与发现

    实现服务的注册与发现 在前面分别用Eureka Server和Eureka Client来搭建了一台注册服务器,以及多个Eureka Client客户端.Eureka Client在启动后,就会将自己 ...

最新文章

  1. 解决安装完ubuntu登陆无root账户问题
  2. CentOS 7 系列(四)系统服务配置 服务(Service)
  3. freamarker 模板中空格_高端商务公司介绍PPT模板
  4. 《软件工程》实验报告——需求获取与分析
  5. 【STM32】STLINK调试程序教程
  6. 测试jdbc连mysql数据库_java连接mysql数据库及测试是否连接成功的方法
  7. html英文字体汇总,笔记 CSS常用中文字体英文名称对照表
  8. 浅入MFC之对话框及MFC程序的运行
  9. 低代码/无代码,在国内还有多长的路要走?
  10. 使用jqueryMobile + phoneGap 开发移动端应用
  11. sd卡卡槽_SD卡无法读取最完整解决办法汇总
  12. [2020年]研究生数学建模竞赛题目分享
  13. Postman测试post接口
  14. vue-pdf 字体不显示
  15. java解析xml方法_详解Java解析XML的四种方法
  16. java中graphics_在java中如何绘图?Graphics类是什么意思?
  17. PCL库中I/O操作
  18. 试用新版Windows Home Server 2011 (Vail)
  19. Win11系统更新KB5014668后点开始按钮没反应怎么办?
  20. 【GlobalMapper精品教程】024:批量高效实现多种数据格式互转的方法

热门文章

  1. [luoguP2601] [ZJOI2009]对称的正方形(二维Hash + 二分 || Manacher)
  2. webform数据导出
  3. 在Firefox中结合Wolfram Alpha和Google搜索结果
  4. minecraft服务器_如何使用Minecraft领域设置简单的无压力Minecraft服务器
  5. Spring Cloud Gateway 原生支持接口限流该怎么玩
  6. 0408~送给小伙伴的汉堡包
  7. Nats的消息通信模型
  8. S5PC100基于I2C子系统的lm75驱动流程图
  9. NHibernate for .NET 1.2
  10. 记一次 Oracle无法连接 问题分析