简介:最近阅读 《Envoy Gateway 来了》这篇文章,深感 Envoy 强大的可扩展性和基于 Envoy Gateway 带来的易用性,在 K8s 架构下,Envoy 重新定义了网关的定位和能力,被誉为云原生网关,甚至被称之为下一代网关。阿里巴巴早在2018年就启动了下一代网关的探索之路,本文将对这个探索历程做一个简单介绍。

作者:耿蕾蕾(如葑):阿里云研发工程师,从 2020 年 5 月负责 Envoy Gateway 的构建到推出 3.0,作为技术负责人主导了整个演进过程,在云原生网关领域有着丰富的实践。

最近阅读 《Envoy Gateway 来了》这篇文章,深感 Envoy 强大的可扩展性和基于 Envoy Gateway 带来的易用性,在 K8s 架构下,Envoy 重新定义了网关的定位和能力,被誉为云原生网关,甚至被称之为下一代网关。阿里巴巴早在2018年就启动了下一代网关的探索之路,本文将对这个探索历程做一个简单介绍。

阿里巴巴早在 2018 年,就开启了云原生上云的序幕,将容器、服务网格作为核心技术点进行演进,并尝试阿里巴巴和蚂蚁通过这次技术演进,来统一双方的中间件技术栈,让业务更聚焦业务开发,屏蔽底层分布式复杂度。作为服务网格一个重要方向,我们开启了下一代网关的探索之路。

Envoy Gateway 1.0(孵化期)

上云过程中,我们期望统一应用架构技术栈,但是蚂蚁和阿里巴巴的 RPC 协议不同,存在互调链路长、协议转换消耗大、Tengine Reload 访问有损(接入生效快就需要不断 reload 有损,如果控制 reload 影响,就要减少 reload 次数,接入服务生效慢)、Nginx 内核服务治理能力较弱等问题。因此,需要一个面对未来的网关解决方案。

当时,我们有两个技术演进思路,一个是基于 Tengine 进行优化,一个是基于 Envoy 内核来扩展网关场景,考虑到 Tengine 解决这些场景架构变动太大,Envoy 作为网关的第二选项,能够简单的解决上述痛点,因此,我们选择了 Envoy 内核作为下一代的网关演进方向,而且从 CNCF Ingress Provider 的统计数据来看,Envoy 也是增长最快的,社区接受度高。

在 2020 年 5 月,我们启动了 Envoy Gateway 1.0 的研发,同年成功支撑了双 11 大促,且成为核心重保的业务链路。

Envoy Gateway 1.0 主要是应用于东西向流量的 RPC 互通,其架构部署如下图:

这个时期,我们面对未来演进了 Dubbo3.0 的 Triple 协议,基于 Envoy,演进了网关的服务管理能力,支撑了当年双十一本地生活战役数十万 TPS 的流量洪峰。

Envoy Gateway 2.0(成长期)

随着阿里巴巴上云战役的推进,越来越多的场景找到我们,如云上云下业务互通,由于 Tengine 服务管理弱导致阿里内部大量二层微服务网关需要收敛,因此从业务上我们需要做 Tengine+Envoy 两层网关的演进,承担南北向网关流量。在 2020 年 12 月份我们开始了 2.0 架构的演进,下面以优酷场景为例说明演进过程如下图:

Envoy Gateway 2.0 南北向的架构图如下:

在两层架构中,Envoy 网关更多承担了微服务网关和微服务治理的需求,和 Tengine 流量网关完成了整合。在这个过程中,我们提升了服务治理和高可用能力,并且支撑优酷内部多个二层微服务网关统一,大幅提升性能和运维效率。

2.0 阶段,Envoy Gateway 完成了东西向、南北向全域流量的调度分发,东西向上不仅支持跨业务域的蚂蚁 RPC 互通,更是扩展到了混合云的云上云下的 RPC 互通场景,包括钉钉文档、阿里视频云、达摩院的店小蜜、智慧数字人等,2.0 阶段的业务大图如下(云上云下互通场景,以钉钉为例说明):

随着 Envoy Gateway 业务的快速铺开,在跟优酷持续合作时大家不约而同的提出了一个问题:Tengine Gateway(承担流量网关角色) + Envoy Gateway(承担微服务网关角色)的两层网关是否可以合并,使用 Envoy Gateway?答案是肯定的,而且我们也合作设计了新的架构图,如下:

这个方案的演进,让我们看到了网关新的发展态势,尤其在以 K8s 主导的容器化背景下,K8s 集群内外网络的天然隔离性,用户也需要一款兼顾高性能与安全性、以及强大服务治理能力的入口网关,这也为我们走向 3.0 提供了很好的积累。

Envoy Gateway 3.0(成熟期)

随着阿里巴巴大量场景的打磨,Envoy 网关性能、稳定性都获得了很好的发展。2021 年,阿里巴巴开启了中间件三位一体战役,用云产品支撑集团业务,因此我们也将孵化成熟的技术通过 MSE 云原生网关来服务集团。

此时,我们通过 Envoy 将流量网关 + 微服务网关合二为一的同时,还通过硬件加速、内核优化等手段,在性能不打折的情况下,持续优化网关的资源部署成本。

技术架构决定技术优势,Envoy 天然的可扩展性,还能将丰富的安全认证和微服务治理能力进行集成,体现了云原生网关高聚合的优势,例如:

  • 网关直连业务 PodIP,不经过传统 Cluster IP,RT 更低
  • 支持 HTTPS 硬件加速,QPS 提升 80%
  • 支持 Wasm 插件市场,插件热加载,满足多语言自定义插件需求
  • 自研 Multi-Ingress Controller 组件支持多集群 Ingress 复用同一个网关实例
  • 原生兼容 K8s Ingress 规范,且支持 Nginx Ingress 核心功能注解的无缝转化

