System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种用于OpenResty网关的动态获取上游服务健康节点的方法技术_技高网

一种用于OpenResty网关的动态获取上游服务健康节点的方法技术

技术编号:39946793 阅读:4 留言:0更新日期:2024-01-08 22:59
本发明专利技术公开了一种用于OpenResty网关的动态获取上游服务健康节点的方法,其特征在于,包括以下步骤:OpenResty网关的各worker进程从配置中心获取上游服务的节点的节点IP以初始化各上游服务对应的健康节点集合,同时,监听配置中心该上游服务的节点健康状态变更事件;独立的检查服务对上游服务进行周期检查,将上游服务的节点健康状态变更事件发布到配置中心;OpenResty网关的各worker进程接收到上游服务的节点状态变更事件后,更新对应服务的健康节点列表。

【技术实现步骤摘要】

本专利技术涉及一种用于openresty api网关的上游健康检查的方法。


技术介绍

1、在web服务器领域,openresty以其动态高性能的优势获得众多企业的青睐,其重要的应用领域之一便是api网关。openresty网关在处理客户端的http请求时会经历内容获取阶段,该阶段需要和上游服务建立连接并将请求转发给上游服务,获取经上游服务处理的响应结果再转发给客户端。对于众多互联网应用而言,7×24运行进入常态化,因此上游服务通常以集群的方式进行部署,以实现系统的高可用。openresty网关的优势是配置可以进行实时变更并生效,运维人员可以在配置中心维护上游服务的集群信息并发布到openresty网关,无需像nginx那样修改静态配置再reload,网关因此具备了服务发现的功能,但如图1所示,因为网络等诸多不可靠因素导致节点的不可用问题是随时可能发生的,因此上游服务节点的健康检查便成了一个核心功能,识别并选择一个健康的节点发送请求才能让请求得到正常及时的响应。

2、在现有的技术方案中,对上游服务节点的检查主要采用的方式是网关各worker直接对上游节点发起健康检查请求,如图2所示,各网关实例的各worker创建了异步的timer对上游服务的节点发起周期请求,该方案的优势是简单直接,不需要额外的组件参与。

3、然而该方案存在以下不足:

4、第一、网关本身负责维护检查任务,需要占用宝贵的timer资源,各worker和上游保持长连接,需要占用额外的网络资源,随着上游服务的节点增多及网关压力增大,这一块额外占用的资源将拉低网关整体性能。

5、第二、网关各worker都会发起对上游的探测,网关本身为了维持高可用,会采用集群部署,因此worker的总数量等于网关单实例worker的总数乘以网关实例总数,上游服务的各节点除了和众worker保持长连接外,每个worker也需周期对上游服务的各节点发送检查请求,然而上游服务的连接资源通常更为宝贵,上游服务通常采用的是性能比openresty弱的web应用服务器,如果上游的资源被迫用在维持和众多worker的长连接,那么上游服务处理请求的性能将受到严重挤占。


技术实现思路

1、本专利技术要解决的技术问题是:在openresty网关不使用timer机制检查上游的情况下,如何有效获取上游服务的健康节点。

2、为了解决上述技术问题,本专利技术的技术方案是提供了一种用于openresty网关的动态获取上游服务健康节点的方法,其特征在于,包括以下步骤:

3、步骤1、openresty网关的各worker进程从配置中心获取上游服务的节点的节点ip以初始化各上游服务对应的健康节点集合,同时,监听配置中心该上游服务的节点健康状态变更事件,包括以下步骤:

4、步骤101:openresty网关的各worker进程在初始化阶段获取配置中心各上游服务的节点的节点ip数据,构建一张映射表,该映射表的key为上游服务的唯一id编号,该映射表的value为上游服务对应的节点的节点ip列表,所获得的映射表即为初始的上游服务健康节点映射表;

5、步骤102:openresty网关的各worker进程与配置中心建立长连接并监听特定key的变更事件,该key由上游服务id编号以及节点ip两部分构成,唯一标记处于局域网内的上游服务,对应的value为节点ip的健康状态值,通过该值来表示对应的节点是否健康;

6、步骤2、独立的检查服务对上游服务进行周期检查,将上游服务的节点健康状态变更事件发布到配置中心,节点健康状态变更事件的key由上游服务id编号以及节点ip两部分构成,节点健康状态变更事件的value为节点ip对应的健康状态值,通过健康状态值来表示对应的节点是健康的还是不健康的;

7、步骤3、openresty网关的各worker进程接收到上游服务的节点状态变更事件后,更新对应服务的健康节点列表,包括以下步骤:

8、步骤301:当各worker进程接收到配置中心推送来的上游服务的节点健康状态变更事件时,解析节点健康状态变更事件的内容,获得事件的节点健康状态变更事件的key和value,取出key中的上游服务id查询步骤101中的映射表,得到对应的节点ip列表,根据value,修改此节点ip列表:

9、若key中节点ip对应的节点的健康状态值为健康,则检查节点ip列表是否包含当前节点:若包含,则不做任何操作;若不包含,则在节点ip列表中追加当前节点,追加当前节点的动作将更新步骤101中维护的上游服务健康节点映射表;

10、若key中节点ip对应的节点的健康状态值为不健康,则检查节点ip列表是否包含当前节点:若包含,则将当前节点从节点ip列表中移除;若不包含,则不做任何操作;移除当前节点的动作将更新步骤101中维护的上游服务健康节点映射表。

11、优选地,所述步骤2包括以下步骤:

12、步骤201:独立的检查服务从配置中心获取所有待检查的上游服务的配置信息;

13、步骤202:独立的检查服务遍历每个上游服务的配置信息,根据上游服务的配置信息初始化健康检查任务的任务信息,该任务信息包括任务执行的周期、待检查的节点列表及健康检查url;

14、步骤203:健康检查任务执行时,解析健康检查任务内容,获取待检查的节点列表,遍历节点列表,根据节点列表中各节点的节点ip及健康检查url构造最终的健康检查请求url并向对应的节点发送异步的get请求;

15、步骤204:根据各节点处理get请求后返回的响应状态码判定当前节点的健康指标:若请求响应状态码不为502、503、504,则判定当前节点的本次检查指标为健康,否则,判定当前节点的本次检查指标为不健康,获得节点健康指标结果;

16、步骤205:根据步骤204得到的节点健康指标结果,创建或更新节点健康度指标计数器,该节点健康度指标计数器的底层数据结构为一张映射表,该映射表的key为每个节点的节点ip,该映射表的value为健康度指标映射表,健康度指标映射表有两个key,分别为表示健康的key-healthy以及表示不健康的key-unhealthy,key-healthy以及key-unhealthy的value分别表示对应健康度的累计值;当某个节点的健康度的累计值达到预设值时,进入步骤206,否则,返回步骤203;

17、步骤206:将节点健康状态变更为健康或者不健康,并向配置中心发布节点健康状态变更事件,节点健康状态变更事件的key和value分别为步骤102中列出的key和value;发布成功后,将key-healthy以及key-unhealthy的value重置为0。

18、优选地,步骤205中,若当前健康检查时,通过所述步骤204获得当前节点的本次检查指标为不健康,则将所述健康度指标映射表中,key-healthy的value重置为本文档来自技高网...

【技术保护点】

1.一种用于OpenResty网关的动态获取上游服务健康节点的方法,其特征在于,包括以下步骤:

2.如权利要求1所述的一种用于OpenResty网关的动态获取上游服务健康节点的方法,其特征在于,所述步骤2包括以下步骤:

3.如权利要求3所述的一种用于OpenResty网关的动态获取上游服务健康节点的方法,其特征在于,步骤205中,若当前健康检查时,通过所述步骤204获得当前节点的本次检查指标为不健康,则将所述健康度指标映射表中,key-healthy的value重置为0,并累计key-unhealthy的value;若当前健康检查时,通过所述步骤204获得当前节点的本次检查指标为健康,则将所述健康度指标映射表中,key-unhealthy的value重置为0,并累计key-healthy的value。

4.如权利要求3所述的一种用于OpenResty网关的动态获取上游服务健康节点的方法,其特征在于,步骤205中,若当前节点的key-healthy的value达到5时,表示当前节点健康,进入步骤206,在步骤206中,将节点健康状态变更为健康;若当前节点的key-unhealthy的value达到2时,表示当前节点不健康,进入步骤206,在步骤206中,将节点健康状态变更为不健康;否则,返回步骤203。

...

【技术特征摘要】

1.一种用于openresty网关的动态获取上游服务健康节点的方法,其特征在于,包括以下步骤:

2.如权利要求1所述的一种用于openresty网关的动态获取上游服务健康节点的方法,其特征在于,所述步骤2包括以下步骤:

3.如权利要求3所述的一种用于openresty网关的动态获取上游服务健康节点的方法,其特征在于,步骤205中,若当前健康检查时,通过所述步骤204获得当前节点的本次检查指标为不健康,则将所述健康度指标映射表中,key-healthy的value重置为0,并累计key-unhealthy的value;若当前健康检查时,通过所述步骤2...

【专利技术属性】
技术研发人员:孙建吴浩伦陈海祥
申请(专利权)人:万得信息技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1