基金交易场景下,如何利用 Apache APISIX 来稳固 API 安全

news2025/3/3 18:44:56

王晔倞,Apache APISIX Committer,公众号「头哥侃码」作者。

背景介绍

金融领域的企业中,安全是非常重中之重的因素。 通常各类金融企业都会花费大量成本去采购安全相关的设备和硬件,基金管理相关企业更是如此。

根据相关国内基金管理行业发展现状分析报告中可以看到:“我国基金管理行业在经历野蛮生长、严监管规范以及次贷危机冲击等阶段后,目前已经形成了监管规范化不断加强、公司格局完善的局面。在大众投资理念转变的背景下,基金管理行业规模稳步增长,行业发展空间有望持续扩大。”

从现实数据来看,大环境和人们理财意识的逐渐增强,使得基金行业在业务发展的过程中,对于技术业务上的呈现也开始有着更高的追求。

比如稳定性,这里说的稳定性并不是应对类似双十一那种突增流量时的业务表现,而是保证业务长久线上的稳定性和持续性。
其次就是有效性和准确性,它与稳定性是相辅相成的。因为金融领域有着非常严格的交易时间,尤其是证券和基金行业。大量的交易都会发生在固定的时间段内,因此相关时间内的有效性和准确性是必须要保障的。即业务场景下允许系统慢,但不允许崩。

最后就是开头内容中提到的严监管规范,也就是政策层面的监管强度。因为行业的特殊性,在业务安全和企业治理中,很多时候它是需要考虑行业色彩和大环境的。

得益于这些业务色彩,我们也会对基金行业的一些业务架构产生兴趣,比如他们是运用哪些方式来保障高监管要求下的业务安全。在这里,我们选取了目前使用 APISIX 的一家基金行业用户,带来他们的业务网关架构演进与基于 APISIX 进行的业务安全实践细节。

行业现状与痛点

这家公司是从 2012 年开始搭建相关交易系统,API 规模大概在 12000+ 数量,包含 PaaS、BaaS、两地三中心、安全、运维、中间件和 DevOps 平台等等。公司业务的整个系统架构演进大体经历了三个阶段。

在业务刚起步阶段(1.0 时代),业务架构还非常单一,基本是能应对基金买卖的简单场景即可,属于单体架构模式。随着后续业务的扩充和国内市场环境的影响,架构也随之进行了初步的更新迭代。在这个阶段下,开始对业务进行了简易分割。
在这里插入图片描述

上图就是当时最简单的架构模式,相信大家对这种架构类型都比较熟悉。即有一套简单的前端配置,包括应用、网站等等。从整体来看,业务模型比较简单,因为只需搭建好交易体系即可,搭配上完整的支付业务和鉴权服务。后端主要是去维护相关的基金交易数据,然后存储到数据库里。

当然这里的鉴权服务并不是指网关层面的呈现,而是基金业务与其他第三方基金公司之间的连接鉴权。比如跟外部的基金业务对接时,需要进行双方数据的对接,这种时候就需要有一些 Token 去进行鉴别和限制等等。

当时还没有网关的概念。在这个架构下类似现在网关概念的就是图中的 HSB(服务总线),它其实就是网关的前身,主要用来控制南北向流量。

人们总说,在公司业务或者行业发展过程中,总会出现一些节点来加速或者改变某个行业的进程。2015 年国内股市的业务爆发,也导致了基金业务公司开始进行业务扩展。市场方向的快速推动下,业务也开始加速前进。

这种情况下,该基金公司的后端业务就需要进行大量的变动,开始演进到如下图所示的架构类型(2.0 时代)。
在这里插入图片描述

如上图红线圈出来的地方,可以明显看到,之前的服务总线模块开始变得复杂,各种业务组件纷纷出现。之所以变得复杂,是因为在业务野蛮生长阶段时,它会因为一些需求现状各自进行产出。

举个最简单的例子,就像各地的健康码系统一样,各省都不一样,甚至有的同一个省的不同地市还会有单独的系统。因为在产出过程中,我们会发现「自己造自己家的烟囱」是最快最快速的方式。

