会员业务出口网关的设计与实现

01#

  背景介绍  


1.1 出口网关是什么

出口网关(Egress Gateway)是一种部署在云或企业网络中的网络组件,它控制着从内部网络(如企业内网、内部微服务网络)流出到外部网络(如公共互联网或其他外部服务)的流量。一般来说,出口网关是内部服务与外界交互的一个流量出口,实现对外请求的协议转换、流控、监控等通用功能。

相比于传统的入口网关(Ingress Gateway),出口网关侧重于对出站流量进行集中管理与安全控制。例如在爱奇艺对外合作业务中,用户通过入口网关访问爱奇艺内部服务,爱奇艺内部服务再通过出口网关去调用第三方的服务接口,来实现对出站流量的统一管理。


1.2 为什么要做出口网关

1、在爱奇艺会员对外合作业务中,需要访问合作方的 API 接口,随着安全要求的提升,越来越多的合作方对调用方的IP地址实行白名单策略,并且爱奇艺的服务都是在爱奇艺云服务平台进行的部署,业务更新比较频繁,每次更新都会更改IP地址,不可能在每次更新时让第三方进行IP白名单的同步,因此需要实现调用外部接口的统一出口网关。

2、在传统的网络架构下,需为每台应用服务器实例分别申请外网访问权限。实际运维中,这种方法因涉及到服务扩容或迁移操作时的访问权限更新问题,易造成疏漏,从而导致故障,因此需要通过给出口网关配置外网访问权限,内部服务统一通过出口网关访问外网,来规避此问题。

最开始设计出口网关的时候是使用的 Nginx 正向代理来实现此功能,这个方案的问题在于每次新增一个接口都需要调整 Nginx 的路由配置,并且 Nginx 的路由分发只支持静态配置,不能动态增减路由,这就需要在每次配置之后进行 reload,这会增加人工运维的成本,同时 Nginx 正向代理也无法实现流量隔离。

因此,经过调研我们采用 APISIX 作为网关服务的核心,通过 APISIX 插件实现安全防护、流量管控、协议适配等功能,并接入监控系统,同时通过安全插件接入安全团队提供的安全控制系统,并且实现了一个界面化的地址转换服务来实现从 Origin URL 到 APISIX URL 的转换,以便开发人员使用。

1.3 使用出口网关带来的收益是什么

1.3.1 提升研发效率

1、使用网关的开发人员不需要关注出口网关如何实现具体的路由规则,也不需要了解 APISIX 的实现原理,只需要在出口网关管理系统界面中使用地址转换服务,将原本的请求地址转换为网关请求地址,再使用网关请求地址发送请求,即可完成从原始的直接请求方式到网关代理请求方式的转变,全程自助化。

2、通过现有的 APISIX 插件实现安全防护、流量管控、协议适配等功能,避免重复造轮子。

3、APISIX 支持开发人员通过开发自定义组件的方式扩展API网关能力。

1.3.2 降低沟通成本

使用出口网关可以为合作方提供固定的公网IP地址,而无需关注内部服务的具体部署方式,避免大量无效沟通。

1.3.3 提升安全性

在出口网关中接入了安全团队提供的安全控制系统,可以对访问外部服务的请求进行更细粒度的安全审计和控制,防止敏感数据泄漏。

02#

  技术设计与实现  


2.1 整体架构

出口网关的整体架构如下图所示:

ab2888355f27166acb1cd08a9e09aa54.jpeg

出口网关的控制面主要由管理界面、管理接口与监控系统组成,管理界面提供极简接入与配置界面功能,并且基于 APISIX 的网关配置服务完成配置分发功能,监控系统完成 API 请求监控数据的收集和业务告警功能。

出口网关的数据面主要是由基于 APISIX 的网关核心构成,基于 APISIX 的插件式结构,可以更方便地进行功能扩展,并且支持无状态部署,可在横向上任意扩展,从而提升系统承载能力。同时,对接安全控制系统能有效拦截潜在的不安全请求,提升系统的安全防护能力。

2.1.1 控制面

通过管理界面与管理接口,开发人员可以获取访问出口网关的请求地址,并轻松地完成出口网关的配置。APISIX 通过 admin API 或者 dashboard 可以在毫秒级别内通知到所有的数据面节点,它依赖于 etcd 来作为其配置中心,并且依靠 etcd 集群来确保系统的高可用性。管理接口实际上是对 APISIX admin API 的封装,为了进一步提高系统的易用性,我们并没有直接使用 dashboard 做可视化界面,而是在管理接口的基础上做了一个可视化界面。

02e7045422497569bf7d71a36043b4f5.jpeg

配置交互图

管理接口

管理接口的功能如下:

1) 网址转换接口:将外部接口转换为网关地址

