QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

微信支付万亿日志在 Hermes 中的实践

  • 2020-12-11
  • 本文字数:2095 字

    阅读完需:约 7 分钟

微信支付万亿日志在Hermes中的实践

微信支付日志系统利用 Hermes 来实现日志的全文检索功能,自从接入以来,日志量持续增长。目前单日入库日志量已经突破万亿级,单集群日入库规模也已经突破了万亿,存储规模达 PB 级。本文将介绍微信支付日志系统在 Hermes 上的实践,希望与大家一同交流。


一、业务规模


目前微信支付日志单日最大入库总量已达到万亿级,单日入库存储量达 PB 级,而在春节等重大节假日预计整个日入库规模会有进一步的增长。


微信支付日志业务采用的 Hermes 集群,单集群日入库规模也已经突破了万亿级每天,节点部署有二百多台,单集群存储总量达到 PB 级。另外,每天的检索查询并发在 6000 左右:



在如此海量日志存储规模下,整个微信支付日志查询 SLA 达到了 4 个 9,95% 的耗时小于 5s。



二、存算分离



Hermes 底层存储采用 HDFS 来实现,所有的存储相关的策略都由专业的 HDFS 的能力来提供,包括:


1. 数据多副本容灾


日志默认存储 2 副本容灾,针对历史数据可以灵活的降低副本来减少存储成本,而针对非常重要的日志数据也可以灵活的增加副本来提高数据容灾能力。


2. 磁盘故障容错


单磁盘或单机故障 HDFS 可自动迁移副本,整个容错过程对上层计算层透明。


3. 冷热分级


利用 HDFS 提供的异构存储能力,结合 Hermes 本身的按天分区存储,可以非常方便的实现数据的冷热分级。冷热分级后的数据对上层业务透明,业务无需关注数据本身的存储情况


4. EC 编码


HDFS 3.0 版本之后支持 EC 编码,进一步降低存储成本,目前暂时未在线上实践。通过采用这种存算分离的架构,一方面可以简化上层的计算层的设计;另一方面计算层计算索引的时候只需计算单份即可实现多副本容灾,从而极大的减少计算层的 CPU、内存资源消耗,使得写入 QPS 成倍提升。


三、异步索引合并


Hermes 本身采用类 LSM 的数据写入模式,数据先写入内存+WAL,积累到一定数量后再批量刷写到 HDFS 进行持久化存储。节点故障时,系统通过回滚 WAL 进行数据恢复,从而确保整个写入为高效的顺序写入。


这种高效的写入方式带来的一个问题就是:随着数据的不断刷写,会产生大量的小的索引,从而对查询和 HDFS 存储造成较大的压力。


Hermes 本身会不断的对小的索引进行合并,降低索引文件的个数;而在夜间低峰期,我们也会对历史的分区数据进行一次较大的合并粒度,从而尽可能的提高整个系统的查询效率。微信支付业务的合并时间点选取的是凌晨 2~6 点,避开了凌晨 0~1 点的除夕红包高峰。



四、索引与数据分离


日志等业务场景的一个重要的特点就是:先按照分词+字段信息进行检索,然后拉取完整的一整行日志进行分析。针对这种场景,传统的列存往往存在行存信息获取效率较低,而索引和数据混存又会存在合并索引时读写 IO 放大严重的问题。


为此,Hermes 除了会对日志进行分词构建索引之外,还可以额外配置存储一份完整的日志行存信息:



如上图所示,通过将索引和数据分离存储,索引目录里只存储倒排索引,行数据里同一个分片里每个索引目录相应的行数据。通过每个索引目录的 Offset 和 RowId,在 RowData 中读取结果数据。通过索引和数据的分离,索引目录刷盘次数和个数降低 68%,内存使用量降低 70%,磁盘使用量降低 14%,检索性能提升 80%。



五、存储冷热分级


微信支付 90% 的日志模块都是数据量非常小的长尾模块。因此适当的引入一些高性能的 SSD 设备来加速这些存储较小的业务的查询是非常合适的,而为了可以尽可能的减少 SSD 的成本,需要对业务的数据进行冷热分级。


Hermes 本身的数据冷热分级是利用 HDFS 的异构存储能力来实现的,通过配置不同的副本放置策略,可以灵活的指定副本使用的存储类型,而整个过程对上层业务透明。


HDFS 异构存储策略如下所示:



HDFS 异构存储在 Hermes 中的实践:



六、历史分区副本降级


