CN107256235A - 一种缓存系统热点数据访问方法 - Google Patents
一种缓存系统热点数据访问方法 Download PDFInfo
- Publication number
- CN107256235A CN107256235A CN201710357388.4A CN201710357388A CN107256235A CN 107256235 A CN107256235 A CN 107256235A CN 201710357388 A CN201710357388 A CN 201710357388A CN 107256235 A CN107256235 A CN 107256235A
- Authority
- CN
- China
- Prior art keywords
- focus
- key
- server
- hotkey
- data access
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/12—Replacement control
- G06F12/121—Replacement control using replacement algorithms
- G06F12/123—Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1012—Design facilitation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/16—General purpose computing application
- G06F2212/163—Server or database system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种缓存系统热点数据访问方法,包括以下步骤:S1:在redis的DS上面增加HotKey模块,默认DS启动后开启HotKey模块,用接口随时控制启停热点统计功能,热点统计功能启动后,做相关初始化;S2:将服务器识别热点的HotKey逻辑加在worker线程里,每个到达服务器的读请求首先竞争一把try锁,获取锁成功后,经历三个阶段,统计成功经过三个阶段的请求;S3:当服务器端反馈有热点产生时,客户端首先将该feedback包中的key写入local‑cache,同时开启hot‑running模式。本发明在原有集群的基础上做修改,不改变集群部署,对应用透明,方法简单,使用方便。
Description
技术领域
本发明涉及数据访问技术领域,尤其涉及一种缓存系统热点数据访问方法。
背景技术
Redis是当前企业广泛使用的分布式K-V缓存系统,在该系统上进行读写时,会根据key的hash计算出一台固定的server来存取该K-V;因此在实际应用中,某些高峰时段,会大量请求同一个Key(可能对应应用的某个促销商品、热点新闻、热点评论等),根据key的hash,所有读请求都将落到同一个server上,该机器的负载就会严重加剧,此时整个系统增加server也没有任何用处,因为根据hash算法,同一个key的请求还是会落到同一台新机器上,该机器成为系统瓶颈;这个问题称为“热点key”问题;
解决热点问题有很多办法,如果不能从业务的角度将热点拆分,那么只能采取多份数据的形式分担(C/S分摊,服务端线程间、机器间、集群间分摊);比如用户如果提前知道某些key可能成为热点,那么客户端可以提前拆分热点key;也可以搭建一个备用集群,写的时候双写,然后随机双读;这些方案都有各自的缺点;因此,我们提出了一种缓存系统热点数据访问方法用于解决上述问题。
发明内容
基于背景技术存在的技术问题,本发明提出了一种缓存系统热点数据访问方法。
本发明提出的一种缓存系统热点数据访问方法,包括以下步骤:
S1:在redis的DS上面增加HotKey模块,默认DS启动后开启HotKey模块,用接口随时控制启停热点统计功能,热点统计功能启动后,做相关初始化;
S2:将服务器识别热点的HotKey逻辑加在worker线程里,每个到达服务器的读请求首先竞争一把try锁,获取锁成功后,经历三个阶段,统计成功经过三个阶段的请求;
S3:当服务器端反馈有热点产生时,客户端首先将该feedback包中的key写入local-cache,同时开启hot-running模式,该模式下只能写入服务端反馈的带热点标记的key,local-cache中非热点的key将逐步被淘汰。
优选地,所述S1中,DS为dataserver。
优选地,所述S1中,相关初始化包括设定统计热点key时要关注的opcode操作序列列表、设定采样次数、设定热点QPS阈值、设定服务器端热点key容量上限和每个热点key在服务器的生命周期。
优选地,所述S2中,三个阶段包括采样阶段、定位阶段和查询阶段。
本发明中,所述一种缓存系统热点数据访问方法在原有集群的基础上做修改,不改变集群部署,对应用透明;主要分为两个模块服务端热点统计和客户端Localcache逻辑;即在data-server上面运行热点统计逻辑,对每个到达的读请求,提取出key进行统计,并计算出当前请求中的热点key,同时当客户端访问的正好是热key,则向客户端回一个热点反馈feedback包;客户端收到feedback包之后,就将携带的hot-key写入客户端local-cache,同时拒绝非热key写入local-cache,方法简单,使用方便。
具体实施方式
下面结合具体实施例对本发明作进一步解说。
实施例
本实施例提出了一种缓存系统热点数据访问方法,包括以下步骤:
S1:在redis的DS上面增加HotKey模块,默认DS启动后开启HotKey模块,用接口随时控制启停热点统计功能,热点统计功能启动后,做相关初始化;
S2:将服务器识别热点的HotKey逻辑加在worker线程里,每个到达服务器的读请求首先竞争一把try锁,获取锁成功后,经历三个阶段,统计成功经过三个阶段的请求;
S3:当服务器端反馈有热点产生时,客户端首先将该feedback包中的key写入local-cache,同时开启hot-running模式,该模式下只能写入服务端反馈的带热点标记的key,local-cache中非热点的key将逐步被淘汰。
本实施例中,S1中,DS为dataserver,S1中,相关初始化包括设定统计热点key时要关注的opcode操作序列列表、设定采样次数、设定热点QPS阈值、设定服务器端热点key容量上限和每个热点key在服务器的生命周期,S2中,三个阶段包括采样阶段、定位阶段和查询阶段,一种缓存系统热点数据访问方法在原有集群的基础上做修改,不改变集群部署,对应用透明;主要分为两个模块服务端热点统计和客户端Localcache逻辑;即在data-server上面运行热点统计逻辑,对每个到达的读请求,提取出key进行统计,并计算出当前请求中的热点key,同时当客户端访问的正好是热key,则向客户端回一个热点反馈feedback包;客户端收到feedback包之后,就将携带的hot-key写入客户端local-cache,同时拒绝非热key写入local-cache,方法简单,使用方便。
本实施例中,采样阶段包括以下步骤:
S1、判断本请求的opcode是否在配置的opcode列表里面;
S2、维护1024个桶,将每个请求上的pick-key哈希到桶,记录每个桶的命中数,记录当前采样次数(redis每个请求中的key形式会有pkey-skey、multi-key、single-key等,如何对他们中的有效部分做统计,后面详细叙述,这里统称有效key为pick-key);
S3、当采样次数达到sample_max(服务器配置)时,计算这些桶的标准差和均值,同时记下最大的桶号;
S4、如果这些桶的标准差大于均值的N倍(设定系数),则认为存在热点,当最大的桶号的QPS大于阈值,那么最大的桶号就是当前热桶,进入定位阶段,同时进入下一个采样周期。
即热点现象判断公式为:
所有桶的count计数的标准差>这些桶的count计数的均值*N(系数)。
定位阶段包括以下步骤:
S1、接下来会再统计reap_max次命中了热桶的请求,计算出热桶中的每个pick-key的访问次数,统计reap_max次停止;
S2、挑选计数最大的X个pick-key,如果X个中的某些pick-key的QPS大于阈值,则这些key被认定为热key;
S3、将判定为hot的pick-key加入服务器热点LRU链表,同时进入下一个定位周期,释放本次try锁。
查询阶段包括以下步骤:
S1、对到达服务器的每一个读请求,都会取出pick-key,然后查询服务器LRU链表;
S2、如果命中,则对该pick-key标记为热点;
S3、该请求结束后,会额外发送一个feedback包,携带热点key,通知客户端;
S4、至此,服务器hot-key逻辑结束。
本实施例依赖于redis客户端的Local-cache,它是redis客户端自带的缓存功能,能将写入服务器的key-value,缓存在本地读取,其容量非常有限;使用local-cache需注意以下几个细节问题:
1、Localcache与redis-server间如何同步
当客户端打开cache功能后,每次写操作强制删除本地cache的key,读操作时,更新后端服务器的值到本地cache。
2、Localcache数据淘汰
由于客户端机器配置有限,Localcache只能缓存部分K-V;因此客户端Localcache有两种淘汰机制以防内存消耗过多,过期淘汰和容量逐出。
过期淘汰,即当读server操作成功后,更新Localcache时,会将每个key设置一个在Localcache中合理的过期时间(默认30ms);应用使用redis客户端时,大多是多线程访问;试想当多个线程发现某个key的存活超过过期时间时,会做什么处理呢?会有大量请求击穿Localcache,访问后端redis。
为了解决这样的洪流问题,这里加了一个过期时间续期的操作;当多个线程并发读取某个key时,第一个竞争到锁的线程会判断key的过期时间,如果已经过期,则返回null,并对该key续期(即延长过期时间),由于返回的是null,该线程会击穿Localcache继续向server发起请求,并更新本地Localcache;其他线程访问key时,已经是续期之后,这些线程的访问该key时,就不会发现已经过期,读到的是老的value,等到第一个线程完成server端key-value到Localcache的更新结束后,所有线程都将读到新value;这样的好处是不会在某个key过期时间一到就击穿Localcache,并大量的访问server,对server造成压力。
3、Clone机制
Clone要解决的问题是:当客户端需要将key对应的value写入到Localcache时,很多场景需要深clone,以防止同一个对象在Localcache之外被修改,从而造成Localcache中的value与后端server的value不一致。
但是clone操作本身很耗费CPU,如果每次往Localcache中写value都需要clone的话,非常影响性能;并且大多数情况,用户访问一个key的机会只有一次,比如一个for迭代循环,每次访问不同(key+i),就需要把每个key对应的value,clone一次再写入Local-cache中;这样做有两个问题:一是非常耗时;二是:并写入Localcache中的K-V没有第二次命中的机会,这是不必要的clone。
因此我们clone的机制是,第一次写Localcache时,只把null当做value写入;当Localcache中该key还有第二次机会被访问时,客户端拿到null就会重新去服务器读最新数据,然后我们就真实的clone一次服务端读到的value并写入Localcache中;我们认为该key有第二次读到就会有更多次机会被读到。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (4)
1.一种缓存系统热点数据访问方法,其特征在于,包括以下步骤:
S1:在redis的DS上面增加HotKey模块,默认DS启动后开启HotKey模块,用接口随时控制启停热点统计功能,热点统计功能启动后,做相关初始化;
S2:将服务器识别热点的HotKey逻辑加在worker线程里,每个到达服务器的读请求首先竞争一把try锁,获取锁成功后,经历三个阶段,统计成功经过三个阶段的请求;
S3:当服务器端反馈有热点产生时,客户端首先将该feedback包中的key写入local-cache,同时开启hot-running模式。
2.根据权利要求1所述的一种缓存系统热点数据访问方法,其特征在于,所述S1中,DS为data server。
3.根据权利要求1所述的一种缓存系统热点数据访问方法,其特征在于,所述S1中,相关初始化包括设定统计热点key时要关注的opcode操作序列列表、设定采样次数、设定热点QPS阈值、设定服务器端热点key容量上限和每个热点key在服务器的生命周期。
4.根据权利要求1所述的一种缓存系统热点数据访问方法,其特征在于,所述S2中,三个阶段包括采样阶段、定位阶段和查询阶段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710357388.4A CN107256235A (zh) | 2017-05-19 | 2017-05-19 | 一种缓存系统热点数据访问方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710357388.4A CN107256235A (zh) | 2017-05-19 | 2017-05-19 | 一种缓存系统热点数据访问方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107256235A true CN107256235A (zh) | 2017-10-17 |
Family
ID=60027519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710357388.4A Pending CN107256235A (zh) | 2017-05-19 | 2017-05-19 | 一种缓存系统热点数据访问方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107256235A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107908695A (zh) * | 2017-10-31 | 2018-04-13 | 平安普惠企业管理有限公司 | 业务系统运行方法、装置、系统及可读存储介质 |
CN108234481A (zh) * | 2017-12-29 | 2018-06-29 | 上海品顺信息科技有限公司 | 一种控制多机分布式访问外部系统的方法及分布式系统 |
CN108737898A (zh) * | 2018-05-23 | 2018-11-02 | 武汉斗鱼网络科技有限公司 | 一种热点直播推送方法、服务器及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103095686A (zh) * | 2012-12-19 | 2013-05-08 | 华为技术有限公司 | 热点元数据访问控制方法和服务器 |
CN103177005A (zh) * | 2011-12-21 | 2013-06-26 | 深圳市腾讯计算机系统有限公司 | 一种数据访问的处理方法和系统 |
CN104794064A (zh) * | 2015-04-21 | 2015-07-22 | 华中科技大学 | 一种基于区域热度的缓存管理方法 |
CN106294197A (zh) * | 2016-08-05 | 2017-01-04 | 华中科技大学 | 一种面向nand闪存的页面置换方法 |
-
2017
- 2017-05-19 CN CN201710357388.4A patent/CN107256235A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103177005A (zh) * | 2011-12-21 | 2013-06-26 | 深圳市腾讯计算机系统有限公司 | 一种数据访问的处理方法和系统 |
CN103095686A (zh) * | 2012-12-19 | 2013-05-08 | 华为技术有限公司 | 热点元数据访问控制方法和服务器 |
CN104794064A (zh) * | 2015-04-21 | 2015-07-22 | 华中科技大学 | 一种基于区域热度的缓存管理方法 |
CN106294197A (zh) * | 2016-08-05 | 2017-01-04 | 华中科技大学 | 一种面向nand闪存的页面置换方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107908695A (zh) * | 2017-10-31 | 2018-04-13 | 平安普惠企业管理有限公司 | 业务系统运行方法、装置、系统及可读存储介质 |
CN108234481A (zh) * | 2017-12-29 | 2018-06-29 | 上海品顺信息科技有限公司 | 一种控制多机分布式访问外部系统的方法及分布式系统 |
CN108234481B (zh) * | 2017-12-29 | 2020-10-30 | 上海品顺信息科技有限公司 | 一种控制多机分布式访问外部系统的方法及分布式系统 |
CN108737898A (zh) * | 2018-05-23 | 2018-11-02 | 武汉斗鱼网络科技有限公司 | 一种热点直播推送方法、服务器及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10176057B2 (en) | Multi-lock caches | |
US11307765B2 (en) | System and methods for storage data deduplication | |
Li et al. | {CacheDedup}: In-line Deduplication for Flash Caching | |
US9268653B2 (en) | Extent metadata update logging and checkpointing | |
EP1654660B1 (en) | A method of data caching | |
US7725661B2 (en) | Data-aware cache state machine | |
US9940060B1 (en) | Memory use and eviction in a deduplication storage system | |
US9971513B2 (en) | System and method for implementing SSD-based I/O caches | |
US8874842B1 (en) | Set-associative hash table organization for efficient storage and retrieval of data in a storage system | |
EP3066572B1 (en) | Cache memory budgeted by chunks based on memory access type | |
US20140108723A1 (en) | Reducing metadata in a write-anywhere storage system | |
US10366010B1 (en) | Cache memory data management using relative access frequency | |
CN107077300A (zh) | 用于平衡分段清除与i/o工作负载的速率匹配技术 | |
US9229869B1 (en) | Multi-lock caches | |
US20060069876A1 (en) | Method and system of clock with adaptive cache replacement and temporal filtering | |
CN107256235A (zh) | 一种缓存系统热点数据访问方法 | |
US9558123B2 (en) | Retrieval hash index | |
EP2212795A2 (en) | Statistical counting for memory hierarchy optimization | |
US20150134915A1 (en) | Efficient caching system | |
US20020143799A1 (en) | Memory record update filtering | |
CN112799590A (zh) | 一种针对在线主存储重删的差异化缓存方法 | |
Zaidenberg et al. | New caching algorithms performance evaluation | |
US11132128B2 (en) | Systems and methods for data placement in container-based storage systems | |
Wang et al. | A new hierarchical data cache architecture for iSCSI storage server | |
Owda et al. | A comparison of page replacement algorithms in Linux memory management |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171017 |