翻译 | 阿里巴巴的Dapr实践与探索
本文原文来自Dapr Blog,作者阿里云高级技术专家敖小剑。本文是我根据自己的理解翻译了其中的一部分并加了一些参考文献中的内容,所以并非完整翻译,点击此处即可阅读原版英文全文。
1 关于Dapr
Dapr(Distributed Application Runtime)是一个开源、可移植、事件驱动的运行时。它使开发人员能够轻松地构建运行在云平台和边缘的弹性而微服务化的应用程序,无论是无状态还是有状态。Dapr 让开发人员能够专注于编写业务逻辑,而不是解决分布式系统的挑战,从而显著提高生产力并减少开发时间。此外,Dapr 也降低了大部分中小型企业基于微服务架构构建现代云原生应用的准入门槛。

2 为什么阿里巴巴选择Dapr?
多语言多环境的需求
众所周知,阿里巴巴在过去的十多年里基于Java技术栈构建了众多的业务系统、中间件和基础设施。
但是,随着阿里巴巴业务的快速发展和云原生技术的逐步应用,包括Node.js、Golang、C、C++ 以及 Rust 等在内的多开发语言并存的需求 就变得需要解决,总不能重复给各个语言造轮子吧?

因此,阿里巴巴急切需要一个能够不受语言技术栈限制的,且能够快速开发微服务的有效解决方案。
多运行时的微服务架构
最终,阿里巴巴选择了基于Sidecar形式运行的多运行时解决方案,这和之前Bilgin Lbryam提出的“多运行时的微服务架构”的理念十分类似。

这种架构的理念其实是将业务逻辑和基础中间件进行分离的实践。

很可能在将来,我们最终将使用多个运行时来实现分布式系统。多个运行时,不是因为有多个微服务,而是因为每个微服务都将由多个运行时组成,最有可能是两个运行时环境:自定义业务逻辑运行环境和分布式原语运行环境。
因此,在这种软件体系结构中,我们可能会将拥有构成应用程序核心的业务逻辑和提供强大的现成分布式原语的sidecar组件。

Dapr是践行多运行时环境理念的第一个开源项目,阿里巴巴也因此从它发布release版本就开始重点关注,因为Dapr具有足够的潜力能够帮助阿里巴巴解决其所遇到的问题和挑战。
换句话说,Sidecar模式所具有的优点能够方便地支持多语言,且基于Dapr可以更加轻便快速地构建应用程序,而不是像以前一样需要引入一大堆客户端SDK。
阿里巴巴资深技术专家 李响(etcd作者)说道“在阿里云,我们相信Dapr将会改变微服务的部署方式。通过引入Dapr,我们的客户可以更加快速和便捷地构建具有可移植性和健壮性的分布式系统”。

3 Dapr在阿里巴巴的实践
从2020年中旬开始,阿里巴巴在内部启动了一个小规模的试验,意在使用Dapr来探索和验证Dapr在真实环境下的可行性。与此同时,阿里巴巴也在积极参与Dapr社区的建设,并积极提交了大量的改进建议、反馈 以及 代码。
Serverless场景下多开发语言的支持
阿里巴巴的电商系统包括了大量的支持业务活动和购买流程的需求,这些需求大多都是需要短期内实现,支持稳定交易运行 且 快速响应客户的。因此,FaaS(Function as a Service)这种Serverless的场景是十分适合于这类需求的模式。

首先,FaaS应用具有强烈的支持多语言的需求,特别是不能受限于阿里巴巴已经成熟的Java技术栈生态,因为阿里巴巴的大部分Java应用都对多语言需求的支持不足,特别是像Dart或Rust为代表的不同类型的开发语言。
其次,FaaS应用还需要和本地部署的服务、不同类型的中间件 和 基础设施 进行通信,因此,多语言支持就变得十分的重要。
基于Dapr,阿里巴巴解决了FaaS应用存在的多语言支持不足的问题,帮助客户提高了FaaS应用的开发效率。
生态系统多语言开发的应用系统的集成
在过去的多年中,阿里巴巴通过收购入股了大量不同行业的企业,这些企业都在使用不同的技术栈构建解决方案。

