网关金融场景下的大规模实践


前言

在近几年,网易数帆轻舟云原生网关在国内头部证券,银行等金融场景进行大规模实践。在落地过程中,有一些典型场景以及一些痛点问题。本章主要聚焦几个真实的场景,分享在金融场景下的云原生网关大规模实践。

金融场景下的云原生网关

私有协议扩展

越来越多的大型证券、银行等金融企业要求核心场景下的协议私有化。一部分原因是从企业角度要求,需要自主可控,另一部分也是证券及银行属于敏感企业,有一定的国家监管层面要求。

总结下来主要有三个明显的特征需求:

  • 协议定制化

  • 入口协议统一

  • 多协议转换诉求

针对性的,我们提供两个解决方案,针对入口协议统一,upstream协议多样的场景,通过复用Envoy HTTP Connection Managaer(HCM)提供的标准filter,提炼通用的generic_filter。针对性的扩展私有协议的编解码。这样实现的好处是,可以复用HCM提供的标准filter以及我们在http维度的积累。只需要扩展对应的协议即可以开箱即用的集成40余种插件。实现的架构如下图:

http_qstep_arc.png

针对多协议互转以及入口协议非HTTP的场景,考虑到协议处理维度的相同点,大部分request,response的rpc架构都有相似的流式处理,路由,可观测等能力。为了简化及抽象协议扩展的复杂度,我们提出设计通用代理(generic_proxy)的架构。主要分析generic_proxy的设计理念及设计目标,提供通用的generic_proxy的编解码的扩展点,定义通用的generic route API。通过generic proxy的实现,旨在为私有协议的扩展提供通用性。其核心设计架构如下图:

qstep_generic_proxy.png

插件扩展能力

在金融场景下,会有一些业务定制诉求。从敏捷开发角度上考虑,需要支持一定的快速扩展能力,满足业务敏捷开发;同时,由于存在一些敏感合规的要求,业务会要求具备自身定制特殊需求的能力。因此,对云原生网关提出了以下要求:

  • 敏捷扩展

  • 插件隔离

  • 动态生效

从插件开发人员和插件使用视角,我们抽象插件扩展。形成插件扩展解决方案,流程如下:
插件扩展.png

从设计维度,本着多语言,无侵入,高性能,可视化的原则,我们从以下几方面进行扩展

rider.png

业务平滑上云

金融企业作为敏感行业,稳定性压倒一切。因此,在云原生迁移过程一定不是一蹴而就的,对于网关提出,我们如何帮助业务顺利完成云原生改造,协助业务完成平滑迁移。
业务平滑上云的痛点.png
迁移过程中,主要有三点痛点:

  • 注册中心复杂

  • 服务模型不统一

  • 存量网关迁移困难

基于以上痛点,我们从三个方面解决业务平滑上云的痛点,整体架构如下:

业务平滑上云.png

其核心主要有几点:

  • 通过slime mesh-registry模块实现对接多注册中心能力,已经集成zk,eureka,nacos等注册中心。

  • 提供丰富的upstream管理及路由能力

  • 抽象服务概念,统一k8s svc、静态ip、eureka app以及dubbo interface

  • 通过mesh-registry对接多注册中心,同步ServiceEntry资源

  • 支持同协议多服务发布,用于流量灰度

  • 提供权重分流、版本分流的能力,支持服务金丝雀发布

  • 通过sync-service 对接同步不同注册中心的配置数据,支持对接DB、Zookeeper等配置结构化数据,用于业务原网关配置迁移至云原生网关。

全链路灰度

在实际开发过程中,会存在多版本的发布及上线。复杂的微服务集群,如何能够快速拉起一套全链路的灰度逻辑环境,用于线下全链路测试、生产版本问题定位等是一个比较棘手的事情。在传统的微服务架构下,业务会通过修改自身代码,将一定特征的流量自主路由至不同版本。或者提供一套独立的环境,用于问题复现。总之,两种方式都不够轻量,涉及链路及交付周期等问题。

因此,全链路灰度的提出,可以将特征请求独立在不同的完全逻辑隔离的运行时环境,能够响应快速迭代、测试、问题复现等场景。其示意图如下:

全链路灰度场景.png

对于云原生网关来说,在全链路灰度场景下,需要关注到三个核心点:

  • 标签同步:能够同步服务实例,支持多注册中心的实例标签同步。

  • 条件匹配:能够支持对入口流量根据不同的条件进行流量打标。

  • 流量负载:根据不同的流量标签,将流量目的路由到对应标签(颜色)的实例。其流量架构如下:

我们通过slime mesh-registry同步不同注册中心的实例,并通过Header Rewrite能力进行路由匹配条件的重写,将匹配后的信息增加额外的实例颜色标签。这一流程,从处理上为入口流量染色。之后进入核心负载均衡阶段,通过Envoy LB Subset的能力,实现染色路由。完成全链路灰度的第一跳灰度。

标签染色.png

网关多租户及隔离性

租户隔离是在企业网关中非常重要的特性,特别是在金融场景下,例如银行,其下属有众多分行;而在证券企业中,又有应用分级。网关需要具备多租户的配置隔离能力,针对不同系统之间的配置互不影响。

在传统的网关实现中,只能通过部署不同的网关集群,业务进行不同集群的划分进行强物理隔离。如下图
物理隔离.png

但是这种隔离会存在一定的资源浪费,集群之间的流量不均等,有的业务集群流量很低,但是因为其系统的特殊性,政策要求必须对齐进行配置隔离以避免相互影响。我们从Envoy的实现角度,进行优化。Envoy的核心就是代理,其最主要的就是确认流量,并将流量转发到对应的upstream。

下图是Envoy作为Proxy的核心流程,Envoy会对每一个监听器抽象一层Listener,此Listener可以通过动态的方式扩展并对外暴露。流量通过对应的Listener进入核心L4,L7 Filter后,通过负载均衡策略路由至不同的cluster(即Upstream)

proxy处理流程.png

因此,我们可以通过抽象不同的Listener为逻辑网关,每一个Listener上的配置相互独立。基于此,用户可以选择性的在同一个物理网关集群上抽象不同的逻辑网关,提供不同的网关分组。其逻辑图如下:

物理隔离.png

总结与展望

在云原生网关的探索上,我觉得还可以从以下三个方面进行后续的演进。

  • 全能力网关建设: 网关逐步被大家作为南北流量的通用性所接纳,不止南北流量,当前网关也会结合编排等能力,多协议转换能力被用于微服务体系。

  • 生产级别稳定性持续建设:从细粒度观测 -> 精准化告警 -> 快速恢复 -> 流量无损 四位一体构建监控体系;从事前阶段,提升系统稳定时间为目标,尽可能在不确定环境中降低事故发生率,事中阶段降低系统不稳定时间,事故发生尽可能快速恢复角度持续优化立体化监控,支撑事故发生的问题焦点快速发现。

  • AI赋能:通过沉淀专家经验,结合AI洞察能力,尽量做到问题前置,洞察故障。


文章作者: xyl
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xyl !
评论
  目录