快速构建服务调用的方法及中台API网关与流程

文档序号:23944754发布日期:2021-02-16 18:44阅读:141来源:国知局
快速构建服务调用的方法及中台API网关与流程

本发明涉及微服务架构技术领域,尤其涉及一种快速构建服务调用的方法及中台API网关。



背景技术:

随着互联网的快速发展,当前已步入移动互联、物联网时代。用户访问系统入口也变得多种方式,由原来单一的PC客户端,变化到PC客户端、各种浏览器、手机移动端及智能终端等。同时系统之间大部分都不是单独运行,经常会涉及与其他系统对接、共享数据的需求。网关作为流量的入口,常用功能包括路由转发、权限校验以及限流控制等。目前在使用微服务架构的场景下,客户端在调用后台微服务时,每个服务调用都需要进行登陆认证、权限认证、流量控制、负载均衡、健康检查等操作,这些操作是调用每一个微服务都必须的,因此导致每个服务调用都会需要鉴权、限流、权限、熔断等逻辑,如果每个服务调用都去实现一遍,代码就会显得很冗余和臃肿。而且服务越来越复杂及越来越多样化,比如京东、淘宝打开一个页面可能会涉及到数百个微服务协同工作,因此会导致整体系统的响应时间较长,无法快速构建服务调用。



技术实现要素:

为了解决上述的技术问题。本发明的一个目的是提供一种快速构建服务调用的方法,所有的api调用通过中台API网关进行统一的处理,包括:

web浏览器或者app发起服务调用请求,客户端根据签名规则,生成报文头_sig参数,连同其他报文头参数以及所有业务参数上传提交至网关路由中心的入口;

网关服务在接收到服务调用请求后,查询客户端权限信息和api配置;

在查询到客户端权限信息后,对客户端的身份进行合法性校验,合法性校验通过后,根据对客户端的限流配置,判断当前请求是否超过QPS限制;

客户端身份和限流校验通过后,对客户端传来的报文头参数进行反向签名验证,匹配传来的报文头_sig参数和反向签名生成的token是否一致;

反向签名验证通过后,根据当前的api配置,通过检验报文头_timestamp参数和防重_nonce字段,当指定配置的生命周期在时间内已存在时,对所述api请求进行防重验证;

防重验证通过后,获取api的真实路由地址,将客户端传来的业务参数封装成请求对象进行http的调用,调用成功后会拿到api的真实返回数据;

通过防腐层处理将api返回的数据进行统一处理,之后返回固定格式的结构对象。

采用以上技术方案,所述在查询客户端权限信息和api配置时,优先在二级缓存中加载客户端权限信息和api配置,在二级缓存中查询不到相关数据后,从一级缓存中查询该数据;当两级缓存都无法查询到相关数据后,从数据库中查询该数据,同时数据库通过数据重载的方式将该数据同步更新给一级缓存和二级缓存;当数据库也无法查询到相关数据后,表示当前的服务调用请求的api未配置或者客户端权限信息不存在,那么当前请求会被拦截。

采用以上技术方案,所述二级缓存在懒加载的基础上,被删除的或者不存在的二级缓存会被下一次的正确服务调用请求自动填充。

采用以上技术方案,客户端权限信息包括配置客户端的全局QPS限制、配置客户端的方法级别QPS限制以及配置客户端是否属于黑白名单内。

采用以上技术方案,所述api配置包括接口配置,接口配置包括配置报文头_mt参数、报文头_version参数、报文头_requestMode参数、报文头_sm参数,其中报文头_mt参数和报文头_version参数组合在一起形成具有唯一性的API。

采用以上技术方案,所述对客户端传来的报文头_sig参数进行反向签名验证包括:

将客户端传来的报文头_sig参数值与反向生成的签名token进行比较判断;

当客户端传来的报文头_sig参数值与反向生成的签名token一致时,那么判断该报文头_sig参数值是一个合法的签名,即反向签名验证通过;

