蚂蚁集团技术专家王发康:MOSN 在 Service Mesh 大规模落地中的演进与思考

2024-10-23
来源:网络整理

简介:本文为8月15日深圳GIAC全球互联网架构大会云原生分会现场实录。

王发康(易松)是蚂蚁集团可信原生技术部的技术专家。主要从事高性能网络服务器的研发。他是 MOSN 和开源项目的核心成员。目前主要关注云原生Mesh、等相关领域。他喜欢开源并愿意分享:。

前言

蚂蚁集团Mesh大规模落地后,MOSN通过与UDPA对接,成为数据面之一。本文就其演变过程中遇到的问题和思考进行探讨。与UDPA对接,实现融合,增强MOSN服务治理和流量控制能力。与云原生外围组件连接,使 MOSN 开箱即用。这主要从以下几点来介绍:

MOSN简介

接下来我们从MOSN的诞生背景、发展历史、MOSN的功能和架构以及内部实现等方面来介绍一下。

MOSN诞生背景

随着云计算、物联网等技术的快速发展,微服务的架构不断演进。其演化过程通常经历以下四个阶段:

:一般初期业务很简单,流量不大。所有处理可在一次服务中完成;

分布式:随着业务运营的多样化、流量的不断增加,必须按照服务维度进行拆分,使得相同的服务资源消耗能够均等,便于容量评估和管理;

微服务:随着服务的粒度越来越细,服务的数量也不断增加。于是,微服务治理就出现了各种需求(限流、认证、路由等),各种类型的治理也应运而生。组件并以SDK插件的形式集成到不同的应用程序中;

Mesh:伴随着服务治理中的SDK类型、版本、重复等一系列问题,将SDK的能力剥离并与业务解耦,从而实现业务和中间件能力的并行迭代;

业务痛点

行业解决方案

基于以上业务痛点以及对业界现有解决方案的评估,MOSN诞生了。 MOSN (Open) 是一个用 .构建为 API、云原生、4 或 7 个负载均衡器场景。随着时间的推移,我们添加了额外的功能,例如多协议框架、多进程插件机制、DSL 和对 xDS API 的支持等。支持 xDS 意味着我们现在可以使用 MOSN 作为数据平面。

MOSN发展历程

Mesh技术研究始于2017年底,2018年3月,MOSN原型机问世,并进行小规模试点。抱着让更多用户享受到这项技术红利的想法,MOSN于2018年6月正式开源,2019年大规模落地618,并在同年双11大促中实现了核心支付环节全覆盖。经过大规模验证后,MOSN社区开始在标准化和生态方面发展和演化。

MOSN功能视图

MOSN作为通用数据转发平面,提供多协议分流、动态服务发现、服务治理(限流、重试、重写、超时控制等)、丰富的负载均衡算法等​​功能,可用于API、云等。本机、4 个或 7 个负载均衡器等场景。

MOSN架构分析

MOSN采用分层架构,其系统分为四层:NET/IO、、、。

其中,每一层通过工厂设计模式对外暴露自己的接口,让用户可以灵活注册自己的需求。通过协程池,用户可以以同步编码风格实现异步功能特性。通过区分协程类型,MOSN 实现了两种主要类型的协程:读取和协程。读协程主要处理网络读取和协议分析,协程用于完成读取后数据的处理、路由和转发。其架构如下图所示:

为了减少GC带来的滞后,MOSN封装了自己的内存池,方便多个对象的高效复用。此外,为了提高服务网格之间连接建立的性能,还设计了多种协议的连接池,以方便实现连接复用和管理。在连接管理方面,MOSN设计了多协议连接池。当模块通过路由、负载均衡等模块接收到Host和对应的转发协议时,获取对应协议的连接池。如果连接池不存在,则创建它并将其添加到缓存中。然后在长连接上创建并发送数据,如下图:

