CN110933097A - 面向多服务网关的限流与自动扩缩容方法 - Google Patents

面向多服务网关的限流与自动扩缩容方法 Download PDF

Info

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
Application number
CN201911237025.2A
Other languages
English (en)
Other versions
CN110933097B (zh
Inventor
黄超
郑国春
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Meizhiwei Shanghai Information Technology Co ltd
Original Assignee
Delicious Without Waiting (shanghai) Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Delicious Without Waiting (shanghai) Information Technology Co Ltd filed Critical Delicious Without Waiting (shanghai) Information Technology Co Ltd
Priority to CN201911237025.2A priority Critical patent/CN110933097B/zh
Publication of CN110933097A publication Critical patent/CN110933097A/zh
Application granted granted Critical
Publication of CN110933097B publication Critical patent/CN110933097B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/66Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/52Queue scheduling by attributing bandwidth to queues
    • H04L47/522Dynamic 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%的并发数;
将超过并发数阈值的并发数放置在网关服务待处理的队列中,设置待处理排队时间阈值,
当待处理排队时间超过待处理排队时间阈值时,同时接受到请求时,触发自动扩容计算;
当待处理排队时间超过待处理排队时间阈值时,同时未接受到请求时,触发自动缩容计算。
优选的,并发数根据以下方法动态限流:
Figure BDA0002305157420000021
其中,f(p)为服务对应的网关的负载,Ei(p/n)为服务的单台机器的使用率,n为服务的数量,p为服务的请求数,E(p)为服务的CPU使用率,c为服务的自身的CPU占用;θ(p)为服务的单台机器上请求数p的CPU使用率;R(p)为网关中单台服务器的CPU负载,q为空闲时服务的单台机器自身的CPU占用。
优选的,服务的CPU使用率通过服务中zabbix实时监控。
优选的,自动扩缩容需要扩容的服务的数量根据以下方法计算:
Figure BDA0002305157420000031
其中,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中,并发数根据以下方法动态限流:
Figure BDA0002305157420000091
其中,f(p)为服务对应的网关的负载,Ei(p/n)为服务的单台机器的使用率,n为服务的数量,p为服务的请求数,E(p)为服务的CPU使用率,c为服务的自身的CPU占用;θ(p)为服务的单台机器上请求数p的CPU使用率;R(p)为网关中单台服务器的CPU负载,q为空闲时服务的单台机器自身的CPU占用。
同时,其中的服务的CPU使用率通过服务中zabbix实时监控。
在步骤207中,自动扩缩容需要扩容的服务的数量根据以下方法计算:
Figure BDA0002305157420000092
其中,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为例,算法数学模型如下:
Figure BDA0002305157420000121
其中,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%时的请求数作为并发数的限制参数。取增加过去五秒内的并发数作为排队数,基本能够避免上游服务快速增加。
五秒内持续有排队数,将触发自动扩缩容。以减少请求溢出和排队。
负载判定:当排队队列持续五秒有请求时,触发自动扩容计算,当排队队列过大时,对请求进行封装,提醒用户等待重试。当排队队列持续五秒无请求时,触发自动缩容计算。
自动扩缩容需要扩容的服务的数量根据以下方法计算:
Figure BDA0002305157420000122
其中,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%的并发数;
将超过所述并发数阈值的所述并发数放置在所述网关服务待处理的队列中,设置待处理排队时间阈值,
当所述待处理排队时间超过所述待处理排队时间阈值时,同时接受到请求时,触发所述自动扩容计算;
当所述待处理排队时间超过所述待处理排队时间阈值时,同时未接受到请求时,触发所述自动缩容计算。
2.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述并发数根据以下方法动态限流:
Figure FDA0002305157410000021
其中,f(p)为所述服务对应的所述网关的负载,Ei(p/n)为所述服务的单台机器的使用率,n为所述服务的数量,p为所述服务的请求数,E(p)为所述服务的CPU使用率,c为所述服务的自身的CPU占用;θ(p)为所述服务的单台机器上请求数p的CPU使用率;R(p)为所述网关中单台服务器的CPU负载,q为空闲时所述服务的单台机器自身的CPU占用。
3.根据权利要求2所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述服务的CPU使用率通过所述服务中zabbix实时监控。
4.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,
所述自动扩缩容需要扩容的所述服务的数量根据以下方法计算:
Figure FDA0002305157410000022
其中,f(n)为所述自动扩缩容需要扩容的所述服务的数量,n为所述服务的单台机器台数,C为所述服务中单台服务器的CPU负载,q空闲时所述服务的单台机器自身的CPU占用,m为所述服务的单台机器CPU的增长。
5.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,
当所述集群makefile编译时,根据所述集群makefile标识和所述标识对应的服务文件生成所述nginx.conf文件,并根据所述nginx.conf文件部署与服务相对应的服务网关;
当所述集群makefile编译后,将所述服务文件发送至所述nginx.conf文件中,同根据所述服务文件生成内存中的数据对象,为所述Lua脚本提供运行环境。
6.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述OpenResty通过桥接执行所述插件接口。
7.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述OpenResty还包括限流插件,通过所述限流插件调整所述并发数和超过所述并发数阈值的所述并发数。
8.根据权利要求1所述的面向多服务网关的限流与自动扩缩容方法,其特征在于,所述服务参数的格式为json。
CN201911237025.2A 2019-12-05 2019-12-05 面向多服务网关的限流与自动扩缩容方法 Active CN110933097B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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的负载均衡实现方法、装置、计算机设备和介质

Patent Citations (6)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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.