如何看待 Dapr、Layotto 这种多运行时架构?

本文深入探讨了蚂蚁集团在落地Dapr风格的多运行时架构Layotto过程中遇到的问题、标准化API的局限性,以及Runtime架构的价值和部署形态的挑战。作者分享了如何看待可移植性、与ServiceMesh和EventMesh的区别,以及在实践中如何平衡标准化和灵活性。

文|周群力(花名:仪式 )

Layotto PMC
Layotto 和 SOFAStack 开源社区的建设,Dapr 贡献者,Dapr sig-api 的 Co-chair

本文 10963 字 阅读 20 分钟

2019 年,微软开源了 Dapr 项目。2021 年,蚂蚁参照 Dapr 思想开源了 Layotto 项目。如今,蚂蚁已落地 Layotto,服务了很多应用。从理想落地到现实的过程中,我们遇到了不少问题,也对项目做了很多改变。回过头再看,如何看待 Dapr、Layotto 这种多运行时架构?我们能从中学到什么?

本次我将从以下几个方面,分享蚂蚁在落地多运行时架构之后的思考:

1. 如何看待“可移植性”

2. 多运行时架构能带来哪些价值

3. 与 Service Mesh、Event Mesh 的区别

4. 如何看待不同的部署形态

PART. 1 快速回顾

如果你熟悉 Multi-Runtime、Dapr 和 Layotto 的概念,可以跳过这一章节,直接进入下一章节。

快速回顾:什么是 Multi-Runtime 架构?

Multi-Runtime 是一种服务端架构思路,如果用一句话来概括,就是把应用里的所有中间件挪到 Sidecar 里,使得“业务运行时”和“技术运行时”分离开。

更详细的解释如下:首先来看 Service Mesh,和传统 RPC 框架相比,Service Mesh 的创新之处在于引入了 Sidecar 模式。Service Mesh 只解决了服务间通讯的需求,而现实中的分布式应用存在更多需求,比如“协议转换”、“状态管理”等。Multi-Runtime 架构提出将各种各样的分布式能力外移到独立 Runtime,最后和应用 Runtime 共同组成微服务,形成所谓的“Multi-Runtime” (多运行时) 架构。

具体细节可以详阅《Multi-Runtime Microservices Architecture》和《Mecha:将 Mesh 进行到底》。

哪些项目实现了 Multi-Runtime 架构?

Dapr

Dapr 的全称是“Distributed Application Runtime”,即“分布式应用运行时”,是一个由微软发起的开源项目。

Dapr 项目是业界第一个 Multi-Runtime 实践项目,Dapr 的 Sidecar,除了可以和 Service Mesh 一样支持服务间通讯,还可以支持更多的功能,如 state (状态管理) 、pub-sub (消息通讯) ,resource binding (资源绑定,包括输入和输出) 。Dapr 将每种功能抽象出标准化的 API (如 state API) ,每个 API 都有多种实现,比如用户可以面向 state API 编程,但是可以随意切换存储组件,今年用 Redis,明年改成用 MongoDB,业务代码不用改。

如果之前没有接触过 Dapr,更详细的介绍可以阅读《Dapr v1.0 展望:从 Service Mesh 到云原生》这篇文章。

Layotto

Layotto 是由蚂蚁集团 2021 年开源的一个实现 Multi-Runtime 架构的项目,核心思想是在 Service Mesh 的数据面 (MOSN) 里支持 Dapr API 和 WebAssembly 运行时,实现一个 Sidecar 同时作为 Service Mesh 数据面、多运行时 Runtime、FaaS 运行时。项目地址为:https://github.com/mosn/layotto

以上是本文背景,接下来是本次主题分享。

PART. 2 你真的需要这种“可移植性”吗?

社区比较关注 Dapr API 的“可移植性”,但在落地过程中,我们不禁反思:你真的需要这种“可移植性”吗?

标准化 API 能满足所有需求吗?

数据库领域曾出现过一个有趣的讨论:同一个数据库能否适用于所有场景,满足所有需求? 比如,一个数据库能否同时支持 OLAP+OLTP+ACID 等等需求?

今天,我们在建设 Dapr API 的过程中也遇到了有趣的问题:在某个产品领域 (比如消息队列)能否定义一套“标准 API”同时适用于所有的消息队列

当然,这两个问题不能混为一谈:即使是两种不同类型的数据库,比如两个数据库,一个只做 OLAP,另一个只做 OLTP,它们都可以支持 SQL 协议。两个差距那么大的数据库都能用同样的协议,我们有理由相信:在特定领域,设计一个适用于所有产品的“标准 API”是可行的。

可行,但现在还不完全行。

现在的 Dapr API 还比较简单,简单场景足以胜任,但在复杂的业务场景下,做不到“帮助应用 Write once,run on any cloud”。对这个问题,敖小剑老师的文章《死生之地不可不察:论 API 标准化对 Dapr 的重要性》有过详细描述,大意是说:

现在的 Dapr API 比较简单,在生产落地的时候满足不了复杂需求,于是开发者只能添加很多自定义的扩展字段,在 Sidecar 的组件里做特殊处理。比如下面是用 State API 时候的一些自定义扩展字段:

图片

(图片摘自敖小剑老师的文章)

这些自定义的扩展字段会破坏可移植性:如果你换一个组件,新组件肯定不认识这些字段,所以你得改代码。

之所以出现这个问题,背后的根本原因是 Dapr API 的设计哲学。

社区在设计 Dapr API 时,为了可移植性,设计出的 API 倾向于 “功能交集” 。比如在设计 Configuration API 时,会考察各种配置中心 A、B、C,如果 A、B、C 都有同一个功能,那么这个功能才会出现在 Dapr API 中:

图片

然而,在现实世界中,人们的需求可能是 A 和 B 的交集,B 和 C 的交集 (如下图红色部分) ,而不是 A、B、C 的交集:

图片

或者更常见,用户的需求是“B 的所有功能”,其中必然包括一些 B 独有的功能,Dapr API 无法覆盖:

图片

Dapr 提供“标准 API”、“语言 SDK”和“Runtime”,需要应用进行适配 (这意味着老应用需要进行改造) ,侵入性比较大。

因此 Dapr 更适合新应用开发 (所谓 Green Field) ,对于现有的老应用 (所谓 Brown Field) 则需要付出较高的改造代价。但在付出这些代价之后,Dapr 就可以提供跨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值