作者介绍
杨亚洲,前滴滴出行专家工程师,现任OPPO文档数据库MongoDB负责人,负责数万亿级数据量文档数据库MongoDB内核研发、性能优化及运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。后续持续分享《MongoDB内核源码设计、性能优化、最佳运维实践》。
前言
线上某IOT核心业务集群之前采用MySQL作为主存储数据库,随着业务规模的不断增加,MySQL已无法满足海量数据存储需求,业务面临着容量痛点、成本痛点问题、数据不均衡问题等。
亿该业务迁移MongoDB后,同样的数据节省了极大的内存、CPU、磁盘成本,同时完美解决了容量痛点、数据不均衡痛点,并且实现了一定的性能提升。
此外,迁移时候的MySQL数据为亿,3个月后的现在对应MongoDB集群数据已增长到亿,如果以亿数据规模等比例计算成本,实际成本节省比例会更高。迁移MongoDB后,除了解决业务痛点问题,同时也促进了业务的快速迭代开发,业务不在关心数据库容量痛点、数据不均衡痛点、成本痛点等问题。
当前国内很多mongod文档资料、性能数据等还停留在早期的MMAP_V1存储引擎,实际上从MongoDB-3.x版本开始,MongoDB默认存储引擎已经采用高性能、高压缩比、更小锁粒度的wiredtiger存储引擎,因此其性能、成本等优势相比之前的MMAP_V1存储引擎更加明显。
一、业务迁移背景
该业务在迁移MongoDB前已有约亿数据,申请了64套MySQL集群,由业务通过shardingjdbc做分库分表,提前拆分为64个库,每个库张表。主从高可用选举通过依赖开源orchestrator组建,MySQL架构图如下图所示:
说明:上图中红色代表磁盘告警,磁盘使用水位即将%。如上图所示,业务一年多前一次性申请了64套MySQL集群,单个集群节点数一主三从,每个节点规格如下:
cpu:4
mem:16G
磁盘:G
总节点数:64*4=
SSD服务器
该业务运行一年多时间后,总集群数据量达到了亿,并以每月亿速度增长,由于数据不均衡等原因,造成部分集群数据量大,持续性耗光磁盘问题。由于节点众多,越来越多的集群节点磁盘突破瓶颈,为了解决磁盘瓶颈,DBA不停的提升节点磁盘容量。业务和DBA都面临严重痛点,主要如下:
数据不均衡问题
节点容量问题
成本持续性增加
DBA工作量剧增(部分磁盘提升不了需要迁移数据到新节点),业务也提心吊胆
二、为何选择MongoDB-附十大核心优势总结
业务遇到瓶颈后,基于MongoDB在公司已有的影响力,业务开始调研MongoDB,通过和业务接触了解到,业务使用场景都是普通的增、删、改、查、排序等操作,同时查询条件都比较固定,用MongoDB完全没任何问题。
此外,MongoDB相比传统开源数据库拥有如下核心优索:
优势一:模式自由
MongoDB为schema-free结构,数据格式没有严格限制。业务数据结构比较固定,该功能业务不用,但是并不影响业务使用MongoDB存储结构化的数据。
优势二:天然高可用支持
MySQL高可用依赖第三方组件来实现高可用,MongoDB副本集内部多副本通过raft协议天然支持高可用,相比MySQL减少了对第三方组件的依赖。
优势三:分布式-解决分库分表及海量数据存储痛点
MongoDB是分布式数据库,完美解决MySQL分库分表及海量数据存储痛点,业务无需在使用数据库前评估需要提前拆多少个库多少个表,MongoDB对业务来说就是一个无限大的表(当前我司最大的表存储数千亿数据,查询性能无任何影响)。
此外,业务在早期的时候一般数据都比较少,可以只申请一个分片MongoDB集群。而如果采用MySQL,就和本次迁移的IOT业务一样,需要提前申请最大容量的集群,早期数据量少的时候严重浪费资源。
优势四:完善的数据均衡机制、不同分片策略、多种片建类型支持
关于balance:支持自动balance、手动balance、时间段任意配置balance.
关于分片策略:支持范围分片、hash分片,同时支持预分片。
关于片建类型:支持单自动片建、多字段片建
优势五:不同等级的数据一致性及安全性保证
MongoDB在设计上根据不同一致性等级需求,支持不同类型的ReadConcern、WriteConcern读写相关配置,客户端可以根据实际情况设置。此外,MongoDB内核设计拥有完善的rollback机制来保证数据安全性和一致性。
优势六:高并发、高性能
为了适应大规模高并发业务读写,MongoDB在线程模型设计、并发控制、高性能存储引擎等方面做了很多细致化优化。
优势七:wiredtiger高性能存储引擎设计
网上很多评论还停留在早期MMAPv1存储引擎,相比MMAPv1,wiredtiger引擎性能更好,压缩比更高,锁粒度更小,具体如下:
WiredTiger提供了低延迟和高吞吐量
处理比内存大得多的数据,而不会降低性能或资源
系统故障后可快速恢复到最近一个checkpoint
支持PB级数据存储
多线程架构,尽力利用乐观锁并发控制算法减少锁操作
具有hot-caches能力
磁盘IO最大化利用,提升磁盘IO能力
其他
更多WT存储引擎设计细节可以参考: