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

34次阅读

共计 2109 个字符,预计需要花费 6 分钟才能阅读完成。

导语 | 微信领取日志零碎利用 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 自身优良的存储架构使得能够在海量业务数据规模下灵便的对业务的数据进行翻转腾挪,从而从容的应答业务继续提出的各种挑战。

正文完
 0