CN110933097A - 面向多服务网关的限流与自动扩缩容方法 - Google Patents
面向多服务网关的限流与自动扩缩容方法 Download PDFInfo
- Publication number
- CN110933097A CN110933097A CN201911237025.2A CN201911237025A CN110933097A CN 110933097 A CN110933097 A CN 110933097A CN 201911237025 A CN201911237025 A CN 201911237025A CN 110933097 A CN110933097 A CN 110933097A
- Authority
- CN
- China
- Prior art keywords
- service
- gateway
- nginx
- automatic
- current limiting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 38
- 230000009467 reduction Effects 0.000 claims description 25
- 238000004364 calculation method Methods 0.000 claims description 20
- 230000008602 contraction Effects 0.000 claims description 10
- 238000002347 injection Methods 0.000 claims description 9
- 239000007924 injection Substances 0.000 claims description 9
- 239000008186 active pharmaceutical agent Substances 0.000 description 18
- 238000011144 upstream manufacturing Methods 0.000 description 13
- 238000013461 design Methods 0.000 description 6
- 238000013475 authorization Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000002265 prevention Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000002035 prolonged effect Effects 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003203 everyday effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013178 mathematical model Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/66—Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/52—Queue scheduling by attributing bandwidth to queues
- H04L47/522—Dynamic queue service slot or variable bandwidth allocation
Abstract
本申请公开了一种面向多服务网关的限流与自动扩缩容方法,包括步骤:提供OpenResty,将服务参数和OpenResty源码通过集群makefile编译,动态生成nginx.conf文件,根据nginx.conf文件部署与服务相对应的服务网关,统计各服务的流量,并将流量发送至网关系统;服务根据zabbix通过服务的负载,并将负载发送至网关系统;网关系统实时监测流量和负载,当流量和负载不匹配时,进行自动扩缩容。本申请提供的面向多服务网关的限流与自动扩缩容方法可以能够在限流的基础上,在高峰期增加服务器数量,保障业务正常,在低谷时,返还服务器,降低成本。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种面向多服务网关的限流与自动扩缩容方法。
背景技术
用户请求一个链接(API)时,这个API对应的后台需要针对API的参数进行逻辑处理,给予返回。如果请求量过大,比如遭遇了DDOS攻击或者秒杀活动,CPU或者内存占用过大,可能导致服务不可用。因此需要在这个服务之前,加个网关层将外部与内部服务进行隔离,这一层的核心功能就是转发,自身没有业务逻辑,把用户的请求转发给后台服务,后台服务再把结果交给网关,网关再响应给后台。
转发可以对用户的请求的地址、参数和结果进行记录和修改,因此网关层可以做一些访问控制、授权和防火墙之类的事情。好的网关,比如本发明所采用的OpenResty,支持限流,所谓限流,即后台服务每秒最多只能2000个请求,但是秒杀活动的时候,每秒2200,量超了可能导致服务变慢(CPU上升到90%以上)以及不可以用(CPU100%了)。网关本身没有逻辑,能够承受的压力比后台服务大很多,网关对这2200个请求可以正常的释放2000个请求,其余100个在等待队列(如果等待队列的容量只有100个)里等待,等待会造成一个问题,这100个请求的用户的等待时间变长,而剩余的100个请求直接返回结果“当前请求人数过多”,只有部分人能够进入后台服务,其他人的请求被网关拒绝了。
无论是等待时间变长还是拒绝的体验都很差,我司尽量做到最优,在保障服务可用的机器上,进行自动扩容。扩容后动态的调整等待队列,当等待队列中有数据时,触发自动扩容,也就是增加后台以及网关的机器,增加了机器后,整个服务的并发数又可以增大了,等待队列也应该相应的增加。本发明提供了一种面向多服务网关的限流与自动扩缩容方法。
发明内容
有鉴于此,本发明提供了一种面向多服务网关的限流与自动扩缩容方法,包括步骤:提供OpenResty,为在nginx上运行的lua脚本提供插件接口,插件接口包括:限流插件接口、特征防刷插件接口、访问控制插件接口、防火墙插件接口和SQL防注入插件接口;
将服务参数和OpenResty源码通过集群makefile编译,动态生成nginx.conf文件,其中,服务参数包括:服务的连接数、网关规则数据的配置以及与nginx对应的配置;
根据nginx.conf文件部署与服务相对应的服务网关,统计各服务的流量,并将流量发送至网关系统;
服务根据zabbix通过服务的负载,并将负载发送至网关系统;
网关系统实时监测流量和负载,当流量和负载不匹配时,进行自动扩缩容,自动扩缩容包括自动扩容计算和自动缩容计算;
流量为服务在同一时刻处理的并发数,预设并发数阈值,当并发数超过并发数阈值时对并发数进行动态限流,同时将超过并发数阈值的并发数放置在网关服务待处理的队列中,其中,并发数为服务的CPU和内存最先到达80%的并发数;
将超过并发数阈值的并发数放置在网关服务待处理的队列中,设置待处理排队时间阈值,
当待处理排队时间超过待处理排队时间阈值时,同时接受到请求时,触发自动扩容计算;
当待处理排队时间超过待处理排队时间阈值时,同时未接受到请求时,触发自动缩容计算。
优选的,并发数根据以下方法动态限流:
其中,f(p)为服务对应的网关的负载,Ei(p/n)为服务的单台机器的使用率,n为服务的数量,p为服务的请求数,E(p)为服务的CPU使用率,c为服务的自身的CPU占用;θ(p)为服务的单台机器上请求数p的CPU使用率;R(p)为网关中单台服务器的CPU负载,q为空闲时服务的单台机器自身的CPU占用。
优选的,服务的CPU使用率通过服务中zabbix实时监控。
优选的,自动扩缩容需要扩容的服务的数量根据以下方法计算:
其中,f(n)为自动扩缩容需要扩容的服务的数量,n为服务的单台机器台数,C为服务中单台服务器的CPU负载,q空闲时服务的单台机器自身的CPU占用,m为服务的单台机器CPU的增长。
优选的,当集群makefile编译时,根据集群makefile标识和标识对应的服务文件生成nginx.conf文件,并根据nginx.conf文件部署与服务相对应的服务网关;
当集群makefile编译后,将服务文件发送至nginx.conf文件中,同根据服务文件生成内存中的数据对象,为Lua脚本提供运行环境。
优选的,OpenResty通过桥接执行插件接口。
优选的,OpenResty还包括限流插件,通过限流插件调整并发数和超过并发数阈值的并发数。
优选的,服务参数的格式为json。
与现有技术相比,本发明提供的面向多服务网关的限流与自动扩缩容方法,达到如下有益效果:
本申请提供的面向多服务网关的限流与自动扩缩容方法可以能够在限流的基础上,在高峰期增加服务器数量,保障业务正常,在低谷时,返还服务器,降低成本。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本发明提供的一种面向多服务网关的限流与自动扩缩容方法的流程图;
图2为本发明OpenResty调用接口的流程;
图3为本发明自动扩缩容的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。应注意到,所描述的实施例实际上仅仅是本发明一部分实施例,而不是全部的实施例,且实际上仅是说明性的,决不作为对本发明及其应用或使用的任何限制。本申请的保护范围当视所附权利要求所界定者为准。
实施例1:参见图1,图1为本发明提供的一种面向多服务网关的限流与自动扩缩容方法的流程图;本发明提供的一种面向多服务网关的限流与自动扩缩容方法,包括步骤:
步骤101,供OpenResty,为在nginx上运行的lua脚本提供插件接口,插件接口包括:限流插件接口、特征防刷插件接口、访问控制插件接口、防火墙插件接口和SQL防注入插件接口;
当流量过大时,对流量产生限制,防止网关的上游拒绝访问;对于溢出的流量,网关服务进行排队,并不直接丢弃;对IP的访问频率有限制。
特征防刷指某些业务对某些用户或者参数设置限制,例如只允许新用户调用、只允许某些业务条件成立的时候才能调用以及需要某些接口成立才能调用。这些规则在网关系统的后台进行配置。
访问控制包括对某些接口进行授权,以及对包含某些参数的请求进行分流,例如对APP的不同版本映射不同的后台API,或对多次失败的登录接口转向到找回密码。
防火墙是对参数进行分析得出爬虫和非法访问,对这些请求的IP进行拉黑。
SQL防注入是过滤请求的参数,将请求的字符串进行字符串转义,避免后台直接执行SQL。
OpenResty只是网关服务器,自身并无多服务概念,本发明对OpenResty的编译进行改造,每个服务生成其自有的配置文件,从而支持多服务。一个Web服务对应一个该服务的网关集群,每个网关集群单独部署,从而实现了多服务网关集群。
同时OpenResty框架是一种将Nginx和Lua相结合的网关框架,支持网关的是Nginx,Nginx性能强大,但是由于定制Nginx的难度较大,OpenResty将Nginx与Lua进行了整合,采用Lua语言提供一些控制Nginx中API的路由与转发以及监控的接口,从而降低了网关定制化的成本。OpenResty本身只是对Nginx进行封装整合Lua环境,其核心服务是Nginx,Nginx通过nginx.conf文件来配置各项服务与API,传统的Nginx支持多个服务的做法是在nginx.conf文件中配置多个Server和API对应的location,本发明设计生成nginx.conf文件的模板与conf生成模块,对每个服务单独生成nginx.conf文件。在编译时,通过对Makefile文件指定参数和该参数对应的服务文件来生成该服务的OpenResty网关程序。服务文件包括Http服务的运行参数、网关规则的Redis以及Mysql的地址、服务下的各个内部域名以及内部域名的修饰参数(日志路径、是否开启SSL、错误返回)。编译后,服务文件的内容将会填充到nginx.conf文件中,同时内容也会生成内存中的数据对象,为Lua逻辑提供业务支持。
步骤102,将服务参数和OpenResty源码通过集群makefile编译,动态生成nginx.conf文件,其中,服务参数包括:服务的连接数、网关规则数据的配置以及与nginx对应的配置;各个服务均可通过修改其对应的服务参数来管理其API,新增一种服务参数,便能扩展一种服务。
步骤103,根据nginx.conf文件部署与服务相对应的服务网关,统计各服务的流量,并将流量发送至网关系统;
步骤104,服务根据zabbix通过服务的负载,并将负载发送至网关系统;
步骤105,网关系统实时监测流量和负载,当流量和负载不匹配时,进行自动扩缩容,自动扩缩容包括自动扩容计算和自动缩容计算;
网关主要功能是保护和支持后台服务,当监控到服务的流量与服务的机器负载,主要指网关服务器以及网关的后台服务器的CPU和内存使用率,不匹配时,进行自动伸缩容,以服务的增量来调整机器的数量,降低服务器成本。服务器的数量发生改变时,网关的限流数和排队数也将调整。
步骤106,流量为服务在同一时刻处理的并发数,预设并发数阈值,当并发数超过并发数阈值时对并发数进行动态限流,同时将超过并发数阈值的并发数放置在网关服务待处理的队列中,其中,并发数为服务的CPU和内存最先到达80%的并发数;
步骤107,将超过并发数阈值的并发数放置在网关服务待处理的队列中,设置待处理排队时间阈值,
当待处理排队时间超过待处理排队时间阈值时,同时接受到请求时,触发自动扩容计算;
当待处理排队时间超过待处理排队时间阈值时,同时未接受到请求时,触发自动缩容计算。
可以理解的是,本发明涉及一种面向多服务的网关,网关包括网关管理系统和网关集群,支持多业务网关下的快速限流与分流、全局无阻塞的黑白名单以及基于业务自身需求的API拦截。同时针对OpenResty网关进行改造,以支持多业务部署。在多业务模式下,本发明提供了诸多基于OpenResty的Lua插件,以满足各个业务的网关范畴内的需求。在网关限流方面,当限流无法满足业务要求时,本发明网关系统设计了自动伸缩容算法,进行自动伸缩容。
实施例2:
继续参见图1,图1为本发明提供的一种面向多服务网关的限流与自动扩缩容方法流程图;本发明提供的一种面向多服务网关的限流与自动扩缩容方法,包括步骤:
步骤201,供OpenResty,为在nginx上运行的lua脚本提供插件接口,插件接口包括:限流插件接口、特征防刷插件接口、访问控制插件接口、防火墙插件接口和SQL防注入插件接口;
当流量过大时,对流量产生限制,防止网关的上游拒绝访问;对于溢出的流量,网关服务进行排队,并不直接丢弃;对IP的访问频率有限制。
特征防刷指某些业务对某些用户或者参数设置限制,例如只允许新用户调用、只允许某些业务条件成立的时候才能调用以及需要某些接口成立才能调用。这些规则在网关系统的后台进行配置。
访问控制包括对某些接口进行授权,以及对包含某些参数的请求进行分流,例如对APP的不同版本映射不同的后台API,或对多次失败的登录接口转向到找回密码。
防火墙是对参数进行分析得出爬虫和非法访问,对这些请求的IP进行拉黑。
SQL防注入是过滤请求的参数,将请求的字符串进行字符串转义,避免后台直接执行SQL。
OpenResty只是网关服务器,自身并无多服务概念,本发明对OpenResty的编译进行改造,每个服务生成其自有的配置文件,从而支持多服务。一个Web服务对应一个该服务的网关集群,每个网关集群单独部署,从而实现了多服务网关集群。
同时OpenResty框架是一种将Nginx和Lua相结合的网关框架,支持网关的是Nginx,Nginx性能强大,但是由于定制Nginx的难度较大,OpenResty将Nginx与Lua进行了整合,采用Lua语言提供一些控制Nginx中API的路由与转发以及监控的接口,从而降低了网关定制化的成本。OpenResty本身只是对Nginx进行封装整合Lua环境,其核心服务是Nginx,Nginx通过nginx.conf文件来配置各项服务与API,传统的Nginx支持多个服务的做法是在nginx.conf文件中配置多个Server和API对应的location,本发明设计生成nginx.conf文件的模板与conf生成模块,对每个服务单独生成nginx.conf文件。在编译时,通过对Makefile文件指定参数和该参数对应的服务文件来生成该服务的OpenResty网关程序。服务文件包括Http服务的运行参数、网关规则的Redis以及Mysql的地址、服务下的各个内部域名以及内部域名的修饰参数(日志路径、是否开启SSL、错误返回)。编译后,服务文件的内容将会填充到nginx.conf文件中,同时内容也会生成内存中的数据对象,为Lua逻辑提供业务支持。
在步骤201中,当集群makefile编译时,根据集群makefile标识和标识对应的服务文件生成nginx.conf文件,并根据nginx.conf文件部署与服务相对应的服务网关;
当集群makefile编译后,将服务文件发送至nginx.conf文件中,同根据服务文件生成内存中的数据对象,为Lua脚本提供运行环境。
同时,OpenResty通过桥接执行插件接口。
OpenResty还包括限流插件,通过限流插件调整并发数和超过并发数阈值的并发数。
步骤202,将服务参数和OpenResty源码通过集群makefile编译,动态生成nginx.conf文件,其中,服务参数包括:服务的连接数、网关规则数据的配置以及与nginx对应的配置;各个服务均可通过修改其对应的服务参数来管理其API,新增一种服务参数,便能扩展一种服务。服务参数的格式为json。
步骤203,根据nginx.conf文件部署与服务相对应的服务网关,统计各服务的流量,并将流量发送至网关系统;
步骤204,服务根据zabbix通过服务的负载,并将负载发送至网关系统;
步骤205,网关系统实时监测流量和负载,当流量和负载不匹配时,进行自动扩缩容,自动扩缩容包括自动扩容计算和自动缩容计算;
网关主要功能是保护和支持后台服务,当监控到服务的流量与服务的机器负载,主要指网关服务器以及网关的后台服务器的CPU和内存使用率,不匹配时,进行自动伸缩容,以服务的增量来调整机器的数量,降低服务器成本。服务器的数量发生改变时,网关的限流数和排队数也将调整。
步骤206,流量为服务在同一时刻处理的并发数,预设并发数阈值,当并发数超过并发数阈值时对并发数进行动态限流,同时将超过并发数阈值的并发数放置在网关服务待处理的队列中,其中,并发数为服务的CPU和内存最先到达80%的并发数;
步骤207,将超过并发数阈值的并发数放置在网关服务待处理的队列中,设置待处理排队时间阈值,
当待处理排队时间超过待处理排队时间阈值时,同时接受到请求时,触发自动扩容计算;
当待处理排队时间超过待处理排队时间阈值时,同时未接受到请求时,触发自动缩容计算。
在步骤207中,并发数根据以下方法动态限流:
其中,f(p)为服务对应的网关的负载,Ei(p/n)为服务的单台机器的使用率,n为服务的数量,p为服务的请求数,E(p)为服务的CPU使用率,c为服务的自身的CPU占用;θ(p)为服务的单台机器上请求数p的CPU使用率;R(p)为网关中单台服务器的CPU负载,q为空闲时服务的单台机器自身的CPU占用。
同时,其中的服务的CPU使用率通过服务中zabbix实时监控。
在步骤207中,自动扩缩容需要扩容的服务的数量根据以下方法计算:
其中,f(n)为自动扩缩容需要扩容的服务的数量,n为服务的单台机器台数,C为服务中单台服务器的CPU负载,q空闲时服务的单台机器自身的CPU占用,m为服务的单台机器CPU的增长。
可以理解的是,本发明涉及一种面向多服务的网关,网关包括网关管理系统和网关集群,支持多业务网关下的快速限流与分流、全局无阻塞的黑白名单以及基于业务自身需求的API拦截。同时针对OpenResty网关进行改造,以支持多业务部署。在多业务模式下,本发明提供了诸多基于OpenResty的Lua插件,以满足各个业务的网关范畴内的需求。在网关限流方面,当限流无法满足业务要求时,本发明网关系统设计了自动伸缩容算法,进行自动伸缩容。
实施例3:
本实施例为应用实施例:
本发明提供的又一种面向多服务网关的限流与自动扩缩容方法,包括步骤:
步骤301,提供OpenResty,OpenResty本身只是对Nginx进行封装整合Lua环境,其核心服务是Nginx,Nginx通过nginx.conf文件来配置各项服务与API,传统的Nginx支持多个服务的做法是在nginx.conf文件中配置多个Server和API对应的location,本发明设计生成nginx.conf文件的模板与conf生成模块,对每个服务单独生成nginx.conf文件。
步骤302,当集群makefile在编译时,通过对Makefile文件指定参数和该参数对应的服务文件来生成该服务的OpenResty网关程序。服务文件包括Http服务的运行参数、网关规则的Redis以及Mysql的地址、服务下的各个内部域名以及内部域名的修饰参数(日志路径、是否开启SSL、错误返回)。编译后,服务文件的内容将会填充到nginx.conf文件中,同时内容也会生成内存中的数据对象,为Lua逻辑提供业务支持。
步骤303,OpenResty提供诸多接口,限流插件接口、特征防刷插件接口、访问控制插件接口、防火墙插件接口和SQL防注入插件接口;
当流量过大时,对流量产生限制,防止网关的上游拒绝访问;对于溢出的流量,网关服务进行排队,并不直接丢弃;对IP的访问频率有限制。
特征防刷指某些业务对某些用户或者参数设置限制,例如只允许新用户调用、只允许某些业务条件成立的时候才能调用以及需要某些接口成立才能调用。这些规则在网关系统的后台进行配置。
访问控制包括对某些接口进行授权,以及对包含某些参数的请求进行分流,例如对APP的不同版本映射不同的后台API,或对多次失败的登录接口转向到找回密码。
防火墙是对参数进行分析得出爬虫和非法访问,对这些请求的IP进行拉黑。
SQL防注入是过滤请求的参数,将请求的字符串进行字符串转义,避免后台直接执行SQL。
可以理解的是,本发明采用桥接模式设计网关系统的Lua插件,设计了定义了上述Lua接口的基类。在初始化阶段加载所有实现了这个基类的子类,OpenResty通过桥接类来执行所有的子类的对应的接口,从而执行了子类中的Lua逻辑。当需要扩展一项网关的功能是,继承基类,实现对应的接口即可。
餐饮行业,每天有午高峰和晚高峰,从早上10点开始,用户请求增多,一直到12点20左右达到最大状态,从13点开始下降,直到14点30进入低谷期,到17点开始上升,到18点30左右达到最大状态,从19点30开始下降,22点之后进入低谷期持续到第二天10点。其中高峰期的业务量是低谷期的十倍。而做优惠活动以及节假日的业务量,是平时的三倍。对限流有要求。
在上述步骤303中,OpenResty调用接口的流程参考图2,图2为本发明OpenResty调用接口的流程;
定义基类:通过OpenResty中的lua接口定义基类,
init_by_lua//master-initing阶段,初始化全局配置或模块
init_worker_by_lua//worker-initing阶段,初始化进程、启动定时器
rewrite_by_lua//rewrite阶段,改写URI,实现跳转/重定向
content/balancer_by_lua//content阶段,产生相应内容/方向代理选择上游服务
herder/body_filter_by_lua//filter,加工处理相应头和响应体
log_by_lua//log阶段,收集日志和数据
定义、继承基类的子类;
子类接口:限流插件接口、特征防刷插件接口、访问控制插件接口、防火墙插件接口和SQL防注入插件接口;OpenResty执行加载后的基类定义的接口;
获取基类的所有子类,
OpenResty通过桥接类来调用所有子类的接口。
步骤304,触发扩缩容流程,参考图3,图3为本发明自动扩缩容的流程图;zabbix实时监测流量和负载;
负载计算:限流是限制上游服务在同一时刻处理的用户请求数量,也就是并发数,避免上游服务拒绝服务。当并发数过大时,并不直接重定向请求,会放到排队队列中。并发数通过设置请求速率来实现,请求速率取上游服务的CPU和内存最先到达80%的并发数(每秒多少个请求),排队队列的数量则是取请求量的倒数。当上游服务的CPU持续增加时,网关降低该服务的并发数,扩大排队数。以CPU为例,算法数学模型如下:
其中,f(p)为服务对应的网关的负载,Ei(p/n)为服务的单台机器的使用率,n为服务的数量,p为服务的请求数,E(p)为服务的CPU使用率,c为服务的自身的CPU占用;θ(p)为服务的单台机器上请求数p的CPU使用率;R(p)为网关中单台服务器的CPU负载,q为空闲时服务的单台机器自身的CPU占用。
流量计算:当流量过大时,对流量产生限制,防止网关的上游拒绝访问;对于溢出的流量,网关服务进行排队,并不直接丢弃;对IP的访问频率有限制。上游服务的CPU使用率通过上游服务器中的Zabbix监控得到,传递给网关管理系统,网关管理系统跟据网关-IP-后台服务地址和后台服务-IP的关系得到该服务的网关自身有多少台机器,以及对应的后台服务,有多少台服务器,计算上述模型。
由于网关受请求的复杂数的影响,在CPU使用率不同的阶段,网关的请求数和CPU的使用率只是具备相关性,上述模型只能够粗略估计增加1%的CPU所对应的请求数。
因此本发明取当单机负载达到80%时的请求数作为并发数的限制参数。取增加过去五秒内的并发数作为排队数,基本能够避免上游服务快速增加。
五秒内持续有排队数,将触发自动扩缩容。以减少请求溢出和排队。
负载判定:当排队队列持续五秒有请求时,触发自动扩容计算,当排队队列过大时,对请求进行封装,提醒用户等待重试。当排队队列持续五秒无请求时,触发自动缩容计算。
自动扩缩容需要扩容的服务的数量根据以下方法计算:
其中,f(n)为自动扩缩容需要扩容的服务的数量,n为服务的单台机器台数,C为服务中单台服务器的CPU负载,q空闲时服务的单台机器自身的CPU占用,m为服务的单台机器CPU的增长。
限流:例如当4台机器均高达80%,机器自身CPU负载需要20%时,网关系统配置q为20%,需要扩容降低系统CPU占用到60%,则需要增加(4*(0.8-0.2))/0.4-4台机器,也就是扩容两台。当负载高于某个数值时,停止。判定是否需要排队等待,有需要进行排队等待的,则自动扩容,重复上述流程,直至流量均衡。
自动缩容:当30分钟内,机器的CPU使用率,降低满足低于原机器的20%时,触发缩容检测。缩容是逐台机器缩容,当CPU使用率高于30%时,自动缩容,重复上述流程,直至流量均衡。
网关集群的扩容是网关管理系统调用阿里云机器上下线接口进行上下线,调用业务部署系统进行业务部署,自动运维,实时保障业务。扩容时会同时增加网关本身与上游服务器的机器数量。缩容时,调用阿里云机器上下线接口进行缩容,减少机器数量,降低服务器成本。
按照阿里云的收费规则,一天内使用单台服务器4小时的费用比使用超过8小时或者固定使用的费用低,本发明能够降低服务器成本。而我司一天的高峰期也就饭点的4个小时。
通过以上各实施例可知,本申请存在的有益效果是:
本申请提供的基于单向传输协议的面向多服务网关的限流与自动扩缩容方法可以能够在限流的基础上,在高峰期增加服务器数量,保障业务正常,在低谷时,返还服务器,降低成本。
上面通过附图和实施例,对本发明的技术方案做虽然已经通过例子对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上例子仅是为了进行说明,而不是为了限制本发明的范围。尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。本发明的范围由所附权利要求来限定。
Claims (8)
1.一种面向多服务网关的限流与自动扩缩容方法,其特征在于,包括步骤:
提供OpenResty,为在nginx上运行的lua脚本提供插件接口,所述插件接口包括:限流插件接口、特征防刷插件接口、访问控制插件接口、防火墙插件接口和SQL防注入插件接口;
将服务参数和OpenResty源码通过集群makefile编译,动态生成nginx.conf文件,其中,所述服务参数包括:服务的连接数、网关规则数据的配置以及与nginx对应的配置;
根据所述nginx.conf文件部署与服务相对应的服务网关,统计各所述服务的流量,并将所述流量发送至网关系统;
所述服务根据zabbix通过所述服务的负载,并将所述负载发送至所述网关系统;
所述网关系统实时监测所述流量和所述负载,当所述流量和所述负载不匹配时,进行自动扩缩容,所述自动扩缩容包括自动扩容计算和自动缩容计算;
所述流量为所述服务在同一时刻处理的并发数,预设所述并发数阈值,当所述并发数超过所述并发数阈值时对所述并发数进行动态限流,同时将超过所述并发数阈值的所述并发数放置在所述网关服务待处理的队列中,其中,所述并发数为所述服务的CPU和内存最先到达80%的并发数;
将超过所述并发数阈值的所述并发数放置在所述网关服务待处理的队列中,设置待处理排队时间阈值,
当所述待处理排队时间超过所述待处理排队时间阈值时,同时接受到请求时,触发所述自动扩容计算;
当所述待处理排队时间超过所述待处理排队时间阈值时,同时未接受到请求时,触发所述自动缩容计算。
3.根据权利要求2所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述服务的CPU使用率通过所述服务中zabbix实时监控。
5.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,
当所述集群makefile编译时,根据所述集群makefile标识和所述标识对应的服务文件生成所述nginx.conf文件,并根据所述nginx.conf文件部署与服务相对应的服务网关;
当所述集群makefile编译后,将所述服务文件发送至所述nginx.conf文件中,同根据所述服务文件生成内存中的数据对象,为所述Lua脚本提供运行环境。
6.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述OpenResty通过桥接执行所述插件接口。
7.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述OpenResty还包括限流插件,通过所述限流插件调整所述并发数和超过所述并发数阈值的所述并发数。
8.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述服务参数的格式为json。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911237025.2A CN110933097B (zh) | 2019-12-05 | 2019-12-05 | 面向多服务网关的限流与自动扩缩容方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911237025.2A CN110933097B (zh) | 2019-12-05 | 2019-12-05 | 面向多服务网关的限流与自动扩缩容方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110933097A true CN110933097A (zh) | 2020-03-27 |
CN110933097B CN110933097B (zh) | 2022-06-28 |
Family
ID=69857311
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911237025.2A Active CN110933097B (zh) | 2019-12-05 | 2019-12-05 | 面向多服务网关的限流与自动扩缩容方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110933097B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111625588A (zh) * | 2020-05-29 | 2020-09-04 | 北京思特奇信息技术股份有限公司 | 一种共享分布式数据采集数据的方法和系统 |
CN111796938A (zh) * | 2020-06-30 | 2020-10-20 | 中国工商银行股份有限公司 | 集群动态并发控制方法及装置 |
CN112398945A (zh) * | 2020-11-16 | 2021-02-23 | 中国工商银行股份有限公司 | 一种基于背压的业务处理方法及装置 |
CN113630310A (zh) * | 2020-05-06 | 2021-11-09 | 北京农信互联科技集团有限公司 | 一种分布式高可用网关系统 |
CN114125055A (zh) * | 2021-11-30 | 2022-03-01 | 神州数码系统集成服务有限公司 | 多协议自动适配云原生网关系统控制方法、系统、设备及应用 |
CN114500661A (zh) * | 2021-12-22 | 2022-05-13 | 新奥新智科技有限公司 | 一种限流设备、方法、装置及存储介质 |
CN114553705A (zh) * | 2022-02-18 | 2022-05-27 | 平安国际智慧城市科技股份有限公司 | 服务器动态扩容方法、装置、电子设备及存储介质 |
CN114615141A (zh) * | 2022-03-11 | 2022-06-10 | 贝壳找房网(北京)信息技术有限公司 | 通信控制方法 |
CN115174479A (zh) * | 2022-07-19 | 2022-10-11 | 天翼云科技有限公司 | 一种流量控制方法及装置 |
CN115296959A (zh) * | 2022-07-25 | 2022-11-04 | 紫光云技术有限公司 | 一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150319762A1 (en) * | 2014-04-30 | 2015-11-05 | Affirmed Networks, Inc. | Optimizing capacity expansion in a mobile network |
CN106227605A (zh) * | 2016-07-26 | 2016-12-14 | 北京北森云计算股份有限公司 | 一种多语言云编译的动态微服务扩容方法及装置 |
CN106470219A (zh) * | 2015-08-17 | 2017-03-01 | 阿里巴巴集团控股有限公司 | 计算机集群的扩容和缩容方法及设备 |
CN108268305A (zh) * | 2017-01-04 | 2018-07-10 | 中国移动通信集团四川有限公司 | 用于虚拟机自动扩缩容的系统和方法 |
CN108667654A (zh) * | 2018-04-19 | 2018-10-16 | 北京奇艺世纪科技有限公司 | 服务器集群自动扩容方法及相关设备 |
CN108965381A (zh) * | 2018-05-31 | 2018-12-07 | 康键信息技术(深圳)有限公司 | 基于Nginx的负载均衡实现方法、装置、计算机设备和介质 |
-
2019
- 2019-12-05 CN CN201911237025.2A patent/CN110933097B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150319762A1 (en) * | 2014-04-30 | 2015-11-05 | Affirmed Networks, Inc. | Optimizing capacity expansion in a mobile network |
CN106470219A (zh) * | 2015-08-17 | 2017-03-01 | 阿里巴巴集团控股有限公司 | 计算机集群的扩容和缩容方法及设备 |
CN106227605A (zh) * | 2016-07-26 | 2016-12-14 | 北京北森云计算股份有限公司 | 一种多语言云编译的动态微服务扩容方法及装置 |
CN108268305A (zh) * | 2017-01-04 | 2018-07-10 | 中国移动通信集团四川有限公司 | 用于虚拟机自动扩缩容的系统和方法 |
CN108667654A (zh) * | 2018-04-19 | 2018-10-16 | 北京奇艺世纪科技有限公司 | 服务器集群自动扩容方法及相关设备 |
CN108965381A (zh) * | 2018-05-31 | 2018-12-07 | 康键信息技术(深圳)有限公司 | 基于Nginx的负载均衡实现方法、装置、计算机设备和介质 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113630310A (zh) * | 2020-05-06 | 2021-11-09 | 北京农信互联科技集团有限公司 | 一种分布式高可用网关系统 |
CN113630310B (zh) * | 2020-05-06 | 2024-02-02 | 北京农信数智科技有限公司 | 一种分布式高可用网关系统 |
CN111625588A (zh) * | 2020-05-29 | 2020-09-04 | 北京思特奇信息技术股份有限公司 | 一种共享分布式数据采集数据的方法和系统 |
CN111796938A (zh) * | 2020-06-30 | 2020-10-20 | 中国工商银行股份有限公司 | 集群动态并发控制方法及装置 |
CN112398945B (zh) * | 2020-11-16 | 2022-12-20 | 中国工商银行股份有限公司 | 一种基于背压的业务处理方法及装置 |
CN112398945A (zh) * | 2020-11-16 | 2021-02-23 | 中国工商银行股份有限公司 | 一种基于背压的业务处理方法及装置 |
CN114125055A (zh) * | 2021-11-30 | 2022-03-01 | 神州数码系统集成服务有限公司 | 多协议自动适配云原生网关系统控制方法、系统、设备及应用 |
CN114125055B (zh) * | 2021-11-30 | 2023-12-12 | 神州数码系统集成服务有限公司 | 多协议自动适配云原生网关系统控制方法、系统、设备及应用 |
CN114500661A (zh) * | 2021-12-22 | 2022-05-13 | 新奥新智科技有限公司 | 一种限流设备、方法、装置及存储介质 |
CN114553705A (zh) * | 2022-02-18 | 2022-05-27 | 平安国际智慧城市科技股份有限公司 | 服务器动态扩容方法、装置、电子设备及存储介质 |
CN114615141A (zh) * | 2022-03-11 | 2022-06-10 | 贝壳找房网(北京)信息技术有限公司 | 通信控制方法 |
CN115174479B (zh) * | 2022-07-19 | 2023-10-13 | 天翼云科技有限公司 | 一种流量控制方法及装置 |
CN115174479A (zh) * | 2022-07-19 | 2022-10-11 | 天翼云科技有限公司 | 一种流量控制方法及装置 |
CN115296959A (zh) * | 2022-07-25 | 2022-11-04 | 紫光云技术有限公司 | 一种使用Nginx+Lua脚本替代SpringCloudGateway网关的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110933097B (zh) | 2022-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110933097B (zh) | 面向多服务网关的限流与自动扩缩容方法 | |
US10880400B2 (en) | Programming a data network device using user defined scripts | |
US20200389406A1 (en) | System for bandwidth optimization with traffic priority determination | |
US11310108B2 (en) | Secure configuration of cloud computing nodes | |
US11582163B2 (en) | System for early system resource constraint detection and recovery | |
US10498765B2 (en) | Virtual infrastructure perimeter regulator | |
US20070274285A1 (en) | System and method for configuring a router | |
US7962633B1 (en) | Network service management using customizable business-level rules | |
US20070274230A1 (en) | System and method for modifying router firmware | |
US20100058329A1 (en) | Method and apparatus for dynamically instantiating services using a service insertion architecture | |
EP2039121B1 (en) | Method of providing services in a network, network element | |
US20070274314A1 (en) | System and method for creating application groups | |
US9426088B2 (en) | System and method for cloud-based implementation of control of focused overload of service element (COFO-SE) via explicit (or virtualized) machine-to-machine (M2M) gateway element | |
US20160373361A1 (en) | System for bandwidth optimization with high priority traffic awareness and control | |
WO2006074008A2 (en) | Managed quality of service for users and applications over shared networks | |
CN110120884B (zh) | 管理订户登录的宽带网络网关控制器和方法及边缘路由器 | |
US10469559B2 (en) | Quality of service for web real-time communication networks | |
CN109842895A (zh) | 一种网络可靠性配置方法、信息传输方法和装置以及系统 | |
CN105592134B (zh) | 一种负载分担的方法和装置 | |
US10749904B2 (en) | Programming a data network device using user defined scripts with licenses | |
KR101352694B1 (ko) | Sip 서블릿 애플리케이션 공동 호스팅 방법, 서버 및 컴퓨터 판독 가능한 저장매체 | |
CN110011850B (zh) | 云计算系统中服务的管理方法和装置 | |
CN115883309B (zh) | 基于saas模式的多业务上下游多协议接入平台及方法 | |
WO2020048504A1 (zh) | 网络功能所需资源的部署方法、装置、存储介质及电子装置 | |
CA2547448A1 (en) | System and method for configuring a router |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231225 Address after: 200331, Room 515, No. 788 Zhenbei Road, Putuo District, Shanghai Patentee after: Meizhiwei (Shanghai) Information Technology Co.,Ltd. Address before: 201207 Room 302, building 88, Lane 887, Zuchongzhi Road, pilot Free Trade Zone, Pudong New Area, Shanghai Patentee before: DELICIOUS NOWAIT (SHANGHAI) INFORMATION TECHNOLOGY CO.,LTD. |