原标题:Elasticsearch 高并发写入优化的开源协同经历 | 技术头条
作者 | 腾讯开源团队
责编 | 伍杏玲
在腾讯金融科技数据应用部的全民BI项目里,我们每天面对超过10亿级的数据写入,提高es写入性能迫在眉睫,在最近的一次优化中,有幸参与到了Elasticsearch开源社区中。
背景
为了更便捷地分析数据,腾讯金融科技数据应用部去年推出了全民BI的系统。这个系统通过Elasticsearch进行基础的统计,超过10亿级的数据量需要尽可能快速地导入到es系统中。即使经过多次的参数优化,我们依然需要几个小时才能完成导入,这是系统此前存在的一大瓶颈。
在这样的背景下,我们开始决定进一步深入es,寻找优化点。
优化前的准备
我们准备了1000万的数据,并在原程序(Spark程序写入)上进行了几轮单机压测,得到了一些基本的性能数据。
机器配置:CPU 24核,内存 64G
ES基本配置:
文档数:1000万,字段400个(没有text字段)
写入耗时:26分钟CPU:80%+
寻找理论值
在往下进入深水区之前,我们需要先回顾一下es本身,es本身是基于Lucene基础上设计的分布式搜索系统,在写入方面主要提供了:
要进行优化,首先得验证一个问题:Lucene的极限速率能到达多少,所以我在我的本机上构建了这样的一个测试。
Macbook pro 15,6核12线程数据量1000万,每个document 400个字段,10个线程并发(考虑Mac CPU Turbo 4.5G ,服务器2.4G(24核),所以只采用10线程并发)验证写入耗时549s(约10分钟)。
26分钟 —> 10分钟,意味着理论上是可行的。那剩下的就看如何接近这个极限。因为那说明一定是es本身的一些默认特性导致了写入速率无法提升。
下面的介绍忽略了一些相对简单的参数调优,比如关闭docvalues,这个对于非text字段,es默认开启,对于不需要groupby的场景,是不必要的,这个可以减少不少性能。经过初步的参数优化写入耗时降低到了18分钟,这是后面继续往下优化的基础。
理解es写入的机制
es的写入流程(主分片节点)主要有下面的几步
写translog:写入文件
[ translog作用 ]
除了上面的直接流程,还有三个相关的异步流程
优化第一步:参数调优
写Lucene前面已经优化过,那么第一步的文档查找其实是在所有分段中进行查找,因为只提供了一个线程进行merge,如果merge不及时,导致分段过的,必然影响文档版本这一块的耗时。
所以我们观察了写入过程中分段数的变化:
[ 写入过程中分段的变化 ]
观察发现,分段的增长速度比预期的快很多。按照默认配置,index_buffer=10%,堆内存31G的情况,按lucene的写分段机制,平均到每个线程,也有125M,分段产生的速度不应该那么快。而这个问题的根源就是flush_threshold_size默认值只有512M ,这个参数表示在当未提交的translog日志达到该阈值的时候进行一次刷盘操作。
[ 小分段的产生 ]
[ 调整后比较缓和的分段增长 ]
测试结果一看:18分钟!基本没有效果!
理论上可行的方案,为什么却没有效果,带着这个疑问继续潜入深水区。
优化继续:线程分析
这时候就需要进行堆栈分析了,多次取样后,发现了下面的一个频繁出现的现象:
[ 被堵塞的线程 ]
发现很多线程都停在了获取锁的等待上,而writeLock被rollGeneration占用了。
写线程需要获取readLockrollGeneration拿走了writeLock,会阻塞readLock。
而在高flush_threshold_size的配置下,rollGeneration发生了300+次,每次平均耗时560ms,浪费了超过168s,而这个时间里写入线程都只能等待,小分段的优化被这个抵消了。
这里有很多的关联关系,lush操作和rollGeneration操作是互斥的,因为flush耗时较长(5~10秒左右),在默认flush_threshold_size配置下,rollGeneration并没有这么频繁在100次左右,提高flush_threshold放大了这个问题。
初步优化方案提交
因为我们在写入过程中使用的translog持久化策略是async,所以我很自然的想到了把写日志和刷盘异步化。
[ 初版提交社区的方案 ]
一开始的方案则想引入disruptor,消除写线程之间的竞争问题,后面因为es的第三方组件检查禁止使用sun.misc.Unsafe (disruptor无锁机制基于Unsafe实现)而放弃。基于这个方案,测试结果终于出现了跨越:13分钟。
初版的方案问题比较多,但是它有两个特点:
Elastic创始人加入讨论
没想到的是,在社区提交几次优化后,竟然吸引了大佬Simon Willnauer的加入。
Simon Willnauer
Simon的加入让我们重新复盘的整个问题。通过对关键的地方增加统计信息,我最终明确了关键的问题点在于FileChannel.force方法,这个操作是最耗时的一步。
sync操作会调用FileChannel.force,但没有在writer的对象锁范围中,所以影响较小。但是因为rollGeneration在writeLock中执行,所以阻塞的影响范围就变大了
跟社区讨论后,Simon最后建议了一个折中的小技巧,就是在关闭原translog文件之前(writeLock之外),先执行一次刷盘操作。
[ 代码修改 ]
这个调整的效果可以让每次rollGeneration操作的耗时从平均570ms降低到280ms,在我的基准测试中(配置flush_threhold_size=30G,该参数仅用于单索引压测设计,不能在生产环境使用),耗时会从18分钟下降到15分钟。
事实上,这并不是一个非常令人满意的解决方案,这里选择这个方案主要出于两点考虑:
1. 未来新的版本将考虑不使用Translog进行副分片的recovery,translog的滚动策略会进行调整(具体方案elasitc未透露)
2. 这个修改非常的风险非常小
提交社区
最后根据讨论的最终结论,我们重新提交了PR,提交了这个改动,并合并到了主干中。
总结和待续
下面是es写入中的影响关系和调用关系图,从图中可以看到各个因素直接的相互影响。
[ InternalEngine中的影响关系 ]
最近提交的优化实时上只优化了rollGeneration,而实际上这里还有一些优化空间trimUnreferenceReader,这个也在跟社区沟通中,并需要足够的测试数据证明调整的效果,这个调整还在测试中。
而在我们目前实际应用场景中,我们通过调整下面两个参数提高性能:
参考文档
1. 张超《Elasticsearch源码解析与优化实战》游戏网
责任编辑:
相关下载 |
原标题:EliGE推特吐槽:请赶快修复卡顿BUG吧! 导读:EliGE推特吐槽。 和配置无关,CSGO这两次更新带来的卡顿问题是全面的,不仅仅是普通玩家,如今职业选手也详情>>
导读:EliGE推特吐槽。 和配置无关,CSGO这两次更新带来的卡顿问题是全面的,不仅仅是普通玩家,如今职业选手也被这样的问题搞得不胜疲惫。 日前Liquid战队选手EliG详情>>
在最近的XboxEra Podcast播客节目上,国外玩家Shpeshal Ed爆料称微软将在明年4月或5月全面公开新主机Xbox Series X,就在E3 2020举办的时间——6月之详情>>
【导读】《Eliminator小枫》是一款独立动作射击游戏,游戏中银发女子不断用枪射击打倒不明生物。游戏有不断打倒敌人的生存模式,在一定时间内狙击敌人的狙击模式,还有在时间内攻详情>>
Eliminator小枫配置要求高吗?相信很多玩家对于这款游戏还不甚了解,这里小编为大家带来了一篇Eliminator小枫配置要求一览,有兴趣的玩家可以来看看。 配置要求一览 最详情>>
Eliminator小枫配置要求高吗?相信很多玩家对于这款游戏还不甚了解,这里小编为大家带来了一篇Eliminator小枫配置要求一览,有兴趣的玩家可以来看看。 配置要求一览 详情>>
原标题:Elie Saab 2020春夏巴黎时装周 Elie Saab 2020春夏巴黎时装周 Elie Saab 2020春夏巴黎时装周 Elie Saab 2020春夏巴黎时详情>>
原标题:阿里云与 Elastic 联合发布阿里云 Elasticsearch 升级版 9 月 25 日,阿里云与搜索软件公司 Elastic 宣布战略合作升级,并联合发布阿里云 Ela详情>>
原标题:“Into the blu海洋传说”,ELLASSAY2020春夏米兰时装周发布 海洋永远是无名的、是丰饶的,是人类共同的情绪寄托和情感符号,ELLASSAY 2020春夏详情>>
原标题:ELISUN数字资产交易所:图解零常识证明(ZKP) 一篇读懂暗码学根底 ELISUN数字资产交易所零常识证明(Zero-Knowledge Proof或Zero-Knowledge Pro详情>>
原标题:真实淡纹!怡丽丝尔(ELIXIR)抗皱眼唇霜 眼睛周围的皮肤是最容易暴露年龄的地方。如果小仙女们不想一下子就被人看出年纪,眼周皮肤的护理工作可详情>>
原标题:11岁就用La Mer面霜!混血童模Ella Gross的护肤贴士! 现年11岁的混血模特儿Ella Gross,不但被YG娱乐相中了签归旗下,更跟人气女团Blackpink有着详情>>
_contentraw">宫崎英高和乔治·R·R·马丁合作的《ELDENRING》公开了一支宣传片,其中出现了两个新的片段。本作是一款以《黑暗之魂》玩法为基础的开放世界RPG游戏,发售时间尚详情>>
游戏介绍《Elex》是一款大型开放世界的角色扮演类游戏,在这个充满自由和选择的科幻世界中,魔法和科技正在争夺霸主地位。《Elex》由《Gothic》系列游戏开发团队设计开发,带玩家详情>>
版本介绍STEAM代购(礼包): STEINS;GATEELITE-BonusContentBundle包含2件物品:STEINS;GATEELITE,STEINS;GATE:LinearBoundedPhenogram 游戏介绍冒渎神明的第12个理论。――那是由详情>>
【注意事项】建议断开所有网络后再进入游戏,否则开始游戏会无限黑屏!断网遇到黑屏后,返回桌面再次进入就OK了。《监狱脱出少女LieEllie-Helpmeout,please...》是一款恐怖冒险解详情>>
Eldhelm是一款充满西方魔幻色彩的卡牌手游,游戏中拥有众多的卡牌等待你的收集,每个卡牌都有不同的效果,更有特定的组合搭配让你的卡牌发挥出奇效,展示出不一样的效果,赶快来战斗详情>>
EliteTrials是一款刺激好玩的竞速赛车手游,游戏以摩托车为主要的驾驶工具,玩家能够在这里充分体验到驾驶的乐趣,还有不同造型的车辆等待玩家的选择,绝对能够给玩家不同的体验哦详情>>
ElectricHighway是一款全新推出的快节奏街机竞速手机游戏,游戏采用了全新的物理引擎支持,打造出了一个开放式的驾驶竞速世界,你可以选择不同的赛道地图,驾驶你的专属电动汽车来详情>>
《命运石之门:Elite》是《命运石之门》系列的最新作,前作因为出色的剧情而受到了玩家们广泛好评,而该作将会在原来作品的基础上添加新的内容以及要素,玩家们能够在游玩时会感受详情>>
《ELDERBORN》是一款第一人称视角的动作冒险类游戏,专门针对近战格斗而展开,而玩家们将会身处在一个充满着危险的世界里,这里的每个敌人无论是否是人类都有个自己的行动模式,玩详情>>
游戏简介《Elisa:旅店老板前传(Elisa:TheInnkeeper-Prequel)》是一款文字冒险独立游戏,由NeoclassicGames制作发行。这款游戏的制作收到了意大利文化的启发,所以游戏中包含了许详情>>
游戏介绍《ELNINJA》是一款以忍者为题材的趣味休闲类游戏。游戏中,你将化身为一名忍者,为了得到历练,你独自一人闯入敌人的巢穴,在这里你的移动步数会受到限制,所以必须仔细考虑详情>>
《ElementTD》是ElementStudiosLLC制作并发行的一款策略塔防类游戏。在这个塔防中,光、暗、水、火、自然和土地元素聚集在一起,玩家选择的元素决定了可以构建的塔楼,而元素的不详情>>
原标题:传闻:宫崎英高新作《Elden Ring》明年六月发售 新的传闻显示,宫崎英高新作《Elden Ring》的发售日或许定在了 2020 年 6 月 30 日。 传详情>>
《ELEX》是一款由经验丰富的制作者开发的动作角色扮演游戏,游戏背景设置在一个经历了陨石袭击的魔幻星球上。玩家将进入一个庞大无缝的游戏世界,这里充满了奇怪的人物,变异的生详情>>
原标题:宫崎英高《Elden Ring》或将于明年6月30日发售 【多玩网9月6日讯】最新的一则传闻,根据国外的零售网站Target上的一份清单显示,FromSoftware的详情>>
VR之家消息:《Electronauts》是一款DJ版的VR游戏,可以说VR游戏和音乐游戏相结合,是非常有意思的体验。近日,这款DJ版VR游戏《Electronauts》更新曲库新增39首歌曲,让我们一起详情>>
原标题:如果你想好好地认识一下范丞丞,ELLEidol见! 你的范丞丞忽然出现…… ▲借着范丞丞的生日月,ELLEidol x范丞丞生日特辑已经在6月12日上线啦! ▲你详情>>
原标题:大汗队TheMongolz宣布回归CSGO 导读:TheMongolz回归。 TheMongolz战队宣布将在亚洲Minor之前以全新的 详情>>
《怪物猎人:世界》更换ElderMelder的物品清单MOD补丁类型:游戏MOD补丁语言:简体中文更新时间:2018/10/2314:02:25补丁大小:4.0KB游戏标签:剧情冒险动作详情>>
导读:期待已久的热门手游TopEleven火爆来袭啦!这款手机游戏吸引了大批游戏玩家的的关注,有很多玩家都在问Game234游戏门户小编TopEleven好玩吗?想知道这款手游怎么样详情>>
导读:期待已久的热门手游TopEleven火爆来袭啦!这款手机游戏吸引了大批游戏玩家的的关注,有很多玩家都在问Game234游戏门户小编TopEleven好玩吗?想知道这款手游怎么样详情>>
在Domsterr刚刚加入队伍不久后Denial又迎来阵容变化,Ruan"ELUSIVE"van Wyk宣布退役,由Robby "b详情>>
喜欢石头门动画的玩家《命运石之门:Elite》就快正式发售了,近日官方发布了一段《命运石之门:Elite》的故事宣传片,展示了游戏中的冒险故事,感兴趣的玩家快来欣赏下这详情>>
《影》出了宣传曲由ELLA陈嘉桦献声的首波推广曲《傀》,扣人心弦的旋律完美诠释电影主人公的复杂心情。光是听到前奏就知道这是很好听的一首歌,宣传曲都这般,很是期待听到主题曲。快来详情>>