当客户端传来的报文头_sig参数值与反向生成的签名token不一致时,那么判断该报文头_sig参数值是一个非法的签名,即反向签名验证未通过,当前请求会被拦截。

采用以上技术方案,所述对api请求进行防重验证包括:

验证设定时间内是否有相同请求攻击;

当无相同请求攻击时,那么防重验证通过;

当有相同请求攻击时,那么防重验证未通过,当前请求会被拦截。

采用以上技术方案,还包括整个调用链过程完成后,采集上报整个调用过程中的请求参数、请求方法、请求结果、调用者身份信息与地理信息以及耗时信息,用于后期追溯排查。

本发明的另一目的是提供一种中台API网关,包括:

统一认证模块,web浏览器或者app向所述统一认证模块发起服务调用请求,客户端根据签名规则,生成报文头_sig参数,连同其他报文头参数以及所有业务参数上传提交至网关路由中心的入口;

网关配置模块,用于在接收到服务调用请求后查询客户端权限信息和api配置;

合法性校验模块,在查询到客户端权限信息后,所述合法性校验模块对客户端的身份进行合法性校验,合法性校验通过后,根据对客户端的限流配置,判断当前请求是否超过QPS限制;

签名验证模块,用于在客户端身份和限流校验通过后对客户端传来的报文头参数进行反向签名验证,匹配传来的报文头_sig参数和反向签名生成的token是否一致;

防重验证模块,反向签名验证通过后,根据当前的api配置,通过检验报文头_timestamp参数和防重_nonce字段,当指定配置的生命周期在时间内已存在时,对所述api请求进行防重验证;

服务调用模块,用于在防重验证通过后获取api配置的真实路由地址,将客户端传来的业务参数封装成请求对象进行http的调用,调用成功后会拿到api的真实返回数据;

领域驱动模块,通过防腐层处理将api返回的数据进行统一处理,之后返回固定格式的结构对象。

采用以上技术方案,还包括数据采集模块,整个调用链过程完成后,所述数据采集模块会上报整个调用过程中的请求参数、请求方法、请求结果、调用者身份信息与地理信息以及耗时信息,用于后期追溯排查。

本发明的有益效果:本发明所有的api调用通过中台API网关进行统一的处理,一方面中台API网关提供多种签名算法的支持,对数据进行加密校验,对每一个数据接口进行二次请求等有效的拦截,能够增强数据管控和安全能力;另一方面中台API网关能够降低系统间的耦合,并使微服务更加专注于业务逻辑处理,降低整体系统的响应时间,所有调用请求的合法性检验统一由中台API网关来管控,从而能够快速构建服务调用。

附图说明

图1是本发明提供的中台API网关的网络示意图。

图2是本发明实施例1的流程示意图。

图3是本发明实施例2的结构框图。

附图标记如下:1、中台API网关;11、统一认证模块;12、网关配置模块;13、合法性校验模块;14、签名验证模块;15、防重验证模块;16、服务调用模块;17、领域驱动模块;18、数据采集模块;2、微服务架构;3、访问客户端。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

实施例1

图1为本发明实施例1提供的中台API网关1的网络示意图。如图1所示,在访问客户端3与微服务架构2之间部署中台API网关1,所有的api调用通过中台API网关1进行统一的切入切出,降低整个网络系统间的耦合,使得微服务架构2更加专注于业务逻辑处理,所有调用请求的合法性检验统一由中台API网关1来管控,从而能够快速构建服务调用。

下面将结合图1来详细说明本发明技术方案。

参照图2所示,本发明实施例1提供一种中台API网关1快速构建服务调用的方法,所有的api调用通过中台API网关1进行统一的处理,包括以下步骤:

在步骤S101中,web浏览器或者app发起服务调用请求,客户端根据签名规则,生成报文头_sig参数,连同其他报文头参数以及所有业务参数上传提交至网关路由中心的入口。

在步骤S102中,网关服务在接收到服务调用请求后,查询客户端权限信息和api配置。