2) 网址查询接口:通过网关地址查询外部接口地址

管理界面

在系统一期中,只提供了通过管理接口进行配置的方法,在二期中为了提升易用性,新增了管理界面,管理界面实际是对管理接口的调用与可视化。

cd44ab7fca70f4347d3a9674b15b3028.jpeg

2.1.2 数据面

数据面功能的实现主要是基于 APISIX 本身的功能。APISIX 以 Nginx 的网络库为基础,(弃用 Nginx 的路由匹配、静态配置和 C 模块),使用 Lua 和 Nginx 动态控制请求流量,通过插件机制来实现各种流量处理和分发的功能:限流限速、日志记录、安全检测、故障注入等,同时支持用户编写自定义插件来对数据面进行扩充。

API路由

选用 APISIX 做为网关核心主要是因为它的高性能:

  • APISIX 的路由复杂度是 O (k),K 指 URI 长度,和路由数量无关,例如有一百万条路由,APISIX 路由的时间复杂度都是一样的;

  • APISIX 的 IP 匹配时间复杂度是 O (1),不会随着大量 IP 判断而导致 CPU

    资源跑满,不管有多少IP都是一次命中。

功能组件

出口网关的功能组件是基于 APISIX 插件完成的。主要使用了安全防护、流量管控与协议适配相关功能的插件,并自定义了一个安全插件以接入安全团队提供的安全控制系统。

183d5ce67cbf55bf02b93cd61614d6f6.jpeg

APISIX插件库:

https://apisix.apache.org/zh/docs/apisix/plugins/batch-requests/

安全防护:

  • ip-restriction:IP 限制插件,可以通过将 IP 地址列入白名单或黑名单来限制对服务或路由的访问。

  • ua-restriction:可以通过将指定User-Agent列入白名单或黑名单的方式来限制对服务或路由的访问。。

  • referer-restriction:允许用户将Referer请求头中的域名列入白名单或黑名单来限制该域名对服务或路由的访问。

  • consumer-restriction:允许用户根据 Route、Service、Consumer 或 Consumer Group 来设置相应的访问限制。

  • key-auth:用于向 Route 或 Service 添加身份验证密钥(API key)。

  • jwt-auth:用于将 JWT 身份验证添加到 Service 或 Route 中。

流量管控:

  • limit-req:使用漏桶算法限制单个客户端对服务的请求速率。

  • limit-conn:用于限制客户端对单个服务的并发请求数。当客户端对路由的并发请求数达到限制时,可以返回自定义的状态码和响应信息。

  • limit-count:使用固定时间窗口算法,主要用于限制单个客户端在指定的时间范围内对服务的总请求数,并且会在 HTTP 响应头中返回剩余可以请求的个数。

  • request-id:通过 APISIX 为每一个请求代理添加 unique ID 用于追踪 API 请求。

      协议适配:

  • grpc-transcode:可以在 HTTP 和 gRPC 请求之间进行转换。

  • response-rewrite:支持修改上游服务或 APISIX 返回的 Body 和 Header 信息。

2.2 易用性设计

原生的 APISIX admin API 入参比较复杂,配置难度比较高,难以快速上手,我们基于 APISIX admin API 实现了一系列管理接口,简化了入参的复杂性,可以自助化配置。通过配置接口配置只需要请求地址以及相应的校验参数,所用插件都是默认化配置,接入出口网关的开发人员只需要关注于请求地址的转换就可以了。原始  APISIX admin API 配置请求参数如下,可以注意到其配置过程是比较复杂的,不了解 APISIX 插件的开发人员难以了解具体插件配置参数的含义是什么。

配置 Upstream:

6d4a37dd3ead5404558c36742b960daa.png

配置 Router:

8972274409f9df0ebda2a87e5f1715d9.png

一键化接入界面:

ae441ba32009e65966d8e6f0156301fa.jpeg

2.3 高可用设计

出口网关作为一个基础组件,高可用性一直是非常重要的部分。

2.3.1 异地多活

出口网关采用多实例、多机房、多地域部署的方式,通过故障自动切换机制,确保服务不中断。同时也可通过自动化弹性应对突发流量。

2.3.2 流量隔离

在实际应用中,由于各业务的流量不一致,某些高流量业务可能会抢占大量资源,从而影响其他应用。出口网关通过令牌方式,将不同业务的流量进行区分和隔离,并针对不同业务设定限流,最大程度保障各业务正常运行。

2.3.3 安全防护

出口网关提供了一个集中点来监控所有出站流量,可通过出口网关更好地实施监控和记录对外请求日志。这对于跟踪数据流向、检测异常行为等非常有帮助。实际做法中,我们将请求日志通过安全团队的安全控制系统进行分析判断请求是否存在异常,以及触发后续流程。

