一种基于Netty与插件机制的API网关及控制方法与流程

文档序号:21180585发布日期:2020-06-20 17:47阅读:346来源:国知局
一种基于Netty与插件机制的API网关及控制方法与流程
本发明涉及信息处理
技术领域
,尤其涉及一种基于netty与插件机制的api网关及系统。
背景技术
:在现代分布式架构下,大型网站以及应用必然由多个类型的业务功能模块组成,一般应用分布式集群模式部署,为降低耦合度,必然会存在多个服务提供者,而每个类型的服务提供者的服务资源数量,也会随着整个系统体量的增大而随之增长和变更。相对于远程服务,客户终端的请求可能需要从多个服务提供者中聚合数据,而内部服务的划分、结构随着时间的变化也有所改变,而服务的改变必然引起请求处理流程的改变,这为服务的统一管理带来了难度。在互联网环境下,分布式服务集群对外暴露服务资源,需要考虑安全风险、访问控制等问题,而网关是集群的前置控制层,是集群的边缘服务,对外屏蔽内部集群的变动细节,本质上,是对终端访问信息流的控制,可以按需实现请求信息内部转换、负载均衡、统一鉴权、协议转换、监控检测等。技术实现要素:本发明实施例的目的是提供一种基于netty与插件机制的api网关,应用netty技术,实现了api网关的高并发连接模式,在更低的成本基础上支持更多的网络连接接入。为实现上述目的,本发明实施例提供了一种基于netty与插件机制的api网关,包括以下步骤:包括请求接收模块、链路建立模块、插件模块以及业务模块;所述请求接收模块,用于获取用户发送的接入集群请求;所述链路建立模块,用于通过netty服务层对所述接入集群请求的数据包进行解码生成请求实体和请求数据,将所述请求数据分配到特定的业务线程池,建立业务链路;所述插件模块,用于通过预设的插件对所述请求实体进行判断,将不符合预设条件的请求过滤,将符合预设条件的请求发送至所述业务模块;所述业务模块,用于根据所述符合预设条件的请求的类型,将所述符合预设条件的请求发送至对应的处理模块,以完成对所述用户请求的处理。进一步的,所述链路建立模块包括接收单元和第一处理单元;所述接收单元,用于在acceptor主线程池中随机选择一个线程作为acceptor线程以绑定端口和接收客户端连接请求;所述第一处理单元,用于在所述acceptor线程接收到连接请求后,通过所述acceptor主线程池的其他线程处理客户端的登录、握手以及安全认证,以建立业务链路。进一步的,所述插件模块包括插件管理单元、过滤单元以及插件配置更新单元;所述插件管理单元,用于在于客户端建立业务链路后,异步获取所有插件的配置数据,并根据所述所有插件的配置数据,管理插件的启用状态;所述过滤单元,用于将客户端的每一个请求发送至所有处于开启状态的插件进行过滤处理;所述插件配置更新单元,用于当某个插件的配置信息发生变更后,实时更新该插件的缓存配置信息。进一步的,插件的配置数据包括插件的类型和插件的启用状态。进一步的,所述业务模块包括第二处理单元和第三处理单元;所述第二处理单元,用于将所述客户端的请求发送至io子线程的任一线程中,以供该线程对所述客户端的请求进行读写和编码操作;所述第三处理单元,用于根据所述客户端的请求的请求类型,将所述客户端的请求发送至对应的workthreadspools,以完成对所述客户端请求的处理。作为本发明的优选实施例,本发明还提供了一种基于netty与插件机制的api网关的控制方法,包括以下步骤:获取用户发送的接入集群请求;通过netty服务层对所述接入集群请求的数据包进行解码生成请求实体和请求数据,将所述请求数据分配到特定的业务线程池,建立业务链路;通过预设的插件对所述请求实体进行判断,将不符合预设条件的请求过滤,将符合预设条件的请求发送至所述业务模块;根据所述符合预设条件的请求的类型,将所述符合预设条件的请求发送至对应的处理模块,以完成对所述用户请求的处理。进一步的,所述通过netty服务层对所述接入集群请求的数据包进行解码生成请求实体和请求数据,将所述请求数据分配到特定的业务线程池,建立业务链路,具体为:在acceptor主线程池中随机选择一个线程作为acceptor线程以绑定端口和接收客户端连接请求;在所述acceptor线程接收到连接请求后,通过所述acceptor主线程池的其他线程处理客户端的登录、握手以及安全认证,以建立业务链路。进一步的,所述通过预设的插件对所述请求实体进行判断,将不符合预设条件的请求过滤,将符合预设条件的请求发送至所述业务模块,具体为:在于客户端建立业务链路后,异步获取所有插件的配置数据,并根据所述所有插件的配置数据,管理插件的启用状态;将客户端的每一个请求发送至所有处于开启状态的插件进行过滤处理;当某个插件的配置信息发生变更后,实时更新该插件的缓存配置信息。进一步的,插件的配置数据包括插件的类型和插件的启用状态。进一步的,所述根据所述符合预设条件的请求的类型,将所述符合预设条件的请求发送至对应的处理模块,以完成对所述用户请求的处理,具体为:将所述客户端的请求发送至io子线程的任一线程中,以供该线程对所述客户端的请求进行读写和编码操作;根据所述客户端的请求的请求类型,将所述客户端的请求发送至对应的workthreadspools,以完成对所述客户端请求的处理。实施本发明实施例,具有如下有益效果:本发明提供一种基于netty与插件机制的api网关,包括请求接收模块、链路建立模块、插件模块以及业务模块;请求接收模块用于获取用户发送的接入集群请求;链路建立模块用于通过netty服务层对接入集群请求的数据包进行解码生成请求实体和请求数据,将请求数据分配到特定的业务线程池,建立业务链路;插件模块用于通过预设的插件对请求实体进行判断,将不符合预设条件的请求过滤,将符合预设条件的请求发送至业务模块;业务模块用于根据符合预设条件的请求的类型,将符合预设条件的请求发送至对应的处理模块,以完成对用户请求的处理,通过应用netty技术,实现了api网关的高并发连接模式,在更低的成本基础上支持更多的网络连接接入。附图说明图1是本发明提供的基于netty与插件机制的api网关的一种实施例的结构示意图;图2为本发明实施例提供的netty的reactor并发模型示意图。图3为本发明实施例提供的通过netty技术实现插件机制的api网关整体架构图。图4是本发明提供的基于netty与插件机制的api网关的控制方法的一种实施例的流程示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例1:请参见图1,图1是本发明提供的基于netty与插件机制的api网关的一种实施例的结构示意图。如图1所示,所述api网关包括请求接收模块、链路建立模块、插件模块以及业务模块;所述请求接收模块,用于获取用户发送的接入集群请求;所述链路建立模块,用于通过netty服务层对所述接入集群请求的数据包进行解码生成请求实体和请求数据,将所述请求数据分配到特定的业务线程池,建立业务链路;所述插件模块,用于通过预设的插件对所述请求实体进行判断,将不符合预设条件的请求过滤,将符合预设条件的请求发送至所述业务模块;所述业务模块,用于根据所述符合预设条件的请求的类型,将所述符合预设条件的请求发送至对应的处理模块,以完成对所述用户请求的处理。在请求接入集群后,由netty服务层处理链接接入,对数据包进行解码生成请求实体,将数据分配到特定的业务线程池,建立业务链路。请求实体进入业务处理阶段后,gateweb保证网络请求必须触发插件链执行,执行请求过滤的逻辑。管理员维护插件的类型、启用状态、执行顺序,以及规则信息,每个插件的执行会判断请求是否启用、是否吻合流量阈值,是否执行规则。每个插件的执行会根据请求的信息如下表所示:gateplugin+插件标识:int+插件类型:string+启用状态:int+插件名称:string+执行顺序:int+插件配置:string+插件规则:string然后作出计算判断,将不符合规则条件的请求过滤,直接返回失败提示;符合条件的请求会被转发到业务层,或者流转到下一个插件。转发至业务层的请求将会被业务层进行处理。实施例2:在本实施例中,所述链路建立模块包括接收单元和第一处理单元;所述接收单元,用于在acceptor主线程池中随机选择一个线程作为acceptor线程以绑定端口和接收客户端连接请求;所述第一处理单元,用于在所述acceptor线程接收到连接请求后,通过所述acceptor主线程池的其他线程处理客户端的登录、握手以及安全认证,以建立业务链路。需要说明的是,netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。在现代应用开发中总会面临一种场景——支持成千上万的并发客户端,也就是所谓的高性能系统,要实现企业对高性能产品的渴望,开发人员除了要求超一流的编程技巧,还需要掌握几个复杂领域(网络编程、多线程处理和并发)的专业知识,而漫长的实践证明,直接使用java底层的网络api编写网络程序,会是一个复杂的操作过程。而应用系统研发的一个基本要求是,在更低的成本基础上,适应更高的吞吐量和可扩展性要求。netty封装了复杂的底层网络api,并将其隐藏在一层易于使用的api之后,开发人员只要熟悉netty使用指引,则只需实现复杂的业务流程,而网络底层交给netty,便可实现高并发系统。请参见图2,图2为本发明实施例提供的netty的reactor并发模型,在本实施例中通过netty实现并扩展了reactor模型:1)acceptor主线程池是一个独立的nio线程池,它用nio的形式扮演网络链路中的acceptor角色,又名acceptorreactor。2)程序启动后,会在acceptor主线程池中随机选择一个线程作为acceptor线程,用于绑定端口,接收客户端连接。3)acceptor线程接收到连接请求,会将请求交给acceptorreactor的其他线程,以处理客户端的登录、握手和安全认证,从而建立业务链路。实施例3:在本实施例在,所述插件模块包括插件管理单元、过滤单元以及插件配置更新单元;所述插件管理单元,用于在于客户端建立业务链路后,异步获取所有插件的配置数据,并根据所述所有插件的配置数据,管理插件的启用状态;所述过滤单元,用于将客户端的每一个请求发送至所有处于开启状态的插件进行过滤处理;所述插件配置更新单元,用于当某个插件的配置信息发生变更后,实时更新该插件的缓存配置信息。需要说明的是,系统模块化设计的核心思想是解耦,而模块与模块之间的设计,一般遵循基于接口编程的方式,接口是某个业务、功能的抽象,不同的接口有不同的实现,这满足系统的功能可扩展性要求,而系统运行时就必然需要对某个接口进行管理,如寻找接口的具体实现、管理具体接口实现的生命周期等,让系统实现,根据实际需要启用、停止、扩展、或者替换功能的策略,是可拔插、热加载的一种实现。插件是对现有干净系统的一种扩展或者第三方实现。是系统暴露出来的具体某个接口的一种实现,它的运行依赖现有干净系统的资源,接受现有干净系统的治理,所以本发明实施例通过netty技术实现插件机制的api网关,如图3所示,图3为本发明实施例提供的通过netty技术实现插件机制的api网关整体架构图。作为本发明的优选实施例,网关是直接接收并发客户端网络连接的中间件,使用netty处理网络通信部分,可以最大限度地利用服务器资源处理更多的客户端连接、处理更多的业务,降低业务阻塞发生的可能性。在本实施例中,网关由管理服务和业务服务组成,将业务处理和数据维护分离。业务服务处理客户端连接,并转发客户端连接到业务服务层,业务服务从管理服务异步获取关于插件链的全部配置数据,配置数据包括:插件列表、每个插件的详细配置,根据配置数据治理插件,管理插件的生命周期,例如业务服务会根据插件的启用状态决定是否开启插件、会根据插件链的信息创建插件实体等。在本发明实施例中,每一个请求都会被netty转发到业务服务处理,业务服务保证请求都会经过所有已启用插件的过滤处理。优选的,管理服务维护着网关配置数据,提供获取配置信息的接口层,业务服务本身并不保存数据,所有数据均来自同一个管理服务,业务服务无论部署多少个实例,数据都一致。需要说明的是,在多实例部署模式下,多个业务服务通过http或socket方式访问管理服务开放的数据获取接口,每次都是获取相同的全量配置数据,也就是所有插件的配置信息,保证当配置信息发生更新时,能实时同步到各个业务服务,让配置及时生效。其中,业务服务里,每个插件的缓存配置信息都是线程安全的,当某个插件的配置信息发生变更后,业务服务会及时更新该插件的缓存配置信息,插件运行过程中只需要读取最新的配置信息,就能实时应用。实施例4:在本实施例中,所述业务模块包括第二处理单元和第三处理单元;所述第二处理单元,用于将所述客户端的请求发送至io子线程的任一线程中,以供该线程对所述客户端的请求进行读写和编码操作;所述第三处理单元,用于根据所述客户端的请求的请求类型,将所述客户端的请求发送至对应的workthreadspools,以完成对所述客户端请求的处理。在业务层链路正式建立后,会将请求转到io子线程池的某个线程,由其处理io读写、编码操作,最后根据请求类型的不同,将请求转到特定类型workthreadspools,做具体的业务处理。在netty并发模型中,客户端的并发接入、底层socket的读写、以及业务请求的处理,都是多线程化的异步操作,因此,netty赋予了应用程序一项核心能力:可以以任意的顺序响应任意时间点产生的网络事件,可以在确定的资源里,不断复用计算机的线程资源,适应更高的吞吐量和可扩展性要求。实施例5:作为本发明的优选实施例,请参见图4,图4是本发明提供的基于netty与插件机制的api网关的控制方法的一种实施例的流程示意图。如图4所示,该控制方法包括步骤s1至步骤s4,各步骤具体如下:s1,获取用户发送的接入集群请求。s2,通过netty服务层对所述接入集群请求的数据包进行解码生成请求实体和请求数据,将所述请求数据分配到特定的业务线程池,建立业务链路。在本发明实施例中,步骤s2具体为:在acceptor主线程池中随机选择一个线程作为acceptor线程以绑定端口和接收客户端连接请求;在所述acceptor线程接收到连接请求后,通过所述acceptor主线程池的其他线程处理客户端的登录、握手以及安全认证,以建立业务链路。s3,通过预设的插件对所述请求实体进行判断,将不符合预设条件的请求过滤,将符合预设条件的请求发送至所述业务模块。在本发明实施例中,步骤s3具体为:在于客户端建立业务链路后,异步获取所有插件的配置数据,并根据所述所有插件的配置数据,管理插件的启用状态;将客户端的每一个请求发送至所有处于开启状态的插件进行过滤处理;当某个插件的配置信息发生变更后,实时更新该插件的缓存配置信息。其中,插件的配置数据包括插件的类型和插件的启用状态。s4,根据所述符合预设条件的请求的类型,将所述符合预设条件的请求发送至对应的处理模块,以完成对所述用户请求的处理。在本发明实施例中,步骤s4具体为:将所述客户端的请求发送至io子线程的任一线程中,以供该线程对所述客户端的请求进行读写和编码操作;根据所述客户端的请求的请求类型,将所述客户端的请求发送至对应的workthreadspools,以完成对所述客户端请求的处理。本发明提供的基于netty与插件机制的api网关的控制方法,通过获取用户发送的接入集群请求;通过netty服务层对所述接入集群请求的数据包进行解码生成请求实体和请求数据,将所述请求数据分配到特定的业务线程池,建立业务链路;通过预设的插件对所述请求实体进行判断,将不符合预设条件的请求过滤,将符合预设条件的请求发送至所述业务模块;根据所述符合预设条件的请求的类型,将所述符合预设条件的请求发送至对应的处理模块,以完成对所述用户请求的处理,通过应用netty技术,实现了api网关的高并发连接模式,在更低的成本基础上支持更多的网络连接接入。采用本发明提供的实施例,具有以下有益效果:1)完全使用java工业级计算机语言实现,通用性高。2)使用netty实现网络接入,单机4corecpu、16gram可以支持100万链接。3)整体网关应用实现了热插拔,插件启停操作后,不需要重启应用,可用性提高。4)单个网关业务服务异常停止后,服务重新接入集群,会重新拉取配置。5)系统分网关业务和网关管理后台,所有网关业务的配置数据,在配置后台统一管理。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。以上所述是本发明的优选实施方式,应当指出,对于本
技术领域
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1