示例地,客户端权限信息和api配置是前置工作,所有通过中台API网关1调用的接口都需要进行api配置工作,api配置包括接口配置,接口配置包括配置报文头_mt参数(即配置api的方法名)、报文头_version参数(即版本号)、报文头_requestMode参数(即请求类型)、报文头_sm参数(即接口加密规则)、真实的接口地址、接口请求的限制参数、接口是否要进行防重校验、防重校验规则以及接口返回的状态码定义等等。还有所有通过中台API网关1调用的客户端都需要进行权限配置工作,权限配置包括配置客户端的全局QPS限制、配置客户端的方法级别QPS限制以及配置客户端是否属于黑白名单内。

示例地,在进行接口配置和权限配置时,配置数据在存储到数据库的同时,同步更新给一级缓存和二级缓存。

在步骤S103中,在查询到客户端权限信息后,对客户端的身份进行合法性校验,合法性校验通过后,根据对客户端的限流配置,判断当前请求是否超过QPS限制。

示例地,校验客户端的身份是否合法,如果身份合法,则校验通过,进行下一步操作,反之,该服务调用请求会被拦截。

示例地,对客户端的限流配置基于redis+lua来实现,可以对某个用户某个方法级别这样细粒度的维护进行流量管控。例如开发者张三的平台应用A的方法(getUser方法)每秒限制的最大的流量是5,超每秒并发超过为6时,系统调用时会有概率提示流量受限,此时业务接口也不会实际转发到getUser方法,减轻了业务系统的负载。

在步骤S104中,客户端身份和限流校验通过后,对客户端传来的报文头参数进行反向签名验证,匹配传来的报文头_sig参数和反向签名生成的token是否一致。

示例地,将客户端传来的报文头_sig参数值与反向生成的签名token进行比较判断,当客户端传来的报文头_sig参数值与反向生成的签名token不一致时,那么判断该报文头_sig参数值是一个非法的签名,即反向签名验证未通过,当前请求会被拦截;当客户端传来的报文头_sig参数值与反向生成的签名token一致时,那么判断该报文头_sig参数值是一个合法的签名,即反向签名验证通过,进行下一步操作;

在步骤S105中,反向签名验证通过后,根据当前的api配置,通过检验报文头_timestamp参数和防重_nonce字段,当指定配置的生命周期在时间内已存在时,对api请求进行防重验证。

示例地,通过验证报文头_timestamp参数(即时间戳字段)的方式对api请求进行时间有效性的校验,如果时间戳字段在配置的有效期内,那么判断这是一个有效的服务调用请求,进行下一步操作,反之,该服务调用请求会被拦截。

示例地,当指定配置的生命周期在时间内已存在时,根据防重规则的配置、客户端传来的防重_nonce字段字段以及传来的报文头_sig参数进行防重验证,具体的,验证设定时间内是否有相同接口攻击,当无相同接口攻击时,那么防重验证通过,进行下一步操作;当有相同接口攻击时,那么防重验证未通过,当前请求会被拦截,且该接口被加入至黑名单列表。例如可以设定1分钟内是否有相同接口攻击。

在步骤S106中,防重验证通过后,获取api的真实路由地址,将客户端传来的业务参数封装成请求对象进行http的调用,调用成功后会拿到api的真实返回数据。

在步骤S107中,通过防腐层处理将api返回的数据进行统一处理,之后返回固定格式的结构对象。

示例地,后端每个微服务可能是由不同语言编写的、提供了多样化的协议支持,例如HTTP、Dubbo、GRPC等,但是不可能要求客户端去适配这么多种协议,因此统一由中台网关路由中心通过http协议介入,后续根据api的配置来进行如http转发或Dubbo、GRPC远程调用等处理。调用成功后,再通过防腐层加工处理返回固定格式的结构对象,例如JSON或XML对象,从而达到兼容不同的协议、不同的返回结果作为一个优选的技术方案。

