您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

网易严选的网关架构演进之路

时间:2020-09-17 09:26:42  来源:  作者:

严选自 2016 年诞生以来,不论从业务、技术还是体量,每年都在飞速发展。而作为严选对外服务的总入口,网关承接了主要的业务流量,保障着严选业务的稳定运行,并帮助业务进行更好的容灾和降级。

随着服务化、容器化的演进,严选 API 网关也转变角色,作为严选边缘网关,协助业务进行无感知的流量迁移。最后,严选 API 网关统一到了基于云原生的轻舟 Envoy API 网关,不断往更高级的形态演进。

总体演进历程

网易严选的网关架构演进之路

严选 API 网关演进图

如上图所示:

  • Service Mesh1.0:严选自研的基于 Consul+Nginx 的服务网格,解决了内部微服务之间的流量治理问题,统一了严选微服务体系。
    API 网关 1.0:即严选 Ianus 网关,解决了外部对服务访问的流量治理问题,并经受住了多次大促流量的考验。
  • Service Mesh2.0:严选的服务网格进化为网易轻舟(下文简称轻舟)的基于 Istio 的服务网格架构,支持更丰富的流量管控能力。
    边缘网关:在流量迁移到轻舟过程中,API 网关角色就转变为边缘网关,负责跨云的流量管控,这里也推进了云内边缘网关的建设。
  • API 网关 2.0:即轻舟 Envoy 网关,此时数据面抛弃了 API 网关 1.0 版本,与轻舟一起建设基于 Envoy 的云原生 API 网关。

API 网关 1.0(严选 Ianus 网关)——体系建设

经过产品调研和技术选型,我们最终基于 Kong 构建严选 API 网关,命名为 Ianus,开始了严选 API 网关的打怪升级之旅!

部署架构

网易严选的网关架构演进之路

严选 Ianus 网关模块架构图

如上图所示:

  • Yanxuan-Ianus:数据面组件,承接实际的业务流量。
  • Yanxuan-Ianus-PGProxy:控制面代理组件,对 PostgreSQL 写操作进行收敛,而 Yanxuan-Ianus 只保留只读权限,消除安全隐患。
  • Yanxuan-Ianus-Admin:控制面组件,提供完整的 API 配置、插件配置等操作。
网易严选的网关架构演进之路

严选 Ianus 网关集群拓扑图

如上图所示,为数据面的具体部署拓扑,通过合理的集群规划,可以做到:

  • 物理上对业务进行隔离,避免相互干扰。
  • 集群根据自身业务流量进行容量配比,有利于资源精细化管理。
  • 通过集群方式进行 API 的配置管理,理解直观、配置清晰。

数据面建设

网易严选的网关架构演进之路

严选 Ianus 网关技术栈

如上图所示,数据面具体技术栈实现为:

  • Nginx:以 Openresty 主版本依赖为准,扩充引入所需的功能模块,其中 consul-module 用于集成 Consul,统一到严选 Servicemesh1.0 的服务治理体系中;vts-module 用于统计监控信息的采集。
  • Openresty:直接引入官方的稳定版本,不做额外变更。
  • Yanxuan-Kong:引入 Kong 的主干版本,并进行额外的功能扩展,包括参数路由、集群管理、租户管理、灰度发布等等。
  • Yanxuan-Ianus:所有扩展功能插件均在此管理,适配微服务形态的地址路由等。

控制面建设

Kong 原生的配置管理,没有权限控制,没有版本记录,功能缺失较多,无法应用于生产环境。因此,我们对控制面进行了如下增强:

  • 版本信息管理

在现有配置基础之上,包装了基于 MongoDB 的配置管理,支持历史版本的回溯、版本回退、版本比较等功能。有效地避免了配置出错导致的无法回滚,或回滚不方便等问题。

  • 标准化配置流程

接入严选工单体系,提供统一的配置申请、审核、发布等节点动作,有效地对业务配置需求进行管理,在流程上对配置更新进行管控。

