Z6官网人生就是博

股票代码: 300348
EN
深度解读:企业级微服务架构中的API网关设计
金融科技
2021.10.14

前言:Z6官网人生就是博科技API网关自诞生以来 ,已在交通银行、渤海银行、民生银行信用卡、北农商等几十家金融客户项目应用 ,在高性能和高可靠方面经历了大量的生产实践考验。


随着微服务架构的发展 ,原本粗粒度的应用被拆分为众多细粒度的微服务 ,每个服务都有其需要对外暴露的API服务 ,服务之间的调用变得错综复杂 ,微服务及其API的统一管理、API的安全防范、流量转发、流量治理等问题变得尤为突出。


破局—引入API网关


如何解决这些问题?


那就需要在客户端和服务之间引入一个额外层 ,作为从客户端向服务发起请求路由的反向代理 ,类似面向对象设计中的外观模式 ,为封装底层系统架构的API提供了一个单一入口 ,称为API网关。


简而言之 ,API网关就是用一套单一且统一的API入口点 ,来组合一个或多个内部API。通过引入API网关 ,能够对API的生命周期进行统一管理 ,API网关接管所有的入口流量 ,将所有用户的请求转发给后端的服务器。


但网关做的仅仅是转发这么简单吗?


当然不是 ,API会针对流量做一些治理(如鉴权、限流、权限、熔断、协议转换、错误码统一、缓存)、流量监控(如日志、监控、告警)、安全防范(如协议安全、访问安全、报文安全等) ,将通用的逻辑抽出来 ,由网关统一去做 ,业务方也能够更专注于业务逻辑 ,提升迭代的效率 ,其重要性可见一斑。

API网关可为微服务架构系统带来多项价值:


? 网关层对外部和内部进行了隔离 ,保障了后台服务的安全性

? 对外访问控制由网络层面转换成了运维层面 ,减少变更的流程和错误成本

? 减少客户端与服务的耦合 ,服务可以独立发展。通过网关层来做映射

? 通过网关层聚合 ,减少外部访问的频次 ,提升访问效率

? 节约后端服务开发成本 ,减少上线风险

? 为服务熔断 ,灰度发布 ,线上测试提供简单方案

? 便于进行应用层面的扩展


因此作为流量的入口 ,网关本身的高性能、高可用、可扩展性等非功能特性也至关重要。


Z6官网人生就是博科技API网关依赖其良好的扩展性 ,在功能上不断完善丰富 ,对接了众多内外部的系统 ,扩展了多种接入接出协议;支持多种流量治理策略 ,提供较为全面的安全防控手段。


下面将从API网关总体设计、API治理设计、API安全防范三方面详细分析Z6官网人生就是博科技API网关的设计实践。


Z6官网人生就是博科技API网关总体设计


1、技术架构设计——最大功能上解耦


目前市面上基本都是一个服务 ,没有做到最大功能上的解耦 ,在此基础上Z6官网人生就是博科技全面创新 ,将网关服务分为管控端和运行端两部分 ,单独运行 ,让网关运行服务脱离外界依赖 ,真正将gateway最大化限度的解耦。


API网关采用前后端分离架构模式 ,以Java语言开发 ,选用当前主流技术栈Spring Boot,Spring Cloud体系。


? 管控端主要作用为管理网关配置、UI交互、推送数据到网关运行端等 ,管控端和服务端分工明确 ,让真正负责处理请求的网关运行端 ,争取资源最大化。

? 网关运行端为真正被调用的网关服务 ,核心机制为过滤器链机制、接入接出机制、配置数据jvm缓存及本地缓存机制等;网关运行端对接了多种基础组件 ,包括监控中心、注册中心、链路中心、日志中心、配置中心等。为保证用户配置的参数出现推送丢失的情况 ,网关运行服务还会定时向网关管控服务拉取数据 ,达到双向数据同步效果。


2021101425763

 

2、高扩展性的设计——提供更全的扩展