其中在步骤102中,在查询客户端权限信息和api配置时,优先在二级缓存中加载客户端权限信息和api配置,在二级缓存中查询不到相关数据后,从一级缓存中查询该数据;当两级缓存都无法查询到相关数据后,从数据库中查询该数据,同时数据库通过数据重载的方式将该数据同步更新至两级缓存;当数据库也无法查询到相关数据后,表示当前的服务调用请求的api未配置或者客户端权限信息不存在,那么当前请求会被拦截。

其中一级缓存基于redis实现,衍生服务为edas-bus-redis,能够支持多种功能,包括支持单机、哨兵、Cluster集群和Redis实例化;支持动态实例化;支持异常告警及服务降级;支持Redis随时上下线;支持集群部署、水平扩展及节约资源。

另外二级缓存基于jdk的ConcurrentHashMap实现,集群模式下通过apollo的订阅发布事件实现,当APi发生变更时,2级缓存通过apollo客户端的publishNamespace生成发布事件;客户端通过ApolloConfigChangeListener的onChange事件监听消息通知。为了防止脏读的情况,二级缓存在懒加载的基础上,被删除的二级缓存也会被下一次的服务调用请求自动填充。

作为一个优选的技术方案,本发明还包括步骤S108,在步骤S108中,整个调用链过程完成后,采集上报整个调用过程中的请求参数、请求方法、请求结果、调用者身份信息与地理信息以及耗时信息,用于后期追溯排查,增强了服务调用之间的透明度,通过服务调用分析可清晰的知道每个服务的流量、并发及耗时等性能指标,为后续服务的优化和改进提供有力的数据支撑。

实施例2

请参见图3所示,本发明实施例2提供的中台API网关用于实现本发明实施例1的中台API网关1快速构建服务调用的方法。如图3所示,中台API网关1包括:

统一认证模块11,web浏览器或者app向统一认证模块11发起服务调用请求,客户端根据签名规则,生成报文头_sig参数,连同其他报文头参数以及所有业务参数上传提交至网关路由中心的入口。

网关配置模块12,用于在接收到服务调用请求后查询客户端权限信息和api配置,关于客户端权限信息和api配置的具体细节参照实施例1所示,本发明在这里不做赘述。

合法性校验模块13,在查询到客户端权限信息后,合法性校验模块13对客户端的身份进行合法性校验,合法性校验通过后,根据对客户端的限流配置,判断当前请求是否超过QPS限制。关于校验的具体细节参照实施例1所示,本发明在这里不做赘述。

签名验证模块14,用于在客户端身份和限流校验通过后对客户端传来的报文头参数进行反向签名验证,匹配传来的报文头_sig参数和反向签名生成的token是否一致。关于签名验证的具体细节参照实施例1所示,本发明在这里不做赘述。

防重验证模块15,反向签名验证通过后,根据当前的api配置,通过检验报文头_timestamp参数和防重_nonce字段,当指定配置的生命周期在时间内已存在时,对所述api请求进行防重验证。关于防重验证的具体细节参照实施例1所示,本发明在这里不做赘述。

服务调用模块16,用于在防重验证通过后获取api配置的真实路由地址,将客户端传来的业务参数封装成请求对象进行http的调用,调用成功后会拿到api的真实返回数据。

领域驱动模块17,通过防腐层处理将api返回的数据进行统一处理,之后返回固定格式的结构对象。关于数据处理的具体细节参照实施例1所示,本发明在这里不做赘述。

数据采集模块18,整个调用链过程完成后,数据采集模块18会上报整个调用过程中的请求参数、请求方法、请求结果、调用者身份信息与地理信息以及耗时信息,用于后期追溯排查,增强了服务调用之间的透明度,通过服务调用分析可清晰的知道每个服务的流量、并发及耗时等性能指标,为后续服务的优化和改进提供有力的数据支撑。

本发明所有的api调用通过中台API网关进行统一的处理,一方面中台API网关提供多种签名算法的支持,对数据进行加密校验,对每一个数据接口进行二次请求等有效的拦截,能够增强数据管控和安全能力;另一方面中台API网关能够降低系统间的耦合,并使微服务更加专注于业务逻辑处理,降低整体系统的响应时间,能够快速构建服务调用。

以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1