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

本文涉及的产品
服务治理 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 折优惠!

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



相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
16天前
|
负载均衡 算法
SpringCloud&Ribbon负载均衡原理与实践
SpringCloud&Ribbon负载均衡原理与实践
20 3
|
25天前
|
API
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态。
|
26天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 03 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
1月前
|
负载均衡 Cloud Native 安全
云原生最佳实践系列 6:MSE 云原生网关使用 JWT 进行认证鉴权
本文档介绍了如何在 MSE(Microservices Engine)云原生网关中集成JWT进行全局认证鉴权。
|
1月前
|
弹性计算 监控 Cloud Native
云原生最佳实践系列 4:基于 MSE 和 SAE 的微服务部署与压测
通过MSE(微服务引擎)、SAE(Serverless应用引擎)、ARMS(应用监控服务)、PTS(性能测试服务)等产品,实现微服务的无服务化部署、监控和弹性伸缩。
|
2月前
|
消息中间件 Cloud Native 网络安全
云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE
该文档介绍了基于云原生应用的产品构建的微服务架构实践。
|
2月前
|
负载均衡 Kubernetes Cloud Native
云原生最佳实践系列2:基于 MSE 云原生网关同城多活
通过使用阿里云的云原生微服务引擎 MSE,可以实现注册中心的同城容灾多活微服务应用。MSE 提供了云原生网关和注册中心,支持机房级故障的秒级自动转移、非对等部署下的全局流量负载均衡以及流量精细化管控。
666 39
|
2月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 02 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
2月前
|
运维 网络协议 安全
长连接网关技术专题(十):百度基于Go的千万级统一长连接服务架构实践
本文将介绍百度基于golang实现的统一长连接服务,从统一长连接功能实现和性能优化等角度,描述了其在设计、开发和维护过程中面临的问题和挑战,并重点介绍了解决相关问题和挑战的方案和实践经验。
108 1
|
6月前
|
负载均衡 应用服务中间件 API
微服务技术系列教程(25) - SpringCloud- 接口网关服务Zuul
微服务技术系列教程(25) - SpringCloud- 接口网关服务Zuul
60 0

相关产品

  • 微服务引擎