接入严选报警体系,在配置变更时,将变更通知到业务负责人、配置人员、网关运维人员,确保实时感知配置变动,预知风险点。

  • 灰度发布功能

将配置下发到指定的网关实例节点,进行灰度验证,最小化配置出错的影响范围。

插件能力建设

Kong 在 Openresty 上做的一项重大改进,就是对插件的规范,支持了热插拔、配置动态下发等能力。严选扩充了频控插件、路由插件、请求 / 响应转换插件等 30 余个,同时也为部分业务定制了功能插件,如 AB 实验分流插件、登录鉴权插件、身份信息提取插件等。

  • 容灾能力
  1. 增加了按百分比进行限流的能力,并支持分地域差别处理。
  2. 熔断降级能力,按需熔断部分非重点业务接口,保证业务主体功能的稳定。
  3. 频控限流能力,根据服务自身的承载能力,在网关侧配置相应阀值,避免业务被突发流量打垮。
  • 链路跟踪
    基于插件形式扩展,与严选 APM 体系集成,将网关的请求数据采集到全链路监控体系中,补齐链路节点,消除链路追踪盲点。为避免引入性能损耗,此处基于日志进行异步上报,并且采样率可通过插件配置参数进行调整。
  • AB 实验分流支持

AB 实验本身包括了多个方面的实验,而网关侧负责对入口流量的分流实验进行落地。

网易严选的网关架构演进之路

AB 实验拓扑图

如上图所示:

1、网关管理平台对接实验平台,业务在实验平台配置实验后,相应配置会下发到网关。

2、网关对命中的接口,二次访问实验平台的决策接口,获取具体实验方案。

3、支持多种方案类型,根据决策平台返回的结果执行对应的方案。

收益启示

经过严选 Ianus 网关的体系建设,我们初步达成了:

1、统一严选的 API 访问入口,超过 90% 流量跑在严选 Ianus 网关之上。

2、统一流量治理,在控制面上与微服务达成统一。

3、提供标准的容灾能力,如频控、降级、静态化等,从而业务可以进行复用。

4、充分利用 LUA 的插件能力,满足业务个性化需求。

期间线上问题进行实时的总结归档,比如 Nginx 的配置使用问题,Kong 的版本跟踪问题,PostgreSQL 的优化等等。实际落地过程中,我们没有局限于网关,而是着眼于严选微服务体系的建设。

API 网关 1.5 时代——边缘网关

随着 ServiceMesh 从 1.0 向 2.0 演进,过渡期会存在 ServiceMesh1.0(严选 VM)与 ServiceMesh2.0(轻舟 K8S) 两种类型的 ServiceMesh 共存的情形,自然面临两个 ServiceMesh 间的流量调拨问题。

为方便介绍,如下描述中“云外”代表 ServiceMesh1.0,“云内”代表 ServiceMesh2.0。

跨 ServiceMesh 访问

在各个 ServiceMesh 之上,部署自建的边缘网关(Edge Gateway),与数据中心的基础设施集成。云内即推动轻舟将原有 Istio 服务网格中的 Ingress/Egress 进行替换,统一到轻舟 Envoy 网关(即下文的 API 网关 2.0)。

网易严选的网关架构演进之路

云内云外互访流程图

如上图所示,云外采用严选 Ianus 网关进行部署,云内采用轻舟 Envoy 进行部署。以云外访问云内为例:

1、流量首先由 ServiceMesh1.0 进行管控,并路由 / 分流到边缘网关(Ianus OUT)。

2、边缘网关(Ianus OUT)进行出口流量的权限认证以及路由。

3、边缘网关(Envoy IN),对流量在 SericeMesh2.0 中进行正常的路由 / 分流。

跨环境访问

