MSE | 阿里巴巴云原生网关三位一体的选择与实践

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 三位一体是阿里巴巴“自研”、“开源”、“商业化”采用的统一技术体系,希望以开源做内核、结合阿里巴巴内部丰富的业态和业务需求,通过自研进一步打磨软件的性能与高可用性,最终形成三位一体的旋转飞轮。

作者 | 如葑


三位一体是阿里巴巴“自研”、“开源”、“商业化”采用的统一技术体系,希望以开源做内核、结合阿里巴巴内部丰富的业态和业务需求,通过自研进一步打磨软件的性能与高可用性,然后以云上商业化服务的形式,向所有用户开放,同时也会向开源社区持续贡献,最终形成三位一体的旋转飞轮。阿里云云原生团队所支撑的集团业务,分为三层:BaaS、Runtime、Serverless,各层以开源软件为内核,在开源内核上进行集成和扩展,经大规模生产验证后,推向商业化。

1.png

开源具有生态、开放的优势,自研具有性能高、可用性强的优势,而商业化则具有易用、安全的优势,基于三位一体的技术体系,可以将开源、自研与商业化都有其各自的优点结合在一起,发挥出最大的优势。


云原生网关在阿里巴巴的发展轨迹


1、诞生背景


云原生网关的创建,源于集团内部的“本地生活战役”,该战役始于“支付宝 2020 合作伙伴大会”,在此大会上支付宝宣布升级为数字生活开放平台。该战役的核心技术目标,是实现阿里巴巴业务域与蚂蚁业务域之间 RPC 直接调用,但因阿里巴巴与蚂蚁业务域网络是隔离的,即网络是不通的,很自然想到利用网关来解决此问题。


2、技术选型


利用网关来解决阿里巴巴与蚂蚁跨业务域 RPC 互通问题,首先要对网关做技术选型。


相信大家也都或多或少知道,阿里巴巴开源的反向代理程序 Tengine。Tengine 在阿里内部统一接入网关 AServer 中被使用,我们团队当时就是负责开发运维 AServer 的,同时我们团队也在负责阿里巴巴 Service Mesh 的落地,不管是对 Tengine 还是对 Istio + Envoy 这套架构都比较熟悉。


在选型时,虽然也调研过一些其他的软件,但考虑到网关对性能、可靠性的高要求,在结合我们自身的网关运维经验,决定看看 Tengine 与 Envoy 是否可以满足我们的业务需求,在对比时我们罗列了四个关键要点,其对比如下:

2.png


这里提一下“为什么我们认为配置的热更新,是非常重要的”?


Tengine/Nginx 的配置更新需要 reload,reload 需要重启 worker 进程,重启时会引起流量抖动,对长连接影响尤为明显。在网关的集群规模非常大时,更是不能随意的做 reload,这时就会引发一个矛盾点:业务向网关提交配置后,希望能快速验证,但受限于 reload 机制和稳定性要求,无法满足业务快速验证与快速试错的诉求。


如何解决这点呢?


一是采用两层网关,即流量网关 + 业务网关;二是实现网关原生支持配置热更新。除了对比不同方案的优劣势,我们也调研了 Envoy 作为网关在业界的趋势,结论是目前 Envoy 作为 K8s 中的 Ingress Provider 增长最快的事实(Ingress Provider 指 K8s Ingress 规范具体实现,因 K8s Ingress 自身只是规范定义,是 K8s 下外部流量进入集群内部的网关规范定义),我们最终选择了 Envoy 来实现两层网关。


3.png


3、发展历程


云原生网关从最初社区的 Istio + Envoy,到经历阿里巴巴内部的自研扩展,再到大规模生成验证,最后完成商业化产品的发布,其整个过程介绍如下:

4.png

这个过程中,我们也正持续的、坚定的向开源社区贡献自己的力量,例如向 Envoy 社区提交了 Dubbo 支持、RocketMQ 支持,并解决了一些社区 issue 等。


云原生网关为何被称为下一代网关


1、传统网关分类及部署模式


行业中通常把网关分为两个大类:流量网关与业务网关。


流量网关,主要提供全局性的、与后端业务无关的策略配置,例如,阿里内部的的统一接入网关 Tengine 就是典型的流量网关;业务网关,顾名思义主要提供独立业务域级别的、与后端业务紧耦合策略配置。随着应用架构模式从单体演进到现在的分布式微服务,业务网关也有了新的叫法 - 微服务网关(图示说明如下)。

5.png


