CN116339933A - 一种提高Redis集群可用性的方法 - Google Patents
一种提高Redis集群可用性的方法 Download PDFInfo
- Publication number
- CN116339933A CN116339933A CN202111557032.8A CN202111557032A CN116339933A CN 116339933 A CN116339933 A CN 116339933A CN 202111557032 A CN202111557032 A CN 202111557032A CN 116339933 A CN116339933 A CN 116339933A
- Authority
- CN
- China
- Prior art keywords
- request
- token
- availability
- improving
- redis
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 26
- 230000002618 waking effect Effects 0.000 claims abstract 2
- 238000004891 communication Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明提供本发明提供一种提高Redis集群可用性的方法,应用于包括Proxy层的Redis集群系统,所述Proxy层包括限流器和token池,当所述Proxy接收到请求时,查询token池中是否有闲置token的步骤,如果有,则为所述请求建立访问连接;如果没有,则把所述请求加入等待队列中。所述限流器每隔周期T释放数量为Q的token到所述token池。每次释放所述token后,从头遍历所述等待队列,按先进先出调度法唤醒所述队列中的请求并为之建立连接。
Description
技术领域
本发明的方法涉及一种服务器集群技术,具体而言,涉及基于Redis服务器集群的服务可用性改进方法。
背景技术
对于数据存储领域,当数据量或者请求流量大到一定程度后,就必然需要引入集群。目前架设服务器集群的一种常用方案是基于Redis框架,而Redis框架使用的是一种叫做Gossip 的通信协议,简言之,Gossip协议模式下,集群内的每个实例都需要知道其它所有实例的状态信息、都需要与其它所有节点进行通信。一方面,Redis框架虽然高效,但是每个单机能够支持的QPS通常不超过8万,再多QPS就需要引入更多实例,另一方面,由于Gossip协议的通信模式,当节点数据增加到一定程度时,集群的服务可用性会严重衰退——节点之间的通信复杂度随节点的增加呈几何级数增长。
为消除节点间通信带来的压力,一种改进的方式是在集群前端引入Proxy层进行分片管理(如图1所示),从而理论上能通过线性扩容来应对增加的QPS。但这一方案在实践中仍然不能完全解决QPS过高时的服务可用性问题:当QPS过高时,Proxy层处理连接请求会占据过长时间,导致Proxy层处理客户端的读写请求时间变长,最终导致客户端很多连接读写超时,主动关掉连接重新与Proxy层建连,使得Proxy层接收到建立连接请求QPS越来越高,最终引发Proxy层雪崩,导致服务几乎不可用。
发明内容
鉴于以上所述现有技术的缺点,本发明提供一种提高Redis集群可用性的方法,应用于包括Proxy层的Redis集群系统,所述Proxy层包括限流器和token池,当所述Proxy接收到请求时,查询token池中是否有闲置token的步骤,如果有,则为所述请求建立访问连接;如果没有,则把所述请求加入等待队列中。
优选地,上述提高Redis集群可用性的方法中,所述限流器每隔周期T释放数量为Q的 token到所述token池。
优选地,上述提高Redis集群可用性的方法中,所述Proxy层配置为多线程模式,且每个所述线程分配最大可用token数Q*T/1000/thread_num。
优选地,上述提高Redis集群可用性的方法中,所述的周期T优选为200ms。
优选地,上述提高Redis集群可用性的方法中,所述的释放数量Q的优选为每周期T内释放3000个。
优选地,上述提高Redis集群可用性的方法中,每次释放所述token后,从头遍历所述等待队列,按先进先出调度法唤醒所述队列中的请求并为之建立连接。
优选地,上述提高Redis集群可用性的方法中,所述Proxy设置为多线程工作模式,且线程数为8~12个。
附图说明
图1所示为本发明适用的集群系统的逻辑框图;
图2所示为本发明一种实施方式的流程图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
本发明应用于图1所示的逻辑架构的基础上。但本发明实施时,在Proxy层中加入限流器和令牌(token)池。限流器每隔一个固定的时间周期T释放数量为Q的token存入token 池。
Proxy收到请求后的处理流程如图2,图2所示为本发明一种实施方式的流程图。首先,收到请求后,Proxy先到token池中查看是否有闲置的token。如果有,则为请求建立连接,同时调整token池中闲置token的数量。如果没有闲置token,则同时把请求加入限流器的等待(pending)队列中,下个周期释放token会从头遍历这个pending队列,按先进先出调度法唤醒客户端建立连接。
当QPS过高时,尤其是偶发的QPS高峰,通过上述的令牌机制,能够对集群的服务形成保护,将突发的QPS高峰在分布在时间纬度上分摊。但为了避免token数量不足引发的响应时间过长,上述的方法中,时间周期T(ms为单位)、token数量Q的设置则非常重要,根据实测,时间周期T设置为200毫秒、Q设置为3000个时,对于大部分的场景均能适用且均衡性较好。
如果将Proxy服务器配置为多线程模式,还可以为每个线程分配一个最大可用token数m,当一个线程请求建立连接时,如果该线程已被分配的token数达到了m,则即使token池中有闲置token,也不再分配给该线程,这有利于解决数据倾斜问题。Proxy多线程模式下,线程数量不宜配置过多,一般而言8~12个线程,每个线程每个周期内分配的token数一般不应该大于Q*T/1000/thread_num个,否则分配最大线程数的作用明显变弱。其中,thread_num是 Proxy中的线程总数。
综上所述,本发明的提高Redis集群可用性的方法,能有效地避免突发性QPS高峰给Redis 集群带来的可用性威胁,且实现简单,因此具有较高的产业价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。此外,本发明的slave、节点、系统、数据库均为逻辑实体,实践中可以是物理上单独的配备软、硬件计算机,也可以只是通用计算机上具有同样功能的软件模块。
Claims (7)
1.一种提高Redis集群可用性的方法,应用于包括Proxy层的Redis集群系统,所述Proxy层包括限流器和token池,当所述Proxy接收到请求时,查询token池中是否有闲置token的步骤,如果有,则为所述请求建立访问连接;如果没有,则把所述请求加入等待队列中。
2.根据权利要求1所述的提高Redis集群可用性的方法,其特征在于,所述限流器每隔周期T释放数量为Q的token到所述token池。
3.根据权利要求2所述的提高Redis集群可用性的方法,其特征在于,所述Proxy层配置为多线程模式,且每个所述线程在每个所述周期内分配的最大可用token数为Q*T/1000/thread_num个,其中thread_num表示线程数。
4.根据权利要求2所述的提高Redis集群可用性的方法,其特征在于,所述的周期T优选为200ms。
5.根据权利要求2所述的提高Redis集群可用性的方法,其特征在于,每次释放所述token后,从头遍历所述等待队列,按先进先出调度法唤醒所述队列中的请求并为之建立连接。
6.根据权利要求4所述的提高Redis集群可用性的方法,其特征在于,所述的释放数量Q的优选为每周期T内释放3000个。
7.根据权利要求3所述的提高Redis集群可用性的方法,其特征在于,所述线程数为8~12个。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111557032.8A CN116339933A (zh) | 2021-12-18 | 2021-12-18 | 一种提高Redis集群可用性的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111557032.8A CN116339933A (zh) | 2021-12-18 | 2021-12-18 | 一种提高Redis集群可用性的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116339933A true CN116339933A (zh) | 2023-06-27 |
Family
ID=86876380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111557032.8A Pending CN116339933A (zh) | 2021-12-18 | 2021-12-18 | 一种提高Redis集群可用性的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116339933A (zh) |
-
2021
- 2021-12-18 CN CN202111557032.8A patent/CN116339933A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3610120B2 (ja) | トランザクション・システム内のサーバの数を動的に制御する方法 | |
EP0798638B1 (en) | Periodic process scheduling method | |
US8225048B2 (en) | Systems and methods for resource access | |
CN107241281B (zh) | 一种数据处理方法及其装置 | |
KR100817676B1 (ko) | 동적 클래스-기반 패킷 스케쥴링 방법 및 장치 | |
CN113422842B (zh) | 一种考虑网络负载的分布式电力用电信息数据采集系统 | |
EP3054382A1 (en) | Busy - wait loop | |
US6848107B1 (en) | Message control apparatus | |
US20100037231A1 (en) | Method for reading/writing data in a multithread system | |
US20070116049A1 (en) | Dynamic power management for I/O resource pools | |
US20030158883A1 (en) | Message processing | |
CN111586140A (zh) | 一种数据交互的方法及服务器 | |
CN112035255A (zh) | 线程池资源管理任务处理方法、装置、设备及存储介质 | |
US6105102A (en) | Mechanism for minimizing overhead usage of a host system by polling for subsequent interrupts after service of a prior interrupt | |
CN101299165B (zh) | 用于实施通用系统停顿的方法和系统 | |
JPH05216842A (ja) | 資源管理装置 | |
CN116414534A (zh) | 任务调度方法、装置、集成电路、网络设备及存储介质 | |
CN114020529A (zh) | 一种流表数据的备份方法、装置、网络设备和存储介质 | |
CN116633875B (zh) | 一种多业务耦合并发通信的时间保序调度方法 | |
CN111131081B (zh) | 一种支持多进程的高性能单向传输的方法和装置 | |
CN116339933A (zh) | 一种提高Redis集群可用性的方法 | |
US8473579B2 (en) | Data reception management apparatus, systems, and methods | |
US20110047553A1 (en) | Apparatus and method for input/output processing of multi-thread | |
US6694348B1 (en) | Data communication system and time slot allocating method | |
CN112965796B (zh) | 一种任务调度系统、方法和装置 |
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 |