已有跨环境访问,需要 SA 打通两两 IP 之间的防火墙。一方面,每次需要对应用服务器 IPtable 做专门的配置;另一方面,所有互访配置离散到各个应用服务器,无法做集中管控。

这里将跨数据中心的访问流量,统一走到边缘网关,在网关上进行相应的认证鉴权(基于插件实现)。

网易严选的网关架构演进之路

跨环境网关拓扑图

如上图所示,跨 ServiceMesh 可以认为是东西向流量,而跨环境可以认为是南北向流量。最终支持了各大环境互访,统一业务访问方式,消除环境差异,并对流量进行集中式管控,方便统一运维!

收益启示

通过上述工作,我们完成了:

1、承接了 100% 的跨 ServiceMesh 流量。

2、无缝融合 ServiceMesh1.0 以及 ServiceMesh2.0 的流量调配机制,业务不感知流量跨 ServiceMesh。

3、统一了跨环境的认证鉴权,方便集中管控。

4、通过流量兜底等能力,实现双 ServiceMesh 热备,支持业务的高可用。

这里跨环境的支持,是云内云外互访落地过程中,根据业务的需求反馈进行整理抽象得到的,进一步扩展了网关的部署架构,丰富了网关体系。

API 网关 2.0(轻舟 Envoy 网关)——云原生

网关选型

上云之初,严选 API 网关团队也调研对比了 Kong、Traefik、Ambassador、Gloo、Istio Gateway 等的特性,目标是构建一个云原生的 API 网关。

网易严选的网关架构演进之路

云原生 API 网关选型对比

随着上云的深入,综合考虑后,决定将云内网关建设的任务交给轻舟网关团队负责,严选则从 API 网关的需求以及当前的工程建设规划出发,给出设计和建议。数据面部分,考虑了现有轻舟微服务体系的无缝融合以及主流的产品实现,选型采用了 Envoy 进行数据面的建设;控制面部分,考虑到严选需要复用现有管理平台的功能,则基于现有的 Istio 体系进行共建。

部署架构

网易严选的网关架构演进之路

轻舟 Envoy 网关模块架构图

如上图所示,整体分为控制面和数据面两部分。数据面由双方共建设计方案,落地交由轻舟负责;控制面严选跟轻舟共建,统一到已有严选 API 网关管理平台。而具体数据面集群的规划,沿用了严选 Ianus 网关的部署方式,在此不再赘述。

数据面建设

网易严选的网关架构演进之路

基于轻舟的微服务架构

如上图所示,数据面在选型时,对流量是否要经过网关和 Sidecar 两层进行了权衡,从简化调用链路,网关与 Sidecar 角色差异考虑,采用了绕过 Sidecar 的模式。此时网关部分功能与 Sidecar 功能虽有重合,但与 ServiceMesh 保持了独立,可各自演进。当前支持的基础功能包括:默认路由能力、版本分流能力、兜底路由能力等。特别地,对请求流量治理时,需要同时考虑 ServiceMesh 跟 API 网关的控制指令下发。

控制面建设

网易严选的网关架构演进之路

网关管理平台配置架构

如上图所示,为了保持严选 API 网关产品的一致性,轻舟的控制面最终需要跟当前严选 API 网关的管理平台功能对齐,复用严选 Ianus 网关管理平台的能力,包括配置管理、API 发布管控等等,确保用户体验的一致性!

网易严选的网关架构演进之路

轻舟 Envoy 网关配置下发链路

如上图所示,为整个控制面的下发链路,主要组件包括:

  • API Gateway Admin

严选网关管理平台,集成到现有的网关管理平台中,通过数据中心(严选|轻舟)的切换,实现两边配置的管理,对外展示表现完全一致。

  • API Plane

轻舟 Envoy 网关控制面配置适配层,负责接收配置数据(严选 API 配置模型),转化格式(对应到 Istio 模型),并存储到 K8S Config Store。严选负责严选适配组件的扩展开发,轻舟负责基础功能的实现。主要功能包括,网关集群获取、后端服务列表获取、插件列表 / 详情获取、API 创建 / 删除等。最终发布时,将轻舟侧代码反向同步到严选侧的 GIT 上,统一到严选的发布体系中。

  • Istio Pilot