2.3.4 运行监控

出口网关将运行数据实时上报到监控系统,可以从请求成功率、平均响应时间、最大响应时间等多个维度去监控对外的请求情况,发现请求异常,第一时间进行告警。

2.4 可扩展性设计

一个设计良好的基础组件,除了能提供强大的基础能力,还需要有良好的扩展能力。出口网关系统的可扩展性主要体现在 APISIX 本身的可扩展性上,也就是服务节点的无状态部署与 APISIX 插件的可扩展性。

2.4.1 服务节点无状态部署

由于服务节点无状态,可以在内部服务对外请求激增时,简单地通过增加节点数量来扩展系统整体的吞吐量,而不必担心状态同步的问题,这使得出口网关很容易适应流量的变化,保持高适应性,简化运维管理。

由于不依赖本地状态,当节点发生故障时,可以快速替换受影响的节点,无需繁琐的状态迁移,保证了服务的快速恢复和高可用性。此外,无状态节点更容易实现跨云、多区域部署,增强了服务的灾备能力,并且结合K8s可以实现横向弹性自动扩缩容。

2.4.2 APISIX 插件与自定义插件

APISIX 目前已发布了大量插件,并且支持自定义插件,同时支持插件的热加载。

APISIX 插件的实现主要依赖于 OpenResty 对 Nginx 的各个生命周期的钩子函数,允许其在请求生命周期的不同点进行干预或增加额外的功能。并且可以通过自定义插件的方式接入现有的系统,避免二次开发,极大地提升了系统的可扩展性。自定义插件方式:‍https://apisix.apache.org/zh/docs/apisix/plugin-develop/‍

此外,相比于 Nginx 在修改配置后,只有reload之后才会生效的做法,APISIX提供了热加载方式。APISIX 热加载主要依赖于 APISIX 的机制和 OpenResty 的特性:由于 APISIX 服务节点是无状态的,这意味着业务处理不依赖于具体的工作进程(worker process),插件的配置都存储在共享内存与外部数据存储中(如 etcd),因此新请求会根据最新的配置来运行插件逻辑,而不依赖于特定的worker进程状态(正在运行的请求还是老配置)。此外,APISIX 的插件系统是模块化的,允许单独加载和卸载 Lua 模块(即插件),当插件本身发生变化,APISIX 可以仅重新加载有变化的插件模块,而无需重载整个系统。

2.5 整体效果

压测性能:单实例 QPS 可以支持 65k+

系统稳定性:99.99%

服务支撑:已接入17个系统,共计600+外部接口

57210b2fca4e6a6374b2ddb01db02183.png

也许你还想看

爱奇艺广告智能算力探索与实践

奇异果TV热修复实践

低延时直播系统在欧洲杯的实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547078.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

宠物浮毛难清理,希喂、小米、美的宠物空气净化器该选哪款?

养猫养出病来说的就是我了。 养猫之前幻想的一人一猫幸福生活还没一个月,我就进了医院。我自认为是很爱干净的人,养猫后打扫得更勤快了,早晚都给猫咪梳毛。平时卫生也没少搞,家里也是很干净的,实在不明白为什么会过敏…

点赞10万+,1分钟教会你,用AI生成的宠物带娃视频

今天刷到了这样的宠物带娃视频,最近这种视频爆火,出现了很多爆款,今天就拆解一下,教大家学会这种视频用AI如何生成。 我们先看一下这类视频的数据,很多账号都在做,对于不了解AI的人来说,会觉得…

1小时极限速通MC局域网联机:PCL2 + Zerotier局域网联机方案

目录 前言 你需要在开始之前做什么? 你需要什么 你需要下载什么 谁,需要做什么? STEP I:创建/加入一个子网 创建一个子网(子网的维护者做) 加入一个子网(其他人做) 现在... …

论文笔记:基于共注意网络的多模态假新闻检测

整理了AAAI2023 Multimodal Fusion with Co-Attention Networks for Fake News Detection)论文的阅读笔记 背景模型MCAN框架特征提取特征融合 实验主实验消融实验可视化 背景 具有文字和视觉内容的假新闻具有更好的讲故事能力,人们很容易被这样的假新闻欺…

python 图片加文字 文字自动上下左右居中 自动换行居中对齐

一.实现效果展示 二.代码 # -*- coding: utf-8 -*- # Time : 2024/9/26 17:22 # Author : Cocktail_pyfrom PIL import Image, ImageFont, ImageDrawdef split_string(s, num_parts):length len(s)chunk_size length // num_partsremainder length % num_partsparts […

新能源背景下,电瓶车充电现状的分析及管理方案