内存管理方面,MOSN 在sync.Pool之上封装了一层资源对注册管理模块,可以方便的扩展各类对象进行复用和管理。其中有用于存储各类对象的构造方法,用于存储各个实例对象的具体值。运行时,通过其中保存的构造方法创建相应的对象,并通过关联记录在其中。使用后,通过sync.Pool管理空闲对象,实现复用,如下图:

内存管理方面,MOSN 在sync.Pool之上封装了一层资源对注册管理模块,可以方便的扩展各类对象进行复用和管理。其中有用于存储各类对象的构造方法,用于存储各个实例对象的具体值。运行时,通过其中保存的构造方法创建相应的对象,并通过关联记录在其中。使用后,通过sync.Pool管理空闲对象,实现复用,如下图:

MOSN实施状况

服务网格化后,有人可能会质疑增加一跳转发是否会导致性能下降。事实上,情况并非如此。在Ant的一些业务场景中,部分业务网格化后,CPU消耗比之前降低了。 ,原因是之前一些通用的SDK能力已经迁移到上,并且统一做了一定的优化。还有一个好处就是,因为MOSN采用开发,自然开发效率就很高,所以也大大提升了中间件相关能力的研发速度。

MOSN 云原生演进

MOSN大规模落地并通过双11考试后,MOSN也开始在实践中规范和进化。并且通过与社区的合作,MOSN 实现了 xDS 的适配,可以方便地作为 MOSN 的控制平面来管理业务配置。另一方面,我们也积极参与相关社区,贡献一些通用能力和问题修复的 PR。

建筑学

如下图所示,最底层是基础设施层(物理机等)。上层抽象了容器资源的调度和管理。上层是容器中部署的各种服务。能力(服务治理)就是这一层用到的。

介绍

在介绍它之前,我们先来说说它为什么会出现。 10年前,一般应用都是直接部署在物理机上。但随着时间的推移,机器模型不断变化(如CPU核心数),出现了模型等效、环境部署、弹性扩展等一系列问题。于是就出现了。但当涉及到容器编排、调度、管理等问题时,问题就出现了。它在容器管理领域的使用是毋庸置疑的,但是它在微服务治理方面存在一些不足,所以它就是为了解决微服务治理问题而诞生的。

弥补了服务治理方面的短板,提供了服务互联、流量安全、流量控制、可观测等功能。

莫森和

经过 MOSN 社区几个月的努力和推进,MOSN v0.14.0 可以使用 1.5.x 作为云原生控制平面,方便微服务的管理。以下是2020年7月28日关于在中国使用MOSN的官方公告:又一篇数据平面博文,即数据平面的另一种选择——MOSN。

以下是MOSN 1.5版本的架构图。 MOSN通过xDS协议动态获取各种服务配置,以达到服务治理效果。

在Mesh领域,用它作为控制平面已经成为主流。通过 xDS 协议与数据平面交互。因此,通过在MOSN中实现xDS,我们可以将其用作MOSN的控制平面。第三方数据平面集成可以通过以下三个步骤实现:

有了相应的改造方案后,我们成立了相关组织,带领社区的学生一起讨论改造。

除了改造(相关能力已经集成到官方仓库)之外,MOSN 还需要在负载均衡、服务治理以及相关框架等方面做出一些适配和增强。适配列表如下:

一旦 MOSN 功能一致,它就可以用于微服务治理。在使用之前,我们先来看看中的相关策略与MOSN是如何关联的。如下图所示,作为一个业务的转发描述,在MOSN中对应一个和一组相应的路由策略。

初步了解了 MOSN 的组合方式后,我们通过一个例子来看一下 MOSN 能做什么: 下面是一个经典的多语言服务,用于服务治理。在这种场景下,MOSN不仅独立行动,还充当服务器的角色。

通过MOSN作为数据平面运行示例,实现了以下服务治理的通用能力:

在这里,您可以通过演示教程“MOSN with”了解MOSN如何作为服务管理的数据平面。

