Aerospike(3) - Evict机制

注:本文转自我的个人博客 Aerospike(3) - Evict机制

在实时的场景中,我们往往会对Aerospike/Redis等设置evict机制,来防止流量暴增带来的存储系统崩溃。

原理

aerospike-evict机制
aerospike-evict机制

原理如上图所示,在Aerospike中,有TTL的数据根据TTL的大小被等分在这个横轴上,每个bucket的大小由最大的TTL和设置的evict-hist-buckets来决定。其中:

bucket_width = max_ttl / evict-hist-buckets

evict-hist-buckets可以基于namespace去设置,并且可以动态修改,无需启动集群。我们会设置high-water-memory-pct或者high-water-disk-pct来决定开始evict数据的时机,当满足条件后,剩下就是等nsup线程启动,从柱状图中的第一个bucket开始驱逐。

限制

当然,实际情况不会永远这么简单。Evict机制本身就是获取与丢弃之间的博弈的产物,所以也许根本就找不到一个跟实际业务情况完全匹配的现成方案。Aerospike的evict机制并不完美,有时候存储超过了你所设置的HWM,但是并没有数据被驱逐。Aerospike3.8之后的evict机制中有两个特点:

  • evict-hist-buckets可以动态配置,也就是用户可以自定义柱状图的粒度和evict数据的粒度。
  • Evict的单位是bucket,不能将bucket中的部分数据弹出。

下面引入evict机制中的另一个参数: evict-tenths-pct

这个参数决定了每次evict的数量。举个极端例子,假设柱状图中的元素不够均匀,全部被分配到了第1个bucket上,那么不可能将第1个bucket的数据全部弹出吧?所以这就是evict-tenths-pct的作用。类似于这种情况,可以动态调整evict-hist-buckets,降低柱状图中的粒度,使得第1个bucket中的数量少于evict-tenths-pct所限制的数量,从而达到evict的目的。不过同时注意,bucket的对象也有一定的内存占用,具体可以在下面链接中查看。

所以说,这种Evict的机制也带来了一些风险,虽然比Redis的evict策略控制的更加精细化,但是在一些极端场景中,很容易出现需要手工调整参数,或者根本就无法evict的情况(几天前因为业务流量上涨刚手工调整过)。

调优

Aerospike的evict机制主要依赖于上述两个参数,如果线上出现故障,可以根据日志来调整自己的策略。在此截取部分官方的Log来加以阐释:

Apr 07 2016 13:42:17 GMT: WARNING (nsup): (thr_nsup.c:1068)
{test} no records below eviction void-time 200346037 - insufficient histogram resolution?

void-time是由evict-tenths-pct决定的threshold bucket的时间戳,这个时间戳是从2010年1月1日算起,可以理解为是Aerospike自己的时间戳。可以看出此时的threshold bucket是第1个bucket,和之前的解决方案类似,调整evict-hist-buckets即可。

Jan 30 2017 02:36:21 GMT: WARNING (nsup): (thr_nsup.c:1043) {test} no records below eviction void-time 222541923 - threshold bucket 361, width 259 sec, count 686375 > target 530312 (0.5 pct)

此时threshold bucket是361,每个bucket时间宽度为259秒,但此时在第一个Bucket中的元素为686375,超过了evict-tenths-pct设置的0.5pct的数量,所以无法evict。

参考资料

加一Blog
加一Blog
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,270评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,489评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,630评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,906评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,928评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,718评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,442评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,345评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,802评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,984评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,117评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,810评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,462评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,011评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,139评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,377评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,060评论 2 355

推荐阅读更多精彩内容