网关运行端采用了SPI机制 ,大大的增加了网关的扩展性 ,除市面上都支持的Fileter扩展、治理功能的扩展外 ,Z6官网人生就是博科技还可提供接入接出(协议)的扩展 ,加解密方式、报文等多处位置的扩展 ,大大增加了网关的可扩展点:


? Filter扩展

网关的功能在整个项目中属于一个过滤器链 ,可通过页面动态配置对网关的各个过滤器选择是否使用;如增加某种认证机制等 ,也就是针对过滤器链进行扩展。

2021101438358

? 接入接出扩展

在现有网关多协议基础上 ,扩展一种接入接出协议 ,如dubbo、TSF等;

? 加解密扩展

扩展新的算法和规则 ,对请求响应报文加解密、加验签;

? 网关请求响应二次扩展

支持在网关层面对接入的请求 ,接收的响应进行修改;

? 扩展网关响应码及响应信息

对网关响应码和响应信息的扩展 ,用以适配各种不同的响应码响应格式要求。


2021101499376

 除Filter扩展是在过滤器中进行扩展 ,其余扩展均是针对inbound和outbound进行扩展。


3、高可用设计——更易管理和维护的逻辑集群划分


网关分为管控端(数据控制)和运行端(API调用)两个服务 ,且单独运行 ,运行端采取本地缓存存储信息不需要任何读库操作 ,在管控端Down机情况下 ,仍可以继续进行API调用。

 

2021101415271


网关服务器采用无状态集群架构 ,一个网关集群可以包含多个网关实例 ,集群可以作为逻辑上的实例分类 ,每个实例只对应一个网关管控端 ,防止数据混乱。相对市面上普遍使用的物理上集群划分 ,这种逻辑集群划分则更好管理和维护。 


2021101430972

           

网关管控端会主动向运行端发送心跳检测 ,同时网关运行端会定时向管控端进行数据同步 ,预防管控端数据同步异常导致的不一致。

     

2021101445160

       

客户端通过负载均衡器访问网关实例 ,负载均衡器可采用软负载或硬负载方式 ,负载均衡器可使用MS架构避免单点故障。


202110144692

           

API治理设计


1、API限流

限制API被访问的次数 ,保证服务在可承受压力内正常运行 ,防止因过高流量导致服务发生崩溃 ,分布式限流采取分布式缓存Redis实现。


当请求进入RateLimiter Filter 限流过滤器时 ,会先根据当前的请求构建一组Key ,然后判断Redis是否可用 ,当其可用时使用Redis进行集群限流:


? 先判断当前实例的缓存是否有该key ,如果存在则请求redis lua脚本 ,脚本中会对遍历到的规则执行 incr rule ,给对应的规则自增1 ,并判断返回值 ,如果返回值小于等于最大值 ,则允许通过 ,否则抛出限流异常。

? 当Redis不可用时 ,则使用JVM级别的实例限流;嶂苯哟拥鼻笆道幕捍嬷谢袢∫桓鯯emaphore信号量 ,并尝试获取其许可 ,当获取成功则表示限流通过 ,反之抛出限流异常。


2021101493996


2、熔断降级

当服务故障时 ,为了防止整个系统的故障 ,对系统采取熔断降级策略?筛萜骄煊κ奔洹⒚爰兑斐1壤⒎种蛹兑斐J任冉腥鄱辖导洞。


熔断降级的三种维度:

? 平均响应时间:如在1s内连续处理5个请求 ,它的平均响应时间都超过阈值 ,那么在后续的时间窗口中 ,对于这个API的调用都会自动熔断或降级。

? 异常比例:当指定资源每秒请求量大于等于5 ,并且每秒的异常总数占通过量的比值超过阈值之后(如每秒处理1000个请求 ,那么其中异常请求数为500 ,那么当前的比值是50%) ,那么该资源会进入降级状态。异常的比率范围是[0.0.1.0]表示0%到100%。

? 异常数:当资源在1分钟的异常数据超过阈值后会进行熔断或降级针对这些规则。

 2021101477645