这些被收购入股的公司已经有了大量的应用系统,而且大部分都不是使用Java技术栈开发的。所以,这些应用系统具有强烈的多语言集成需求,以便能够快速地融入阿里巴巴的生态系统之中。例如,部分企业使用了Node.js 和 Golang开发了部分应用,又使用Dart 和 C++ 开发了其他部分应用,在技术的选型上也是根据场景择优选择的,你不能说他们就有错。
但是,现状是阿里巴巴的生态系统不能良好的支持除Java之外的开发语言进行集成,特别是其中一些中间件和基础设施。在实际中,阿里巴巴基于不重复造轮子和成本和时间考虑,也不会为所有的开发语言都重复开发类似的客户端接入。
最后,阿里巴巴选择基于Dapr来为这些应用提供多语言的集成解决方案。
已有的复杂Java遗留系统
在过去的多年中,阿里巴巴基于ClassLoader(Java中的一个核心概念)来设计和开发了大量的复杂的Java系统,这些系统的设计往往是复杂的,而且应用也是很臃肿的。
此外,一些业务开发团队还维护了一些列的多语言中间件SDK来和已有中间件进行联接。但是,这些SDK的维护工作需要和中间件团队的更新保持同步,不能有一点遗漏。这些必要的工作量,也为其带来了潜在的稳定性风险。
因此,阿里巴巴期望基于Dapr来解决上面提到的两个问题。值得一提的是,阿里云为Java的遗留系统设计了一个适配器层,可以方便地将原始的Java调用转换为Dapr客户端API。
下图展示了上述三个场景提到的多语言支持的设计实现:

除此之外,阿里巴巴还在Cloud-to-Cloud的迁移方面进行了实践,这里就不再多赘述。
4 未来阿里巴巴的Dapr计划
在未来,阿里巴巴还将继续在试验应用中验证Dapr的可行性,将会主要集中在以下几个方面:
- 适用场景
- 性能
- 稳定性
- 可移植性
此外,阿里巴巴也正在开发Dapr相关组件来和更多的中间件和基础设施进行集成,其中包括了阿里云的众多内部产品和已发布的商业产品。
通过验证之后,阿里巴巴还将会贡献在阿里云商业产品上实践的集成代码给Dapr社区,也会持续地和Dapr社区一起努力提高Dapr的功能、性能以及稳定性。
References
英文原文作者:敖小剑,发布于Dapr Blog,点此阅读
Dapr文档:https://docs.dapr.io/
Dpar for .NET Developers:https://aka.ms/dapr-ebook