【摘要】:在新能源日益普及的背景下,社会安全问题显得尤为突出。以电瓶车为例,其户外停放难、充电难的问题愈发凸显,成为社会各界关注的焦点。尤其是“飞线充电”和“楼道充电”等不规范行为,更是屡见不鲜,…

脚手架是什么?详细版+通俗易懂版!!!!!!

脚手架(Scaffolding)在软件开发领域,特别是在前端开发和全栈开发环境中,是一个术语,用来描述一个辅助工具或框架,它旨在帮助开发者快速搭建项目的基础结构和开发环境。这些基础结构可能包括项目的目录结构、…

Halcon基础系列1-基础算子

1 窗口介绍 打开Halcon 的主界面主要有图形窗口、算子窗口、变量窗口和程序窗口,可拖动调整位置,关闭后可在窗口下拉选项中找到。 2 显示操作 关闭-dev_close_window() 打开-dev_open_window (0, 0, 712, 512, black, WindowHandle) 显示-dev_display(…

图片转字符画

在Github上看到的一个有趣的开源项目,实现将图片转换为字符画,这样,不能贴图片的场景下可以用字符画替代。 Github演示地址: https://505e06b2.github.io/Image-to-Braille/ Github源码下载地址: https://github.c…

【C++与数据结构】搜索二叉树(BinarySearchTree)

一、概念: 二叉搜索树又称为二叉排序树,因为它具有以下性质: 1、如果二叉树的左子树不为空,那么它左子树的任意一个节点的值都小于根节点。 2、如果二叉树的右子树不为空,那么它右子树的任意一个节点的值都大于根节点。…

C++类和对象第一关

一:类的定义 (一)类的定义 (1)类的定义格式: class name{ // 类成员变量 // 类方法(函数) }; class是定义类的关键字,name为定义的类的名字,后面的花括号…

助力降本增效,ByteHouse打造新一代云原生数据仓库

随着数据量的爆炸式增长、企业上云速度加快以及数据实时性需求加强,云原生数仓市场迎来了快速发展机遇。 据 IDC、Gartner 研究机构数据显示,到 2025 年,企业 50% 数据预计为云存储,75% 数据库都将运行在云上,全球数据…

DK5V100R10SL贴片TO252功率12V4.3A同步整流芯片

概述DK5V100R10SL是一款简单高效率的同步整流芯片,只有A,K两个功能引脚,分别对应肖特基二极管PN管脚。芯片内部集成了100V功率NMOS管,可以大幅降低二极管导通损耗,提高整机效率,取代或替换目前市场上等规的…

双十一数码产品有哪些? 2024年度双十一数码好物推荐

每年双十一来临都是更新手机、平板或者电脑、耳机的绝佳时机。年末也让一年来发布的新机器有了更大的优惠空间再加上平台补贴,绝对是实打实的划算。今天给大家总结了几款双十一价格刷新新低的数码好物,真的要看过再下单,不然买贵就吃亏了。 …

UGUI动态元素大小的滑动无限列表

效果与使用说明 效果 可以滑动无限列表(严格来说也和常规的不太一样)可以通过曲线调整元素大小 使用说明 列表元素位于脚本挂载处的直接子级最大的元素位于脚本挂载元素的pivot处水平列表的对齐依据是所有元素pivot都在一条线上默认在最左侧和最右侧元…

kafka下载配置

下载安装 参开kafka社区 zookeeperkafka消息队列群集部署https://apache.csdn.net/66c958fb10164416336632c3.html 下载 kafka_2.12-3.2.0安装包快速下载地址分享 官网下载链接地址: 官网下载地址:https://kafka.apache.org/downloads 官网呢下载慢…

基于Node.js+Express+MySQL+VUE实现的计算机毕业设计共享单车管理网站

单车信息选择骑行 骑行状态留言公告/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 功能如下: 一、开发目标 在共享经济日益盛行的今天,共享单车作为一种绿色、便捷的出行方式,已经深入人们的日常生活。然而,随着共享…

解读滁州少儿自闭症寄宿制学校:为孩子重新定义未来

为自闭症儿童点亮希望之光:星贝育园自闭症儿童寄宿制学校的温暖之旅 在繁华与喧嚣交织的都市一隅,广州的星贝育园自闭症儿童寄宿制学校如同一座温馨的灯塔,为那些在社交与沟通海洋中迷失方向的小小航船指引着方向,重新定义了他们…

win 录屏软件有哪些?5个软件帮助你快速进行电脑录屏。

win 录屏软件有哪些?5个软件帮助你快速进行电脑录屏。 在 Windows 系统上录屏操作十分常见,无论是制作教程、记录游戏片段,还是录制会议和演示文稿,都需要一个高效、稳定的录屏软件。以下是五款适合 Windows 系统的录屏软件&…