导读
微信的多维指标监控平台 , 具备自定义维度、指标的监控能力 , 主要服务于用户自定义监控 。作为框架级监控的补充 , 它承载着聚合前 45亿/min、4万亿/天的数据量 。当前 , 针对数据层的查询请求也达到了峰值 40万/min , 3亿/天 。较大的查询请求使得数据查询遇到了性能瓶颈:查询平均耗时 > 1000ms , 失败率居高不下 。针对这些问题 , 微信团队对数据层查询接口进行了针对性的优化来满足上述场景 , 将平均查询速度从1000ms+优化到了100ms级别 。本文为各位分享优化过程 , 希望对你有用!
目录
1 背景介绍
2 优化分析
2.1 用户查询行为分析
2.2 数据层架构
2.3 为什么查询会慢
3 优化方案设计
3.1 拆分子查询请求
3.2 拆分子查询请求+redis Cache
3.3 更进一步-子维度表
4 优化成果
4.1 缓存命中率>85%
4.2 查询耗时优化至 100ms
5 结语
01
背景介绍
微信多维指标监控平台(以下简称多维监控) , 是具备灵活的数据上报方式、提供维度交叉分析的实时监控平台 。
在这里 , 最核心的概念是“协议”、“维度”与“指标” 。例如 , 如果想要对某个【省份】、【城市】、【运营商】的接口【错误码】进行监控 , 监控目标是统计接口的【平均耗时】和【上报量】 。在这里 , 省份、城市、运营商、错误码 , 这些描述监控目标属性的可枚举字段称之为“维度” , 而【上报量】、【平均耗时】等依赖“聚合计算”结果的数据值 , 称之为“指标” 。而承载这些指标和维度的数据表 , 叫做“协议” 。
多维监控对外提供 2 种 API:
- 维度枚举查询:用于查询某一段时间内 , 一个或多个维度的排列组合以及其对应的指标值 。它反映的是各维度分布“总量”的概念 , 可以“聚合” , 也可以“展开” , 或者固定维度对其它维度进行“下钻” 。数据可以直接生成柱状图、饼图等 。
- 时间序列查询:用于查询某些维度条件在某个时间范围的指标值序列 。可以展示为一个时序曲线图 , 横坐标为时间 , 纵坐标为指标值 。
团队意识到 , 这是数据量上升必然带来的瓶颈 。目前 , 多维监控平台已经接入了数千张协议表 , 每张表的特点都不同 。维度组合、指标量、上报量也不同 。针对大量数据的实时聚合以及 OLAP 分析 , 数据层的性能瓶颈越发明显 , 严重影响了用户体验 。于是这让团队人员不由得开始思考:难道要一直放任它慢下去吗?答案当然是否定的 。因此 , 微信团队针对数据层的查询进行了优化 。
02
优化分析
2.1 用户查询行为分析
要优化 , 首先需要了解用户的查询习惯 , 这里的用户包含了页面用户和异常检测服务 。于是微信团队尽可能多地上报用户使用多维监控平台的习惯 , 包括但不限于:常用的查询类型、每个协议表的查询维度和查询指标、查询量、失败量、耗时数据等 。
在分析了用户的查询习惯后 , 有了以下发现:
- 【时间序列】查询占比 99% 以上
- 针对1天前的查询占比约 90%
推荐阅读
- 杨紫|杨紫微信名曝光,对好友有求必应,是个既善良也幽默的姑娘
- 微信锁定功能怎么用 微信新增锁定功能使用教程[多图]
- 热搜!微信新增锁定功能!网友热议......
- 教你如何打开微信隐藏的拍照功能?打开后照片清晰10倍,简单实用
- 微信视频通话也能开美颜了,附开启方法
- 微信视频聊天怎样才能美颜?
- iPhone “应用锁”来了,可以给微信等 App“上锁”,操作简单
- 微信昵称特殊符号太阳怎么设置 微信昵称特殊符号不让用
- 微信这个开关要尽快清理,不然微信被别人登录了,你可能都不知道
- 微信关掉哪些功能节约内存 关闭微信的这三项功能