NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

如何打造适用金融行业的智能网关?

  • 2023-12-29
    北京
  • 本文字数:4690 字

    阅读完需:约 15 分钟

大小:2.31M时长:13:28
如何打造适用金融行业的智能网关?

随着我们逐渐步入数字化时代,金融行业对于网络安全与效率的需求日益迫切。在这种背景下,智能网关显现出其在解决相关问题上的巨大潜力。本文将深入探索如何构建一个适配金融行业需求的智能网关。

明确需求和目标


在构建智能网关的初步阶段,关键是明确其面临的挑战。由于金融行业需频繁处理大量敏感数据,数据的安全性和隐私保护显得尤为重要。同时,考虑到金融交易的实时性和高频率,系统的可用性和性能也是核心的考量因素。因此,我们打造的智能网关应具备包括但不限于以下能力:安全防护、连接优化、流量管理及服务降级等。具体来看,我们需要考虑:


  • 面对用户网络出现的各种问题,我们需要考虑如何提供可靠的备选连接方式,确保用户始终能够访问并进行操作。

  • 当面临异常流量时,我们需要设计出能有效感知并合理调度流量的策略,以保障系统功能的稳定运行。

  • 在突发事件发生时,我们必须有预案来保证核心功能的无缝运行。

系统设计


在明确需求后,我们将聚焦于智能网关的架构设计,这涉及到以下几个关键问题:如何管理并路由客户端发来的请求、如何监控当前的流量状态、如何处理服务降级和熔断等问题。同时,我们还需考虑如何实现服务的发布、上线、以及回滚等基础运维功能。

框架设计:


首先,让我们一起来看看好分期智能网关服务的整体框架设计。这个服务框架主要由四个核心模块构成,包括基础组件(Basic Components)、控制器(Controller)、服务(Service)以及数据(Model)。


图 1:网关整体框架


  • 基础组件(Basic Components):这个模块为服务提供了一系列基本功能,如信息采集、用户验证、请求限流以及降级等。这些功能是构建稳健服务的基石,帮助我们追踪问题、保障安全、管理流量并在必要时启动备用系统进行降级。开发人员在开发接口时,可以根据实际需求灵活地开启或关闭这些功能。

  • 控制器(Controller):控制器是服务的出入口,它定义了服务对外公开的接口。控制器负责接收用户的请求,并将请求路由到相应的 Service 进行处理。同时,根据每个接口的特定功能,控制器实现了与基础组件的绑定,这使得我们可以根据每个接口的特性和需求,选择适当的基础组件进行使用。

  • 服务(Service):服务模块是业务逻辑的核心,它负责实现接口的内部逻辑。好分期网关服务会根据客户端的需求,向相应的后端接口请求数据,然后对获取的数据进行必要的加工处理,最终将数据以客户端所需的格式返回。这使得我们的服务能够灵活地适应各种业务需求,并根据终端类型提供定制化的数据。

  • 数据(Model):数据模块负责处理与其他服务的交互逻辑。当下游服务出现问题时,数据模块能够实施高可用性策略,例如熔断和降级,这可以确保我们的服务在面对异常时,仍然能够维持其稳定性和可用性。

信息采集:


接下来,我们再具体介绍一下基础组件中的信息采集功能。在系统的日常运行中,我们构建了一个全方位的信息采集框架,它覆盖了运行环境、接口请求、以及系统出现异常等关键环节。所有的信息都会按照统一的日志格式进行整理和输出。通过这些日志信息,我们能够实时掌握系统运行状况,及时发现并解决问题。而且,它为后续的分析和优化提供了丰富的数据支撑,使我们能够基于数据深入理解系统,从而制定出更加科学和有效的优化策略。

图 2:系统信息采集


性能监控信息: 记录了运行容器的各项性能指标,以便我们深入理解系统的运行状态和性能表现。


  • CPU 使用率(CPU Used):这一指标反映了 CPU 的使用情况,为我们提供了关于系统负载状态的重要信息。这有助于我们在系统负载过高时及时进行负载均衡或扩容操作。

  • CPU 限制次数 &时间(CPU Throttle Count & Time):这一指标显示了 CPU 被限制的次数和累计时间。这有助于我们分析系统是否在处理 CPU 密集型任务,并进行相应的优化。

  • 内存使用率(Memory Used):这一指标揭示了内存的使用情况。这有助于我们分析并查找程序运行过程中可能存在的内存泄漏问题,从而提高系统的运行效率。