那么这种情况下就衍生出另外一个问题,也就是在系统发展过程中,一定会伴随所谓的技术债务问题。就是不同负责人在位时,所选择的技术栈或系统模型各不相同。

这个过程中就会出现一些业务库的拼装,因为当下的服务场景开始变得复杂。所有的这些新增动作等都需要通过后台系统的组合,来完成前端的某一个动作。因此这种组合的过程中将,势必要用到很多种类的组件以及经历几次产品更替,系统就开始变得复杂和繁重。

上述业务现状的演变下,不少问题就开始涌现。如下图所示,从三个层面进行了一些汇总。
在这里插入图片描述

当然除了上述提到的这些在外,在业务层面还会有其他一些问题。比如:

  • 技术成本开始变高,整体性能有所影响。 网关技术栈的不统一,导致需要同时维护多种协议与微服务框架,开发维护成本较高;随着业务的规模越来越大,像大部分金融企业都选择基于 Java 做中间件,在处理大流量 QPS 时所需的服务器资源越来越多,整体性能冗杂。
  • 微服务框架的侵入性强,存在安全隐患。 当下无论是 API 治理、审计还是鉴权,基本都依赖微服务框架和 SDK 来进行。因此每次版本的更新,不仅带来运维风险,还容易引发大量内部业务矛盾。
  • 缺少更高阶功能的需求满足。 如果一个架构中,业务系统网关都是自研的,那么任何功能都要从 0 进行开发编写,这个过程中需要考虑一些时间成本问题,同时在业务层面可能只会实现相对简单的功能,比如缺少服务发现和部分监控指标等功能。这对于后续的业务发展就会造成一些技术上的瓶颈。

技术选型与架构更新

在后续业务发展过程中,这家基金公司在 2020 年时开始对网关产品进行单独选型。

在 2018 年左右时,Spring Cloud 其实非常盛行,金融行业内有很多企业都开始使用 Spring Cloud Gateway。同时金融行业的架构中,大多都是基于 Java 进行的,所以开发人员中大多都是熟悉 Java 的。

而当时这家基金公司并没有跟随行业的普遍方案,去选择 Spring Cloud Gateway,而是最终确定了Apache APISIX 作为他们的网关。之所以没有选择 Spring Cloud Gateway,主要原因如下图所示。
在这里插入图片描述

当然除了上述原因外,还有一些实际大环境的因素。2019 年左右,P2P 事件开始曝光,很多 P2P 公司倒闭。当时整个金融领域尤其是基金交易领域,发生了翻天覆地的变化。各家企业都开始进行成本压缩,所以在架构选型中,还需要面对成本压缩的考虑因素,去进行选型。

因为公司要压成本,同时也开始要求把一些非交易系统放置到云上。作为技术人员,这种情况下就会考虑如何让上云时更方便更高效,因此面临这种场景时,技术栈能被统一地越少越好。所以他们就开始往云原生方向的网关产品去观望。最终,结合业务表现和技术栈统一相关的成本因素,最终选择了 APISIX。
在这里插入图片描述

基于 APISIX,该基金公司的业务架构更新成了如下图所示的全新模块(3.0 时代),这其中将架构分成了前中后模式,并对代码进行了分层。
在这里插入图片描述

从外部进入的流量(南北向流量)经过 APISIX 后,可以进行一些安全控制、流量管控和准入控制(比如灰度)等。而在应用层与业务层以及业务层与基础层中间,会用 APISIX 来解决东西向的流量。由于该基金公司当时大部分的系统是运行在 VMWare 虚拟机上,只有测试的交易系统是跑到 K8s 上的,所以他们的 CI/CD 比较复杂,因此 APISIX 在这里处理东西向流量时,主要是进行统一入口、监控报警、分流和鉴权相关操作。

基于 APISIX 的业务安全实践

微服务治理

微服务主要解决东西向流量。APISIX 在进行整个微服务治理的过程中,主要会帮助企业解决统一入口、API 配置管理、分流鉴权、服务监控、协议转换等问题,具有分布式和可拓展的特性。