翻译 | 阿里巴巴的Dapr实践与探索的更多相关文章
- 阿里巴巴发布最佳实践 | 阿里巴巴DevOps实践指南
编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...
- 涂鸦智能 dubbo-go 亿级流量的实践与探索
涂鸦智能 dubbo-go 亿级流量的实践与探索 dubbo 是一个基于 Java 开发的高性能的轻量级 RPC 框架,dubbo 提供了丰富的服务治理功能和优秀的扩展能力.而 dubbo-go 在 ...
- 云原生数据库TDSQL-C 容灾的实践和探索
云原生数据库TDSQL-C作为腾讯云架构平台部核心数据库产品之一,致力于为云上ToB用户和公司自研业务提供集高性能.低成本.大存储.低延迟.秒级扩缩容.极速回档.Serverless化七大特性于一体的 ...
- vivo直播应用技术实践与探索
一.概述 2019年vivo直播平台立项,初期与优秀的顶部直播平台进行联运直播开发,进行市场,产品和技术的初步探索:再到后来为了丰富直播的内容和形式,开始自己独立探索:之后,我们结合vivo现阶段的直 ...
- 李呈祥:bilibili在湖仓一体查询加速上的实践与探索
导读: 本文主要介绍哔哩哔哩在数据湖与数据仓库一体架构下,探索查询加速以及索引增强的一些实践.主要内容包括: 什么是湖仓一体架构 哔哩哔哩目前的湖仓一体架构 湖仓一体架构下,数据的排序组织优化 湖仓一 ...
- RTE2021 回顾丨HDR 技术产品实践与探索
本文整理自 OPPO HDR 研发负责人熊磊,在 RTE2021 实时互联网大会上的演讲.他通过介绍 HDR 视频标准与生态.关键技术.发展方向三部分,分享了在移动端 HDR 视频的落地情况以及技术细 ...
- [翻译] API测试最佳实践 - 身份验证(Authentication)
API测试最佳实践 - 身份验证 适用等级:高级 1. 概况 身份验证通常被定义为是对某个资源的身份的确认的活动,这里面资源的身份指代的是API的消费者(或者说是调用者).一旦一个用户的身份验证通过了 ...
- Dapr项目应用探索
背景介绍 前面文章对Dapr的基本信息进行了学习,接下来尝试将Dapr应用相关应用中. 接下来一步步实现应用dapr功能. 一.预期效果 如上图应用Dapr点包含: a) 报表服务绑定统一数据源服务: ...
- JSF预热功能在企业前台研发部的实践与探索
作者:京东零售 李孟东 00 导读 企业前台研发部包含了企业业务大部分的对外前台系统,其中京东VOP平台(开放平台)适合于自建内网采购商城平台的企业客户. 京东为这类客户专门开发API接口,对接到客户 ...
- [翻译] API测试最佳实践 - 组织你的测试
组织你的测试 适用级别:初学者 在最底层,一个测试步骤(Test Step)用来验证一个单独的操作.组合若干测试步骤到测试用例,允许你验证那些被分隔出来的一个一个的功能,这些功能是应用程序所需要的.接 ...
随机推荐
- JDK7-时间类、时间格式化类--java进阶day07
1.Date类:表示时间的类 1.Date常用的构造方法 . 2.Date常用的成员方法 1.getTime:返回从时间原点到对象设定的时间之间的时间 2.setTime:将对象的时间设置为setTi ...
- Quartz.NET - 教程 12: Quartz 的其他特性
译者注: 目录在这 Quartz.NET 3.x 教程 原文在这 Lesson 12: Miscellaneous Features of Quartz 插件 Quartz 提供了一个用于插入附加功能 ...
- 2. RabbitMQ 的详细安装步骤(两种方式,第一种:yum 安装;第二种:docker 容器安装)
2. RabbitMQ 的详细安装步骤(两种方式,第一种:yum 安装:第二种:docker 容器安装) @ 目录 2. RabbitMQ 的详细安装步骤(两种方式,第一种:yum 安装:第二种:do ...
- nodejs环境准备
这是为了针对nodejs使用来进行的环境准备,分出windows和ubuntu两种情况: Windows 环境 安装 Node.js 下载安装包:访问下面nodejs官网: 选择适合 Windows ...
- 将Particle转成UGUI
在unity官方论坛看到的一个解决方案,可以将Particle直接转换成CanvasRenderer元素显示.新建一个UIParticleSystem.cs脚本,将以下代码复制进去: using Un ...
- v-bind,v-if,v-for,v-on,v-model基本用法
总结: 1.v-bind绑定数据:标签属性v-bind:title='xxx',简写:title='xxx', 标签内容{{xxx}} <span :title='message'>{{m ...
- 🎀springboot banner介绍及使用
简介 Banner是指应用程序启动时显示的信息.对于Spring Boot应用来说,默认情况下,当你启动一个 Spring Boot应用时,控制台上会打印出一段由 Spring Boot自带的ASCI ...
- VBA_LoadPicture报错:子过程或子函数未定义
需要增加如下引用: While in the VBE select Tools>References>find and check "OLE Automation" 参 ...
- 记录一次SpringBoot + Vue前后分离项目的部署流程
前言 本教程使用黑马 SpringBoot3+Vue3全套视频教程 大事件项目作为前后端代码. 前置需要: mysql jdk redis nginx linux环境 打包 前端 构建项目命令 npm ...
- 【MOOC】北京理工大学Python网络爬虫与信息提取慕课答案-综合挑出了一些很难评的慕课测验题
1 Requests库中的get()方法最常用,下面哪个说法正确? ...