请求记录:记录了所有通过服务的请求日志,以便我们可以准确地追踪和分析系统的行为。


  • 接口访问日志:这部分日志详细记录了每个接口的基本信息,如请求结果和请求耗时等。这有助于我们分析接口的性能,并找出可能的性能瓶颈。

  • 接口内部逻辑执行的分段耗时:这部分日志深入记录了每个接口内部 Service 方法的执行时间。这有助于我们分析和优化代码的执行效率。

  • 跨服务请求的访问日志:这部分日志记录了每个接口调用下游服务的基本信息,如请求结果和请求耗时等。这有助于我们监控和优化服务间的通信效率。


异常记录: 记录了服务中出现的所有异常,以便我们可以及时响应并修复问题。


  • 逻辑异常:这类异常一般发生在 Service 内部逻辑执行出错的情况下,例如解密数据出错、JSON 解析出错等。这有助于我们找出代码中的错误并进行修复。

  • 结果异常:这类异常一般发生在调用下游服务成功,但服务返回了错误的结果的情况下。这有助于我们调试和定位问题。

  • 访问失败:这类异常一般发生在调用下游服务失败的情况下,即无法正常访问到下游服务。这有助于我们监控服务的可用性,并及时处理服务间的通信问题。

具体解决方案


在详细描述了系统的基础设计之后,接下来我们将深入探讨好分期智能网关是如何有效应对之前提及的挑战的。

挑战一:如何选择最佳的连接方式


每次客户端启动时,都会向好分期的网关服务发送一次访问信息(Ping),以验证服务的连通性和可用性。通常,服务会成功返回响应数据并记录一条含有客户端访问地区的日志。但在某些情况下,尽管我们的系统仍在运行,但客户端可能由于网络限制、防火墙设置等原因无法正常与网关服务建立连接,从而导致 Ping 请求失败。


当客户端的 Ping 请求失败时,客户端会立即向特定接口发送请求以获取备用的服务配置。这个备用配置包含了多个不同接入点的信息,每个接入点都代表了一个可能的服务路径。获取备用配置后,客户端会根据当前网络状况和地理位置(省份、城市)精选出一个最佳的备用策略,可能包括选择最佳接入点或调整连接参数等,总之,目的就是尝试与服务进行连接,优先保证用户的使用体验。

图 3:连接方式选择


这种自动化的故障应对机制,使得我们的服务在面临可能的网络故障时,仍能保持其稳定性和可靠性。此外,这种访问监控机制也提供了大量的实时数据,这对于我们来说是非常宝贵的。我们可以通过这些数据,深入理解我们的服务在各种情况下的表现,找出可能的瓶颈和问题,然后优化我们的服务以提供更好的用户体验。

挑战二:如何应对异常流量


在传统的限流策略中,为了让系统在任何情况下都能正常运行,我们通常会设定一个相对保守的阈值。然而,通过对系统运行数据的实时监控和分析发现,这种策略并非在所有情况下都是最优选择。举例来说,有些时候,即使并发量超过阈值触发限流,系统的负载率仍然不高;反过来,即使没有触发限流,系统在执行复杂运算逻辑时的负载率却可能非常高,导致系统响应速度下降。为了解决这个问题,我们需要设计一个新的方案,能够根据系统的实际负载情况动态调整限流阈值。

图 4:动态限流阈值


在这个新的方案中,我们利用已经采集到的系统运行数据,包括 CPU 使用率、CPU 限制次数及时间,以及内存使用率。通过详细分析这些关键指标,我们能够确定系统效率下降的临界点。然后,我们将基于这个临界点,动态地更新限流阈值,确保系统在达到阈值时,其运行状态能够接近这个临界点。这种方式既能最大化系统的使用效率,也能同时保证系统的稳定性。

图 5:PID控制算法 (图片来源于网络)


