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

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


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


破局—引入API网关


如何解决这些问题?


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


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


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


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

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


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

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

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

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

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

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

便于进行应用层面的扩展


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


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


下面将从API网关总体设计、API治理设计、API安全防范三方面详细分析长亮科技API网关的设计实践。


长亮科技API网关总体设计


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


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


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


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

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


 

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


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


Filter扩展

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

接入接出扩展

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

加解密扩展

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

网关请求响应二次扩展

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

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

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


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


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


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

 


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


           

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

     

       

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


           

API治理设计


1、API限流

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


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


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

当Redis不可用时,则使用JVM级别的实例限流。会直接从当前实例的缓存中获取一个Semaphore信号量,并尝试获取其许可,当获取成功则表示限流通过,反之抛出限流异常。



2、熔断降级

当服务故障时,为了防止整个系统的故障,对系统采取熔断降级策略。可根据平均响应时间、秒级异常比例、分钟级异常数等维度进行熔断降级处理。


熔断降级的三种维度:

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

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

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

 


3、API路由


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


API路由的四种模式:

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

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

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

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


 

API安全防范


1、协议安全

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


2、访问安全

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


相对单一的访问安全方式,长亮科技的访问安全更为全面,且在除现有的几个访问安全外,仍可继续扩展其他安全手段。


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

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

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

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


3、报文安全

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


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

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


4、流量安全

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


总结


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


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


分布式
让中国金融科技 具有世界影响力
长亮科技更懂如何为您的数字化转型赋能