百万级高并发mongodb集群性能数十倍提升优化实践(下篇)
关于作者
前滴滴出行技术专家,现任OPPO文档数据库mongodb负责人,负责oppo千万级峰值TPS/十万亿级数据量文档数据库mongodb研发和运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。后续持续分享《MongoDB内核源码设计、性能优化、最佳运维实践》,Github账号地址:https://github.com/y123456yz
- 前言
温馨提示:在进行本下篇优化文章阅读前,可以提前了解下《百万级高并发mongodb集群性能数十倍提升优化实践(上篇)》的问题背景及优化方法,这样可以更好的了解和学习本篇性能优化下篇的内容。
- 背景
线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低,读写流量做了主从读写分离,读流量走从节点,qps数百上千),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性。该集群采用mongodb天然的分片模式架构,数据均衡的分布于各个分片中,添加片键启用分片功能后实现完美的负载均衡。集群每个节点流量监控如下图所示:
从上图可以看出集群流量比较大,峰值已经突破120万/秒,其中delete过期删除的流量不算在总流量里面(delete由主触发删除,但是主上面不会显示,只会在从节点拉取oplog的时候显示)。如果算上主节点的delete流量,总tps超过150万/秒。
在《百万级高并发mongodb集群性能数十倍提升优化实践(上篇)》中,我们通过业务优化、mongodb服务层配置优化、wiredtiger存储引擎层优化及硬件IO优化后,客户端总体时延从几百ms迟控制到了2-5ms左右,总体性能有了很大的提升,但是当有超大流量写冲击的时候,会有几十ms时延抖动,几个不同接口的时延如下图所示:
3. 硬件问题回顾及遗留问题
在《上篇》文章中,我们通过定位nvme ssd硬件的IO问题后,和厂商一起分析后发现IO问题是因为操作系统版本不对引起,于是开始对线上的主从mongod实例的服务器硬件进行升级,升级后开始替换线上该集群的实例。具体操作过程如下:
- 为了验证IO升级后的机器,我们替换一个分片的从节点为升级后的服务器(IO问题得以解决,IO能力从之前的500M/s写入达到了近2G/s