Hermes 底层存储采用 HDFS 多副本来进行数据容灾,一般默认会存储两副本。目前微信支付的日志最长的保存周期为 30 天,存储数据量非常大。


为了尽可能的降低业务的存储成本,在同业务协商沟通之后,了解到一般三天之前的日志的查询需求很低,对于日志的稳定性可以降低一些,因此 Hermes 运维侧直接对三天前的数据进行例行降副本操作,从而使得整个存储的成本直接降低 70% 以上,整个降副本操作对上层计算层和业务层都是透明的,业务对此没有任何感知。



七、日志批量导出


微信支付的同事经常会有批量导出指定时间段的命中某些关键词的日志的需求:



为此 Hermes 提供批量异步导出日志到 HDFS 等存储介质的功能,用户提交导出请求后,系统会把所有命中的日志导出一份到 TDW HDFS 上面,用户再用 TDW HDFS 客户端或者通过 Hermes 的接口机拖走就行。


TDW HDFS 上面用户的日志导出文件:



八、结语


微信支付接入 Hermes 以来,日志量规模从最初的百亿规模增长至现在的万亿级规模,对整个 Hermes 本身的存储能力、扩展能力、容灾能力和资源规划能力都持续提出挑战。


好在 Hermes 本身优秀的存储架构使得可以在海量业务数据规模下灵活的对业务的数据进行翻转腾挪,从而从容的应对业务持续提出的各种挑战。



头图:Unsplash

作者:宋新村

原文微信支付万亿日志在Hermes中的实践

来源:云加社区 - 微信公众号 [ID:QcloudCommunity]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


2020-12-11 22:002623
用户头像
云加社区 腾讯云官方开发者社区

发布了 230 篇内容, 共 67.1 次阅读, 收获喜欢 258 次。

关注

评论

发布
暂无评论
发现更多内容

GitHub 热榜:一款堪称作业终结者的开源神器!

JackTian

GitHub 开源 工具类网站 学生党 Text-to-handwriting

antdesign table 设置默认选中行且不可编辑

张张张小烦

“技术是用的,不是喊的”区块链标准为电商引入“诚信管家”

CECBC

区块链技术 溯源 电商 防篡改 诚信管家

Week3 命题作业

星河寒水

极客大学架构师训练营

行业观察丨区块链如何与工业互联网深度融合

CECBC

区块链技术 工业互联网 分布式存储

Java世界的“烂”包管理

申扬科技

maven Git Submodule

Zoom 妥协!对免费用户开放端到端加密服务

神经星星

音视频 Zoom 端到端加密 隐私保护 数据保护

ARTS - Week Five

shepherd

Java algorithm

Facebook 起诉水军公司:删不过来,我还告不过来吗?

神经星星

facebook 亚马逊云 AWS Lightsail 水军 虚假评论

如何让企业的IT数据运维更有“烟火气”?

博睿数据

数据挖掘 学习 数据中台 运维 大屏可视化

运营系统架构文档

师哥

2020年6月19日 服务器性能剖析

瑞克与莫迪

三流程序员大晚上不睡觉,竟然在做这件事

Janenesome

写作平台 碎碎念

对不起,我爱你

小天同学

小说 爱情 情感

移动终端智能卡与安全计算环境研究

石君

安全芯片 移动终端 终端安全

架构师训练营 Week 03 关于反应式Web框架Flower

Wancho

还在埋头干活?给程序员的几个忠告

四猿外

Java 深度思考 程序员 随笔杂谈

flutter开发

InfoQ_1c4a1f813eb1

架构师训练营-week01 学习总结

GunShotPanda

系统设计(4)-请设计一个线程安全的HashMap

程序员老王

系统设计

区块链的未来,公链回归

CECBC

区块链技术 联盟链 公链 底层技术

依赖倒置-好莱坞原则

yupi

[安利] 可能会让你爱上书写的工具组合!

猴哥一一 cium

Typora markdown markdown编辑器 玩转写作平台

【写作群星榜】6.12~6.19 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

培训机构出来的程序员常被鄙视,招谁惹谁了

程序员生活志

程序员 程序人生

常年“佛系”Crysis勒索病毒突然变种 变身黑客工具合辑

360安全卫士

Free space——区块链加密社交平台新秀之作

Geek_116789

游戏夜读 | 最常见的两种类型

game1night

第三周作业

LEAF

能走出来的,都不叫困境

zkback

把主机放在家里

D

centos Homework

微信支付万亿日志在Hermes中的实践_其他_云加社区_InfoQ精选文章