回馈社区

我们在对 Envoy Gateway 进行演进的过程中,也提了很多社区 issue,包括:dubbo_proxy、wasm、cryptomb 等,未来我们会陆续回馈社区,作出更多贡献,和社区共同打造下一代网关。

原文链接

本文为阿里云原创内容,未经允许不得转载。

阿里巴巴在 Envoy Gateway 的演进历程浅析的更多相关文章

  1. 网易数帆 Envoy Gateway 实践之旅:坚守 6 年,峥嵘渐显

    服务网格成熟度不断提升,云原生环境下流量处理愈发重要, Envoy Gateway 项目于近日宣布开源,"旨在大幅降低将 Envoy 作为 API 网关的使用门槛",引发了业界关注 ...

  2. 《京东到家订单中心 Elasticsearch 演进历程》----阅读

    上篇通过阅读文章对京东到家的架构分析有了初步了解,这次对文章(https://mp.weixin.qq.com/s?__biz=MzU1MzE2NzIzMg==&mid=2247486889& ...

  3. SLA 99.99%以上!饿了么实时计算平台3年演进历程

    作者介绍 倪增光,饿了么BDI-大数据平台研发高级技术经理,曾先后就职于PPTV.唯品会.15年加入饿了么,组建数据架构team,整体负责离线平台.实时平台.平台工具的开发和运维,先后经历了唯品会.饿 ...

  4. JavaBean,EJB,POJO,Spring Bean 的演进历程

    JavaBean Sun公司对类提出的规范:1,类是public的2,有一个无参构造方法3,属性修饰要用private,通过get set操作4,实现Serializable接口5,对事件使用Swin ...

  5. 架构演进历程及为什么选择Spring Cloud

    单体式架构: 垂直拆分: 垂直拆分的特点: 分布式服务: 分布式服务的特点: SOA面向服务的架构: 服务治理: 微服务: 微服务结构: 服务调用方式: http客户端工具:

  6. iPhone4到iPhone6的设计、制造工艺历程浅析

    这里就阐述一下我对这几个手机在设计和制造工艺上的一些看法. 这 5 个型号概括起来就三个外观: iPhone4 的三明治夹心设计. iPhone5 的三段式铝合金一体成型. iPhone6 的全金属一 ...

  7. 干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的?

    干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的? https://www.sohu.com/a/235575064_99940985 干货 | 蚂蚁金服是如何实现 ...

  8. 为什么 K8s 在阿里能成功?| 问底中国 IT 技术演进

    作者: 曾凡松 阿里云云原生应用平台高级技术专家 张振 阿里云云原生应用平台高级技术专家 导读:本文描述了阿里巴巴在容器管理领域的技术演进历程,解读了为什么 K8s 最终能够大获成功的原因,以及到今年 ...

  9. 从On-Premise本地到On-Cloud云上运维的演进

    摘要: 从用户的声音中,我们听到用户对稳定.弹性.透明的诉求,我们也在不断升级ECS的运维能力和体验,助力用户建立主动运维体系,赋能业务永续运行.为了让大家更好的了解和用好ECS弹性计算服务,从本期开 ...

  10. 达达O2O后台架构演进实践:从0到4000高并发请求背后的努力

    1.引言   达达创立于2014年5月,业务覆盖全国37个城市,拥有130万注册众包配送员,日均配送百万单,是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利 ...

随机推荐

  1. Java-求根号n

    平方,开根号在java中是很简单的,Math.sqrt(double n)或者 Math.pow(double a, double b),求a的b次方.但是我们可以自己想想,这些方法到底是怎么实现的. ...

  2. WebView开源库终极方案

    目录介绍 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 1.4 WebView知识点 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 常用api ...

  3. 记录--Uniapp + TypeScript 配置文档

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 0 目标 使用 uniapp  + TypeScript 为基础栈进行小程序开发 uniapp 是一个使用 Vue.js 开发所有前端应用 ...

  4. %USERPROFILE% 查看系统变量

    %USERPROFILE% =C:\Users\用户名 win+r,输入cmd 回车 在cmd窗口下输入 set 回车,可以查看系统变量(想要了解更多 set 命令请看 这里)

  5. KingbaseES V8R6 fillfactor 对于表的影响

    前言 fillfactor 表的填充因子是一个介于 10 和 100 之间的百分数.100是默认值.如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页.每个页上的剩余空间将用 ...

  6. Selenium 八大元素定位方式

    UI自动化测本质无非就是: 定位元素 -> 操作元素 -> 模拟页面动作 -> 断言结果 -> 生成测试报告. 所以我们做UI自动化的第一步就是定位元素,如果连元素都定位不到就 ...

  7. MySQL数据过滤和搜索

    操作符 AND操作符 mysql> SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id=1003 AND prod_p ...

  8. Emmet Documentation ( Actions+Filters+Customization )

    Emmet Documentation Actions Expand Abbreviation Balance 选择范围 Go to Matching Pair 匹配对应标签 在sublime tex ...

  9. Advanced .Net Debugging 6:程序集加载器

    一.简介 这是我的<Advanced .Net Debugging>这个系列的第六篇文章.这篇文章的内容是原书的第二部分的[调试实战]的第四章.这章主要讲的是程序集加载器,比如:CLR 加 ...

  10. #树形dp,直径#51nod 1812 树的双直径

    题目 给定一棵树,边权是整数 \(c_i\) ,找出两条不相交的链(没有公共点), 使得链长的乘积最大(链长定义为这条链上所有边的权值之和,如果这条链只有1个点则链长视为0). \(n\leq 4*1 ...