AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

微信支付万亿日志在 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:002644
用户头像
云加社区 腾讯云官方开发者社区

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

关注

评论

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

架构训练营 week4 课程总结

红莲疾风

「架构实战营」

从本科退学,到再拿本科,2021我的5年技术“弯路”回轨了|1.2w字

杨成功

程序员 前端 盘点2021

第五周作业

lv

【盘点 2021】义无反顾,投身福报,我的2021年度总结

Zhendong

阿里巴巴 年终总结

Java Jackson 中如何 Pending JSON 对象到数组中

HoneyMoose

以一致的体验交付和管理云原生多集群应用

阿里巴巴云原生

阿里云 云原生 KubeVela OCM 交付

云原生实战派:2021 让改变发生,2022 让创新升级

阿里巴巴云原生

阿里云 云原生 年度盘点

设计模式【9】-- 外观模式?没那么高大上

秦怀杂货店

Java 设计模式 外观模式

物联网平台分为几层,你了解吗

华为云开发者联盟

物联网平台 终端 物联网 IoTAgent 智慧家庭

央视频“数字雪花”互动项目上线,为全民打造冰雪体育盛宴

郝俸🦁好棒

深度剖析:Kafka 请求是如何处理的? 看完这篇文章彻底懂了

Kafka中文社区

做数据分析已经会Excel了,还要学Python吗?

博文视点Broadview

06 Prometheus之exporter及查询持久性

穿过生命散发芬芳

Prometheus 1月月更

Tableau Day3:智能分析

贾献华

Tableau 1月月更

聚焦高质量发展,AI创业企业如何释放数智新潜力?

脑极体

当云服务变成云云云云服务,谁能带领企业穿越云层?

白洞计划

【LeetCode】括号的最大嵌套深度Java题解

Albert

算法 LeetCode 1月月更

如何在零停机的情况下迁移 Kubernetes 集群

阿里巴巴云原生

阿里云 Kubernetes 容器 云原生 数据迁移

一个cpp协程库的前世今生(十二)自旋锁

SkyFire

c++ cocpp

没想到,学棋五年的我竟然输给了昇腾CANN!

华为云开发者联盟

机器人 强化学习 CANN 昇腾 机械臂

盘点|2021最受开发者欢迎和最具行业影响力的文章

阿里巴巴云原生

阿里云 开发者 云原生 年终盘点

ReactNative进阶(七):导航组件 react-navigation

No Silver Bullet

React Native 导航 1月月更

熬夜整理56个JavaScript高级的手写知识点!!专业扫盲!

Sunshine_Lin

JavaScript 面试 进阶 ES6 手写

Vue3的8种组件通信方式

编程江湖

Vue 3

2021年12月云主机性能评测报告

博睿数据

LabVIEW目标测量方法(基础篇—12)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 目标测量方法 目标尺寸测量

基于机器学习和深度学习,华为大佬手写AIoT系统学习小册

Java全栈架构师

Python 数据库 程序员 AI 面试

阿里云 MSE 云原生网关助力斯凯奇轻松应对双 11 大促

阿里巴巴云原生

阿里云 云原生 MSE 斯凯奇

AWS S3 最小目录权限(qbit)

qbit

对象存储 AWS S3 权限

揭秘阿里云神龙团队拿下TPCx-BB排名第一的背后技术

阿里云弹性计算

大数据 阿里云 神龙

Python原生数据结构增强模块collections

Java全栈架构师

Python 数据库 程序员 数据结构 面试

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