2、下一代网关应该具备哪些核心因素


在容器技术与 K8s 主导的云原生时代,下一代的网关模式仍然会是传统的流量网关与微服务网关的两层架构吗?


带着这个问题,并结合阿里巴巴内部沉淀的网关技术与运维经验,我们尝试来回答下,什么是下一代网关。

6.png

我们对其中几个非常核心的要素展开说明下:


  • 云原生:要支持标准 K8s Ingress、K8s Gateway API 以及 K8s 服务发现,在云原生时代,K8s 已经成为云 OS,而 K8s 原生集群内外部的网络是隔离的,负责外部流量进入,K8s 集群的规范定义就是 K8s Ingress,K8s Gateway API 是 K8s Ingress 的进一步演化,基于此,作为下一代网关,势必要支持这种特性。
  • 拥抱开源:要基于开源生态构建网关,借助开源并助力开源,相信这点大家应该都不陌生。
  • 高扩展:任何一个网关的能力都不可能覆盖所有的用户诉求,要具备可扩展能力,例如 K8s 的蓬勃发展其开放的扩展能力功不可没。
  • 服务治理:随着应用架构演进到分布式微服务,网关本身就是为后端业务提供流量调度能力,其支持基本的服务治理能力也就顺其自然了。
  • 丰富的可观测性:分布式微服务架构带来协同效率提升等益处的同时,对于问题排查及运维带来了更大的挑战,作为流量桥头堡的网关需要具备丰富的可观测数据,帮助用户来定位问题。


基于以上的分析和实践,我们认为,在虚拟化时期的微服务架构下,业务通常采用流量网关 + 微服务网关的两层架构,流量网关负责南北向流量调度和安全防护,微服务网关负责东西向流量调度和服务治理,而在容器和 K8s 主导的云原生时代,Ingress 成为 K8s 生态的网关标准,赋予了网关新的使命,使得流量网关 + 微服务网关合二为一成为可能。

MSE - 云原生网关的优势



1、更经济:将流量网关与微服务网关合二为一,用户资源成本直降50%


MSE - 云原生网关在能力不打折的情况下,将两层网关变为一层,不仅可以节省 50% 的资源成本,还可以降低运维及使用成本。部署结构示意图如下,左边为传统网关模式,右图为下一代云原生网关模式。


7.png

在微服务的大背景下,丰富的可观测能力也是用户的基础核心诉求,MSE - 云原生网关基于此默认集成了阿里云应用实时监控服务 ARMS,提供丰富的可观测数据,且该功能对用户免费。

8.png



2、更安全:提供丰富的认证鉴权能力,降低客户的安全接入成本


认证鉴权是客户对网关的刚需,MSE - 云原生网关不仅提供常规的 JWT 认证,也提供基于授权开放网络标准 OAuth 2.0 的 OIDC 认证。同时,MSE - 云原生网关天然支持阿里云的应用身份服务 IDaaS帮助客户实现支付宝、淘宝、天猫等第三方认证登陆,并以插件的方式支持来扩展认证鉴权功能,以降低客户的安全接入成本。现有认证鉴权功能如下图:

9.png


3、更统一:网关直连后端服务,打通 Nacos/Eureka/K8s 多种服务来源,并且率先支持 Apache Dubbo3.0 协议


开源已经成为推动软件发展的源动力之一,面向社区标准、开放的商业产品更有生命力。


Envoy 是最受 K8s 社区欢迎的 Ingress 实现之一,正成为云原生时代流量入口的标准技术方案。MSE 云原生网关依托于 Envoy 和 Istio 进行构建,实现了统一的控制面管控,并直连后端服务,支持了 Dubbo3.0、Nacos,打通阿里云容器服务 ACK,自动同步服务注册信息。MSE 云原生网关对 Dubbo 3.0 与 Nacos 的支持,已经率先在钉钉业务中上线,下图是钉钉 Dubbo 3.0 落地的部署简图如下:

10.png


4、更稳定:技术积淀已久,历经2020双11考验,每秒承载数10万笔请求


商用产品并非一朝一夕。


MSE 云原生网关早已在阿里巴巴内部经历千锤百炼。目前已经在支付宝、钉钉、淘宝、天猫、优酷、飞猪、口碑等阿里各业务系统中使用,并经过 2020 双11 海量请求的考验,大促日可轻松承载每秒数 10万 笔请求,日请求量达到百亿级别。

11.png