前文我们提到过该公司业务架构中也存在比如鉴权模块,但当时他们用 Java 的一些扩展包进行了自研。但发展到后期,业务开始进行统一时,各个平台都需要对接进来,问题就开始出现了。

因为除了产品、中间件等等业务平台,还包括账户中心等等,这些之间的相互联动,不止需要进行HTTPS 的相关加密,还会存在一些单点必要需求等。

为了满足这些业务间联动和相关加密处理需求等,该基金公司就利用 APISIX 在中间件部分(APISIX 作为网关是其中一部分)作为单点入口,去处理这些联动和安全层面的需求对接,如下图所示。

在这里插入图片描述

其中在服务治理层,会涉及到一些协议转换,而 APISIX 具备成熟的服务治理框架去对接 Dubbo 以及进行 MQ 服务之间解耦。APISIX 的基础协议支持的类型非常多,包括 HTTPS、MQTT、Dubbo、gRPC 和 WebSocket 等多种类型。
比如在实际使用时,可以通过 APISIX 内置的 dubbo-proxy 插件来实现代理 Dubbo 协议,无需再进行相关配置的从 0 到 1,而是直接开箱即用,轻松地将 Dubbo Service 发布为 HTTP 服务。

认证授权

身份认证在日常生活当中是非常常见的一项功能,大家平时基本都会接触到。比如用支付宝消费时的人脸识别确认、公司上班下班时的指纹/面部打卡以及网站上进行账号密码登录操作等,其实都是身份认证的场景体现。可以说身份认证是保证基金交易安全稳定运行的重要因素之一。

之前该公司是利用 Java 的一些自研组件或者程序逻辑等来作为「类似网关作用」进行相关的认证授权。但整体会出现负载压力大,且不支持流量控制和灰度等能力,同时还缺少相关项目维护人员。

在使用 APISIX 后,他们开始利用 APISIX 去提供认证和授权的相关能力,来帮助自家业务进行统一管理和高效运维。目前 APISIX 所支持的插件也已达到 80+,其中也内置不少认证鉴权相关的插件。

在这里插入图片描述

比如借助 APISIX 内置的 jwt-auth 插件或 openid-connect 插件,在业务内部和外部之间进行一些认证交互,实现如下一些场景:

  • 应用级:内部应用通过应用级 AT 到账号系统,然后根据用户 ID 等数据直接查询用户的信息,无需用户授权;
  • 用户级:用户授权应用,应用通过用户授权生产的用户级 AT,到账号查询用户的 openid、unionid 和头像等用户信息。

SSL 证书

在系统建设的初期,该公司架构基本都是基于 HTTP 协议或一些自定义协议进行互相调用。但是通过 HTTP 协议传输的是明文数据,不会对数据进行加密。但在基金交易系统中,无论是因为政策监管还是安全需要,即使在内网也需要通过 HTTPS 访问数据。

在之前的安全功能呈现上,该公司都是直接采购安全类产品进行防护,但是使用过程中必然少不了三方的维护等环节。在架构演进过程中引入 APISIX 后,刚好解决了该场景下的一些需求。从而方便根据业务需要进行灵活调整,同时在成本层面抛弃防火墙等产品,优化了运维流程,最重要的是也满足了相关监管需求。

比如 APISIX 在 SSL 证书功能上就支持单一域名、泛域名、多域名和单域名多证书的多种场景。
在这里插入图片描述

APISIX 支持通过 TLS 扩展 SNI 实现加载特定的 SSL 证书,以实现对 HTTPS 的相关支持。启用该特性后,将允许客户端在服务器端向其发送证书之前向服务器端发送请求的域名,服务器端将会根据客户端请求的域名选择合适的 SSL 证书发送给客户端。

所以在安全相关的功能准备中,很多东西都是顺应着大环境的要求和一些架构更新过程中的业务统一而进行的。并不是说因为有了 APISIX 这种类型的云原生网关,才开始去重视业务上的安全问题,而是说有了 APISIX 网关,可以让企业业务安全更高效更简易地进行管理和操作。

总结

