CN107256235A - 一种缓存系统热点数据访问方法 - Google Patents

一种缓存系统热点数据访问方法 Download PDF

Info

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
Application number
CN201710357388.4A
Other languages
English (en)
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.)
Wuhan Purvar Big Data Technology Co Ltd
Original Assignee
Wuhan Purvar Big Data 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 Wuhan Purvar Big Data Technology Co Ltd filed Critical Wuhan Purvar Big Data Technology Co Ltd
Priority to CN201710357388.4A priority Critical patent/CN107256235A/zh
Publication of CN107256235A publication Critical patent/CN107256235A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1012Design facilitation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/16General purpose computing application
    • G06F2212/163Server 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中,三个阶段包括采样阶段、定位阶段和查询阶段。
CN201710357388.4A 2017-05-19 2017-05-19 一种缓存系统热点数据访问方法 Pending CN107256235A (zh)

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)

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

* Cited by examiner, † Cited by third party
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闪存的页面置换方法

Patent Citations (4)

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

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