Pilot 作为 Istio ServiceMesh 方案控制面组件,主要负责以下功能:

1、从注册中心获取服务注册信息,并转换为 CDS,EDS 下发。

2、从配置中心获取服务配置信息,并转换为 LDS,RDS,CDS 下发。

3、Envoy 静态配置的生成以及生命周期的管理。

严选 ServiceMesh2.0 解决方案中,Pilot 分饰两角,一个作为网格内服务控制面,另一个作为网关服务控制面。

插件能力建设

为支持严选 Ianus 网关长期的演进迁移到轻舟 Envoy 网关,同时参考了 Kong 和 Envoy 已有的插件能力进行落地。

Envoy 原生插件

原生 Envoy 单个功能插件的开发,涉及到整个配置链路多模块变更,丧失了插件可扩展性的优势。

落地时,对插件配置的转换进行了规范,归一到 Schema 上来,后端根据该 Schema 进行统一的 Istio 资源转换,前端管理平台根据 Schema 进行统一的配置页面渲染。开发成本缩减到一个模块,扩展优势得到体现。

LUA 扩展插件

严选 Ianus 网关下,基于 Kong 的 LUA 插件扩展能力,已经实现了较丰富的功能插件,如果直接切换到轻舟 Envoy 网关,则原有的插件都需要按照新的规范重新开发。

在 Envoy 现有插件的基础上,扩充 LUA 插件开发的能力。严选侧总结分享 Kong 现有的插件开发实践,为 Envoy 下 LUA 插件的规范提供参考,最终保证两者上手的差异最小化。落地迁移时,基本复用了严选 Ianus 网关的插件代码,插件迁移代价(不论是开发还是测试)非常低,提高了轻舟 Envoy 网关的插件建设效率。

收益启示

通过上述工作,我们实现了:

1、网关管理平台复用,保证用户习惯一致性。

2、LUA 插件复用,方便扩展功能的无缝迁移。

3、函数级别路由能力的支持,为后续 FaaS 的引流铺平了道路。

整个控制面共建过程,Kong 与 Envoy 两个技术栈取长补短,共同打造了基于云原生的轻舟 Envoy 网关体系,这也是我们未来的发展方向。

总结

API 网关 1.0(严选 Ianus 网关)在过去两年的时间中发挥的作用是举足轻重的,并且在整个严选业务迁移上云的过程中也承载着核心流量调度管控。同时在 API 网关 2.0(轻舟 Envoy 网关)崛起的过程中,Ianus 网关也给出了有价值的参考,如插件体系的建设等。在接下来的道路中,API 网关 2.0 将持续跟进云原生、Serverless 等的步伐,并不断输出反哺业界和社区,最终成为网关的引领者!

作者简介:

杨文超,2012 年加入网易,资深 JAVA 开发,致力于服务端的技术研发及方案设计工作,目前在数据平台及风控部,负责严选 FaaS 平台的建设。主导了网易严选风控系统、网关系统建设。



Tags:网关架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在微服务架构中,不同的微服务可以有不同的网络地址,各个微服务之间通过互相调用完成用户请求,客户端可能通过调用N个微服务的接口完成一个用户请求。因此,在客户端和服务端之间...【详细内容】
2021-04-02  Tags: 网关架构  点击:(249)  评论:(0)  加入收藏
严选自 2016 年诞生以来,不论从业务、技术还是体量,每年都在飞速发展。而作为严选对外服务的总入口,网关承接了主要的业务流量,保障着严选业务的稳定运行,并帮助业务进行更好的容...【详细内容】
2020-09-17  Tags: 网关架构  点击:(87)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(3)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(8)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(20)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(16)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(16)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条