以上就是从基金交易业务的场景下,带来了泛金融行业在进行业务架构迭代过程中的变更与相关安全实践。在业务机构更新的过程中,如果没有类似 APISIX 这种网关中间件的能力加持,或许就没法轻易地满足业务上的高速发展,也没有办法轻易解决行业野蛮增长过程之后的复杂技术债问题。

所以不管是企业治理还是稳固业务安全,选择一个健康持续发展的中间件产品,是非常有利于业务架构的升级与后续拓展的,同时可以最大限度地帮助企业去解决技术债务。为什么选择技术债务这个点,因为它是我们在社区通过一些企业用例反馈之后,发现的一些企业选择 APISIX 的痛点之一。

纵观该基金企业的整个系统演化过程,都是用业务去推动选型。通过对性能、可拓展性以及安全等层面,Apache APISIX 都用更实际的数据和效果证明了它作为网关和中间件属性的作用,在保证性能的同时,也为金融行业的业务安全带来了最稳定的保障。

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

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

相关文章

在window和Linux上使用docker安装RocketMQ

1.创建namesrv服务 拉取镜像 docker pull rocketmqinc/rocketmq:latest启动 namesrv docker run -d -p 9876:9876 -v D:/programCoding/Docker/rocketmq/namesrv/logs:/root/logs -v D:/programCoding/Docker/rocketmq/namesrv/store:/root/store --name rmqnamesrv -e &quo…

信息论随笔(二)信息熵及其性质