为了实现这个目标,我们先后尝试了多种计算方法,包括比例计算、累积误差计算,以及在工业领域广泛应用的 PID 控制算法。经过对比,我们发现 PID 控制算法在调节流量阈值方面表现优秀。PID 控制算法采用比例控制、积分控制和微分控制来适应性地调整流量阈值:


  • 比例控制:该参数决定了系统对负载误差的响应速度。值越大,系统对负载误差的响应越迅速。

  • 积分控制:该参数决定了系统对持续负载误差的反应强度。值越大,系统对持续负载误差(如长时间的 CPU 过载)的反应越强烈。

  • 微分控制:该参数决定了系统对负载误差变化的响应速度。值越大,系统对负载误差的变化(如 CPU 使用率的突然增加)反应越快。

挑战三:如何保障核心功能


划分业务优先级:


首先,我们需要对业务进行优先级划分。这通常涉及到将业务分为核心业务和非核心业务。核心业务是那些对公司运营至关重要的业务,如还款、借款、进件等操作。非核心业务可能包括一些附加功能,如推荐系统、广告系统等。

图 6:业务优先级


通过划分业务优先级,我们可以在系统资源有限的情况下,优先保障核心业务的正常运行。


评估核心流程规模:


在明确了业务优先级之后,我们需要根据这些优先级来评估核心流程的具体规模。这一步骤要求我们深入研究并预测核心流程在面临极限压力时,可能需要处理的最大负载。这通常涉及到以下几个关键因素:


  • 请求峰值: 这一指标涉及到系统在特定时间(例如还款高峰期)可能需要处理的最大请求量。对请求峰值的了解可以帮助我们预测最大的工作负载,并据此做好充分的准备,以保证系统可以顺利处理这些请求。

  • 数据规模: 这涉及评估每个请求的平均数据量以及在高峰期间可能需要处理的总数据量。对数据规模的了解和预测可以帮助我们预防和处理可能出现的 IO 瓶颈,保证数据流畅地在系统中流动。

  • 系统资源使用情况: 我们需要评估处理这些请求时,每个服务可能需要的最大 CPU、内存和磁盘资源。通过这种方式,我们可以更有效地管理和分配系统资源,确保每个核心业务流程都能获得足够的资源。


限流策略的精细化调整:


一旦确定了核心流程的业务规模,我们就可以以此为基础,精细调整限流策略,以更有效地保护核心功能。


对于核心业务,设定一个较高的限流阈值是必要的。这样做不仅在大流量下保证了服务的连续性,而且防止了核心业务在关键时刻因资源不足而受限。另一方面,对于非核心业务,我们可以设定一个较低的阈值,以防止在资源紧张的情况下,这些业务消耗过多的资源,从而对核心业务的运行产生影响。

图 7:精细化限流阈值V1.0


同时,我们还可以根据实际访问量动态调整非核心业务的限流阈值。例如,在访问量较低的时段,我们可以适当提高非核心业务的阈值,以充分利用可用资源;而在访问量较高的时段,我们可以适当降低非核心业务的阈值,以确保核心业务能够优先获取到足够的资源,保证其稳定运行。


图 8:精细化限流阈值V2.0


极端情况下的降级方案:


在遭遇网络波动或硬件故障等极端情况时,我们必须有备选的降级策略来进行应对。这些策略通常包括降低服务质量和简化部分复杂操作。


  • 降低服务质量:对于那些耗费大量资源但并非必须的服务,我们可以选择降低其服务质量。例如,降低实时数据的更新频率,减少非必要的数据同步等。此外,我们也可以选择暂停一些非核心业务,如获客、营销、消息中心等系统,从而迅速减轻系统负载,确保核心业务的正常运行。

  • 简化操作过程:当系统资源紧张时,复杂的操作流程也可能会加重系统负担。因此,我们可以选择简化一些操作,例如缩短用户操作流程,简化页面展示等,以有效地降低系统负载。

  • 启动备用系统:对于关键业务,我们应提前准备好备用系统。一旦主系统出现问题,我们可以立即切换到备用系统,以保障关键业务的连续性。