云原生网关目前可以涵盖南北向、东西向全业务场景,即可以支持传统的注册中心,例如 Nacos,也可以支持 K8s Service,同时也可以支持传统 ECS,下面通过图示说明如下:

12.png


Nginx 网关迁移云原生网关实践案例



1、优酷 Nginx 网关迁移案例


优酷业务内部有三个利用 Nginx 构建的网关,使用 Lua 脚本做了一些业务扩展,但是随着人员迭代,网关的运维变得越来越困难,主要包括 Lua 脚本维护难、配置变更不实时、多网关运维难以及配置变更 reload 与业务快速迭代的矛盾越来越多。因此,我们配合业务一起完成了 Nginx 网关到云原生网关的平滑迁移,为了保障迁移平滑、低成本,在云原生网关中专门针对 Nginx 的 error page 等功能做了扩展。如下图:

13.png


看到上面这幅图读者可能问为什么采用了两层网关结构?即 AServer(流量网关) + 业务自建网关。


这是因为对于阿里巴巴这种超大流量的业务,采用两层架构,由流量网关统一负责安全防护、全局流量调度成本会更低,不需要每个业务 BU 都做重复的事情,业务自建网关挂在流量网关之后,又可以满足业务自身快速迭代的要求;但是对于非超大规模的业务,使用两层架构反而会带来运维复杂度的上升。


2、Ingress-nginx 迁移方案


在 K8s Ingress Provider 中虽然使用 Envoy 架构的用户增长排在第一位,但不可否认的是,目前 Ingress-nginx 仍占据 K8s Ingress Provider 最大的份额,那么云原生网关是否可以兼容 Ingress-nginx 配置,为用户提供低成本甚至零成本的迁移方案呢?


带着这个问题我们也做了探索,Ingress-nginx 并没有采用定义新 CRD 的方式来扩展标准 K8s Ingress 能力,而是利用 Annotation 的方式,首先我们分析了 Ingress-nginx 的 Annotation 列表,如下:

14.png

依据用户使用度对齐做了优先级排序,其中处于高、中的 Annotation 云原生网关已经支持自动转换,剩余的除了插入代码片段等这些跟 Nginx 内部实现相关的 Annotation 外,我们也正在逐步的支持转换,目标就是做到零成本的迁移。转换流程简图如下:

15.png


写在最后


MSE - 云原生网关,旨在为用户提供更可靠的、成本更低、效率更高的,符合 K8s Ingress 标准的企业级网关产品,更多发布详情移步直播间观看:https://yqh.aliyun.com/live/detail/26484


MSE - 云原生网关提供后付费和包年包月两类付费模式,支持杭州、上海、北京、深圳 4 个 region,并会逐步开放其他 region


钉钉搜索群号 34754806 可加入用户群交流、答疑。

16.png

双十一大促,微服务引擎 MSE (注册配置中心和云原生网关)首购 8 折优惠!

点击“阅读原文”,了解更多!



相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2024 年 9 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 9 月产品动态。
|
11天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 09 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2024 年 8 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 8 月产品动态。
|
2月前
|
负载均衡 网络协议 Unix
Nginx负载均衡与故障转移实践
Nginx通过ngx_http_upstream_module模块实现负载均衡与故障转移,适用于多服务器环境。利用`upstream`与`server`指令定义后端服务器组,通过`proxy_pass`将请求代理至这些服务器,实现请求分发。Nginx还提供了多种负载均衡策略,如轮询、权重分配、IP哈希等,并支持自定义故障转移逻辑,确保系统稳定性和高可用性。示例配置展示了如何定义负载均衡设备及状态,并应用到具体server配置中。
|
2月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 08 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
8天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
10天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
11天前
|
消息中间件 存储 Cloud Native
云原生架构下的数据一致性挑战与应对策略####
本文探讨了在云原生环境中,面对微服务架构的广泛应用,数据一致性问题成为系统设计的核心挑战之一。通过分析云原生环境的特点,阐述了数据不一致性的常见场景及其对业务的影响,并深入讨论了解决这些问题的策略,包括采用分布式事务、事件驱动架构、补偿机制以及利用云平台提供的托管服务等。文章旨在为开发者提供一套系统性的解决方案框架,以应对在动态、分布式的云原生应用中保持数据一致性的复杂性。 ####
|
5天前
|
Cloud Native 云计算 Docker
云原生技术的崛起:从容器化到微服务架构
云原生技术的崛起:从容器化到微服务架构

相关产品

  • 微服务引擎
  • 下一篇
    无影云桌面