回顾 上次讲到自信息量,也就是用来表示一个发生概率为p的事件含有的信息量,或者说不确定度。一个事件的发生的概率越小,它的不确定度越大,含有的信息量也就越大。 信息熵 那么如何来衡量一个系统(多个事件以不同的概…

Java项目:眼镜商城系统(java+SSM+JSP+jQuery+Mysql)

源码获取:俺的博客首页 "资源" 里下载! 项目介绍 管理员角色包含以下功能: 管理员登录,管理员管理,管理商城会员,新闻公告管理,眼睛类型管理,城市信息管理,连锁配镜店管理,眼镜商品管理,用户订单管理,管理用户的评价信息等功能。 …

【数据库数据恢复】SQL SERVER数据库MDF (NDF)或LDF损坏怎么恢复数据?

SQL SERVER数据库故障类型: MDF(NDF)或LDF损坏。 SQL SERVER故障原因: 1、数据库正在操作过程中,机器突然断电; 2、人为误操作。 SQL SERVER故障表现: 1、数据库在管理器界面显示处于“置疑”…

深度学习必备Python基础知识充电1

一、Python解释器运行程序 也被称之为对话模式 就是进行人机交互 1.1 算术计算 >>> 12 3 >>> 9-6 3 >>> 6*3 18 >>> 9/3 3.0 >>> 4/5 0.8 >>> 1/3 0.3333333333333333 >>> 3**9 19683 >>> 3**2 9 &…

故障分析 | DROP 大表造成数据库假死

作者:岳明强 爱可生北京分公司 DBA 团队成员,人称强哥,朝阳一哥等,负责数据库管理平台的运维和 MySQL 问题处理。擅长对 MySQL 的故障定位。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随…

CSS实现步骤进度条——前端每日一练

CSS实现步骤进度条效果展示HTML布局文件CSS样式JavaScript操作逻辑补充:JavaScript的this关键字效果展示 HTML布局文件 总体布局,一个大div盒子包裹所有内容,里面划分为div button,六个⭕分别对应着六个子div;⭕下方…

带你了解S12直播中的“黑科技”

摘要:让精彩更流畅、让较量更清晰、让参与更沉浸、让体验更有趣,幕后的舞台,从来都是技术的战场,S12背后的名场面同样场场高能。本文分享自华为云社区《用硬核方式打开S12名场面》,作者:华为公众号。 让精…

WebDAV之葫芦儿·派盘+账本(简洁记账)

账本(简洁记账) 支持webdav方式连接葫芦儿派盘。 简洁记账-轻便,记账好帮手! 便捷好用的生活记账本,适用于学生记账,学生账本,亲子账本,装修记账,旅游记账,旅行记账,生意记账,人情记账,日常记账,家庭账本,随手记账等。再也不担心钱花哪儿了,简洁的记账流程,清…

从 WinDbg 角度理解 .NET7 的AOT玩法

一:背景 1.讲故事 前几天 B 站上有位朋友让我从高级调试的角度来解读下 .NET7 新出来的 AOT,毕竟这东西是新的,所以这一篇我就简单摸索一下。 二:AOT 的几个问题 1. 如何在 .NET7 中开启 AOT 功能 在 .NET7 中开启 AOT 非常方…

Linux-环境变量

🚀每日鸡汤: 智者重因,庸者重果,顺道而行。 目录 一、基本概念 ⅠPATH ①把我们的可执行程序拷贝到系统 /usr/bin/中 ②配置环境变量 Ⅱ getenv函数 Ⅱ user环境变量 Ⅲ PWD环境变量 二、shell变量(本地变量)和环境变量 三…

Adobe 2023全家桶已就位,拉高你的生产力,新增功能很奈斯

按照惯例。Adobe是每年一次大版本更新,并且是在每年的10月份中下旬,现在Adobe 2023终于来啦重磅更新,强势来袭!​不用怀疑,全家桶简直是设计师福音,每次的大版本更新,为全世界的艺术设计相关人士…

Qt 样式设置

Qt 样式设置样式语法指定控件 Selector Types盒子模型 The Box Model能自定义样式的控件Sub-Controls控件的状态 Pseudo-States属性内置图标多个设置冲突层叠样式 Cascading继承规则 Inheritance子窗口不继承父窗口样式移除控件旧样式添加 .qss 文件Qt 预置颜色QLineEdit 样式设…

创建一个中国人的类

/*** 创建一个中国人的类* 分析:* 1、每个中国人都有一个唯一的身份证号码,所以身份证号码属性需要定义成实例变量* 2、每个人的姓名也都是不一样的,为此姓名属性也需要定义成实例变量* 3、每个中国人的国籍…

python实现目标检测voc格式标签数据增强

文章目录前言一、显示图片(可关闭)二、创建图像变换的类1.增强数据代码2.图像加噪声3.调整图像亮度4.添加黑色像素块5.旋转图像6.图像裁剪7.平移图像8.图像镜像9.图像随机增强选择三、增强后图片保存与xml解析保存1.从xml文件中提取bounding box信息2.保…

数据结构:循环队列

之前已经做过队列的学习笔记,这一篇写的是循环队列,大部分代码可以继续沿用,某些地方需要作出更改,使其可以实现循环队列的功能。 通俗的总结一下队列的操作,我的思路是将头指针固定不动,然后每一次元素入…

模拟实现string

第一部分:构造,析构,拷贝构造,赋值重载,打印函数这几个大头写出来先 string类框架 namespace xxx { class string { public: // //private: char* _str; size_t _size; size_t _capacity;const static size_t npos -…

计算机视觉——python在一张图中画多条ROC线

在验证分类算法的好坏时,经常需要用到AUC曲线,而在做不同分类模型的对比实验时,需要将不同模型的AUC曲线绘制到一张图里。 计算机视觉——python在一张图中绘制多个模型的对比ROC线1. 小型分类模型对比,可以直接调用的2. 大型的CN…

七夕,程序员教你5个表白代码,2分钟学会,牢牢主抓她的心

七夕。一个有人欢喜有人愁的节日,虽然对一些单身人士不太友好,但还有不少人都在等这个节日进行表白。毕竟这个日子的成功率会高一些。 情人节少不了送花送礼物,作为一个程序员,当然不会在送什么礼物上给你指点一二,但…

适合骑车时候戴的耳机怎么选,列举五款在骑行佩戴的耳机推荐

相信大多数人在运动的过程中都会感觉到枯燥无力的感觉,为此也一直在寻找一些能够让我们在运动中保持最初的热诚,在最终的选择上,绝大多数都是选择了耳机,因为耳机能够产生美妙的音乐,将我们运动的枯燥做进一步的抵消&a…