开源生态建设

MOSN在完成对接的同时,也与周边开源生态如、、、等进行了密切合作。

MOSN 与

MOSN 和非系统下提供的服务治理解决方案。如下图所示,方案一是非系统下,MOSN通过集成-go来支持pub/sub服务,并复用了原有的服务注册中心。方案二是采用系统下的一步式服务治理。 MOSN 通过支持的路由策略实现服务治理。

MOSN 与

限流是微服务治理中的一个重要功能。 MOSN 集成复用其底层限流能力,实现单机限流(令牌桶/漏桶组合)、业务断路保护(根据业务成功率)、自适应限流(根据负载情况) ),目前限流规则还没有成熟的API。我们还和UDPA讨论了一些限流规则的规范。

MOSN 与

服务之间的调用依赖关系和调用状态是微服务管理中的重要指标。 MOSN社区通过协作配合,将SDK集成到MOSN中,从而实现HTTP系统调用链路拓扑展示、QPS监控、细粒度RT如下图所示,该功能也在不断演化,将会支持下一个。

标准化演变

除了开源生态的适配之外,MOSN 还为其标准化做出了一些贡献(如限流、路由 UDPA 政策建议等)。 标准化了数据平面和控制平面之间的UDPA规范,微软标准化了控制平面和应用程序和工具级别之间的SMI规范。他们所做的一切,其实都是围绕“防止锁定,方便用户灵活切换”。

由此可见“标准”和“规范”的重要性。当然,MOSN社区也在其相关标准下做出了一些演进和贡献。

关于第一点,MOSN社区持续致力于能力的对接,包括多方支持、MOSN侧功能对接等。控制平面支持MOSN的注入、适配和编译构建适配、负载均衡算法、流量管理系统。 、流量检测、服务管理等

在标准化方面,我们也参与了UDPA相关规范的讨论,提出了限流通用API规范的讨论,并正在组织社区会议进行讨论。

同时,MOSN社区也在积极与社区沟通,寻求合作。我们的目标是成为官方推荐产品。我们上面提到过这一点,引起了相当多的关注。官方会员@对这个问题进行了非常详细的解答和讨论。

经过MOSN社区和官方的全面讨论,MOSN社区将主导并参与数据平面的解耦(如测试集、镜像构建等),这样更容易集成第三方数据平面,即更方便MOSN社区用户综合使用。 MOSN 中已添加以下项目并进行了适配:

关于第一点,MOSN社区已经为该系统贡献了一个PR,并已将其合并到主干中。此 PR 可以使镜像更轻松地集成其他数据平面。

TOC(技术委员会)委员@2020年7月14日最新回复:“也是支持多个数据平面的解决方案,也建议在官方博客中将MOSN作为实验性第三方数据平面纳入其中用户的便利性。来试试吧”:

经过 MOSN 社区的不断努力,7 月底,国内使用 MOSN 的官方博客正式上线:又一篇数据平面博文,得到了官方的一定认可。

总结与展望

从Mesh技术的研究,到MOSN的诞生和小规模试点,再到双11的大规模落地,再到从开源到标准化的演进,一路走来并不容易。这个过程也离不开 MOSN 开源社区的开发者和用户。的贡献和支持。

合作伙伴和用户

秉承利用开源、培育开源的理念,MOSN社区在众多合作伙伴的共同努力下,正在实践的道路上一步步走向标准化。

总结及未来展望

接下来,MOSN社区不仅会继续兼容和适配新版本的功能,还将在以下方面做出努力:

MOSN 是一个开源项目,社区中的任何人都可以使用、参与和改进。我们希望您加入社区!您可以通过以下几种方式了解 MOSN 的工作并参与其中。

欢迎加入 MOSN 开源交流群

参考阅读:

技术原创、架构实践文章,欢迎通过公众号“联系我们”菜单提交。

高可用架构

改变互联网的构建方式

分享