这些降级策略将帮助我们在极端情况下维持系统运行,并确保核心功能的提供。通过预先规划和准备这些降级策略,我们可以在突发事件发生时,迅速且准确地做出响应,尽最大可能保护核心业务的正常运行。

总结


打造适用于金融行业的智能网关是一个持续进化和优化的过程,它需要我们深入洞察业务需求,不断探索新的策略,反思和调整我们的方法,以持续提升和完善我们的方案。这一过程的核心目标是提高系统的安全性和稳定性,并为用户提供出色的体验,以满足金融行业对实时性、高频率和高可靠性的严格要求。


作者介绍:


张欣元,微财数科 Android 开发高级工程师

李萌萌,微财数科 大前端资深开发工程师

李军,微财数科 技术负责人

吴迪,微财数科 副总裁

2023-12-29 16:529049

评论

发布
暂无评论

为什么安全性在托管中变得越来越重要

九河云安全

台达AS228T_CanOpen_VFD_X

林建

台达 AS228T Canopen 功能块 E变址

收获颇丰!这份阿里架构师纯手敲JDK源码全彩小册可以打满分

Java架构追梦

Java 阿里巴巴 架构 面试 jdk源码

面试进阶齐飞!霸榜GitHub的 Java 全栈笔记太香了!

Java 编程 程序员 IT 计算机

算法有救了!GitHub 上神仙项目手把手带你刷算法,Star 数已破500k

Java 编程 程序员 面试 算法

2021 斩获 90K 月薪的 Spring 全家桶:文档 + 面试题 + 学习笔记 + 思维导图

编程 架构 微服务 IT 计算机

使用Micronaut框架构建一个微服务网络.

Java 编程 架构 面试 程序人生

这波性能优化,太炸裂了!

why技术

Java 性能优化 JVM

毕业六年本科,去年疫情期间备战二个月,阿里巴巴四面成功!定级 P7

Java 程序员 架构 面试 IT

经过两年努力,我终于进入腾讯(PCG事业群4面总结)

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

spring cloud 在国内中小型公司能用起微服务来吗?

Java 程序员 架构 面试 IT

经验分享:我是如何拿下微软、滴滴、百度等 20家大厂的 Offer?

Java 程序员 架构 面试 IT

孩子排斥写作业 VS 员工不接活儿——项目管理来帮忙

Ian哥

我看 JAVA 之 并发编程【三】java.util.concurrent.atomic

awen

Java 并发编程 Atomic 原子操作

如何用Camtasia添加视频水印?

淋雨

视频剪辑 Camtasia 录屏软件

MySQL中的DEFINER(定义者)是什么

Simon

MySQL

高频面试题-请把Java垃圾回收器说清楚

Java 编程 架构 面试 JVM

xposed 入门之修改手机 IMEI

Qunar技术沙龙

android 程序员 App 经验分享 安卓

2021 年主要网络安全威胁,及时发现提早规避风险

九河云安全

接口返回值一定不允许使用枚举类型吗?

skow

Java 面试 后端 开发规范

凭借一份“面试真经pdf”,我四面字节跳动,拿下1-2级offer

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Python代码阅读(第7篇):列表分组计数

Felix

Python 编程 Code Programing 阅读代码

C++ Vector

若尘

c++ vector 8月日更

惠及百万用户 医保“上云”有了新思路

浪潮云

云计算

“助力金九银十”25 大Java后端面试指南,3000道面试题解析

Java 编程 程序员 面试 IT

渣本全力以赴33天,四面阿里妈妈(淘宝联盟),拿下实习岗offer

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

一文搞懂指标采集利器 Telegraf

尔达Erda

学习 微服务 开发者 云原生 插件开发

Tensor:Pytorch神经网络界的Numpy

华为云开发者联盟

神经网络 数组 PyTorch Numpy Tenso

Java测试框架九大法宝

FunTester

自动化测试 JUnit 测试框架 selenium testNG

Java 程序性能优化“学习日记”

Java 编程 面试 IT 计算机

Spring Boot 实战派,让开发像喝水一样简单!

Java 程序员 架构 面试 IT

如何打造适用金融行业的智能网关?_软件工程_张欣元_InfoQ精选文章