本文原文来自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