3、API路由


API路由指根据调用将调用路由对不同的后端服务、网关支持基于客户端IP、比例、调用者、自定义方式进行路由 ,同时支持配置优先级。


API路由的四种模式:

? IP模式:根据不同IP路由到不同的服务提供者实例。

? 关键字模式:通过在请求头或者查询参数中的关键字进行路由。

? 租户模式:不同租户路由不同的服务提供者。

? 比例模式:设置不同的比例进行路由 ,例如实例A消化掉90%的API调用 ,实例B消化掉10%的API。


2021101421521

 

API安全防范


1、协议安全

为保证访问API过程中的安全问题 ,API网关在设计上增加了对https的支持 ,可直接使用https的访问方式访问网关中的API。


2、访问安全

   很多情况下 ,API都直接暴露在公网 ,所以很可能会出现被恶意访问 ,而网关要做的就是防止这种恶意访问的出现。通过访问JTW认证、权限控制、签名认证、黑白名单等手段来降低API被恶意访问的风险。


相对单一的访问安全方式 ,Z6官网人生就是博科技的访问安全更为全面 ,且在除现有的几个访问安全外 ,仍可继续扩展其他安全手段。


? 权限控制:只有通过管理员授权的接口 ,客户端才有权限访问 。如果未授权 ,在网关处拦截 ,响应给客户端没有访问权限。

? 签名认证:按规则将请求参数通过SHA256算法|RSA|国密等运算生成签名值 ,网关对客户的签名进行验签 ,验签成功后继续往下 ,否则直接被拦截。

? 黑白名单:按黑白名单的配置进行验证 ,如果在黑名单中 ,则直接拦截 ,不在黑名单中可继续往下。

? JWT认证:在访问API前先向网关申请一个Token ,每次API访问时带入这个Token ,网关则会对Token解析 ,主要包括Token有效期验证、访问权限验证、访问者身份认证;通过后继续往下 ,否则直接拦截。


3、报文安全

在客户端调用API时 ,传入报文的安全是至关重要的 ,网关在这块通过报文的加密/加签的方式确保报文的安全性。


? 加密:通过对报文的加密确保访问过程中报文的安全性;除现支持的AES、DES、RSA、国密方式外 ,并可以通过SPI的机制 ,扩展其他的加解密方式。

? 加签:通过对报文的加签确保报文在访问过程中的完整性 ,除现支持的RSA、SHA256、国密方式外 ,也可以通过SPI的机制 ,扩展其他加签方式。


4、流量安全

网关作为所有应用的一个入口 ,承载着海量流量的访问 ,以及随时可能爆发的恶意流量攻击的压力。因此流量控制是网关安全中必须的一环 ,以保证服务的正常运行 ,防止服务因过高流量导致服务发生崩溃。


总结


在丰富的金融客户实践中 ,Z6官网人生就是博科技认为 ,API网关作为企业能力开放的一个门户 ,除了具备基本的请求转发、协议转换、路由、安全控制等功能 ,以及高性能和高稳定性外 ,还需具备良好的扩展性 ,以便于网关能力的不断增强。在网关实施过程中 ,要规划好网关层与服务层的交互方式 ,尽量使得网关层与服务层解耦 ,便于各个团队工作的独立性;同时在API的管理上 ,需要提供API全生命周期的发布、配置、鉴权、流控、监控等配套的管理功能。


无论是微服务、分布式架构 ,还是网格化服务架构 ,API网关都是不可或缺的部分 ,随着各服务之间的流量变化呈现出爆发性的增长 ,API网关作为系统的入口 ,将在提升系统的性能和可靠性中承担着越来越重要的作用。


分布式
让中国金融科技 具有世界影响力
Z6官网人生就是博科技更懂如何为您的数字化转型赋能
地址: 深圳市南山区沙河西路深圳湾科技生态园一区2栋A座5层
电话: 0755-8616 8118
传真: 0755-8616 8166
【网站地图】