首批通过分布式安全可靠测评,为关键业务系统打造
MySQL替代升级:怪兽充电历史库实现降本增效
- 71%存储成本降低
- 64个库高效汇聚为一
- 显著降低运维复杂度
一、业务背景
怪兽充电2017年成立,并后来者居上于 2021 年在纳斯达克上市。早在三年前怪兽充电的累计注册用户超 2 亿,到2023第二季度,注册用户数已经到了 3.625 亿,日均单量达 190 万笔。作为共享充电宝第一股,业务增长迅速,以至于业务架构不停地增加组件。
持续涌入的用户带来了业务的快速增长,业务系统架构逐渐变得复杂,目前使用MySQL数据库作为历史库,存在大量问题,包括资源的浪费、维护成本高,架构复杂等因素。
二、业务挑战
- 混合云架构组件繁复
- 持续涌入的用户带来了业务的快速增长,业务系统架构逐渐变得复杂。目前采用的是混合云架构,由于系统中微服务和数据组件较多,因此开发了维护云+IDC、覆盖基础设施/中间件/微服务的 DevOps 平台 Hydra 进行统一维护管理。用到数据库包括MySQL、Redis、ElasticSearch、MongoDB等等。
- 数据库实例多、运维成本高
- 历史库集群较大,使用分库分表技术,从 8 个库分到 64 个库(schema),放到 8 个实例中,总体数据量约 9.6TB,单库中最大的表数据超过 2 亿行。并且在业务数据量不断扩大的情况下,后台查询若是用实时库查询,其索引无法覆盖所有的查询场景,由此引入 ElasticSearch 集群。迁移服务也写入 ElasticSearch 集群,通过 Binlog 订阅实时数据库的数据,并使用 ShardingSphere JDBC接入迁移服务 ,整体架构复杂。
- 数据库扩容麻烦,无法动态扩容
- MySQL 水平扩容的方式是分库分表,维护成本相对更高,无法平滑实现快速扩容,对业务等都有一定的影响和侵入性。
三、解决方案
- OceanBase 高级压缩技术
- 经过对 OceanBase 和 MySQL 数据存储占用的对比:如果部署单实例,数据占用对比是 1:6.8;如果部署 OceanBase 三副本,MySQL 主从两副本的情况下,数据占用对比为 1:4.6。由此可见,OceanBase 在存储方面的优势显著,可以显著降低 IDC 的存储用量。这也主要得益于 OceanBase 的数据编码和通用压缩能力,大大提高数据的压缩比。
- 业务平滑迁移,多库数据汇聚
- 使用 OceanBase 官方提供的 OMS 同步数据。同步 64 个数据库到 OceanBase,根据OMS 的配置迁移对象的匹配规则能力,使分库分表的数据源迁移到 OceanBase 变得非常简单高效,8 个数据库实例共 64 个库,建 8 个同步任务就可以完成迁移,通过简单的配置可以实现每个实例上多个库的数据汇聚同一个 OceanBase 库。
四、客户收益
- 节省存储资源损耗
- 此前部署 MySQL 时,制定了统一的物理机标准,采购相同标准的 CPU 和内存,在此基础上做虚拟化及资源的分配。为此还自研了一个调度系统,目的是跟不同的 CPU、内存和磁盘的比例做调配,尽量减少资源损耗。由于 IDC 的容量并不大,导致存储碎片化严重:比如创建的某个数据库存储用量比较大源,而 CPU 内存占用却很少,这时候虽然物理机上 CPU、内存使用率低,但因为磁盘空间已被占用而无法分配新的数据库实例,造成极大的资源浪费。使用OceanBase之后,无需再对CPU、内存和磁盘做调配,直接部署一套集群,上面分多个租户,从而大大减少资源的浪费
- 节省存储成本
- OceanBase提供的高压缩能力,接入 OceanBase 后,存储成本节约了 71%,总的存储量从原来的 9.62TB*2(9.62 为单 MySQL 实例,考虑主从高可用部署所以乘以 2)到现在的 5.6 TB(三副本的总存储量)。
- 基于分区表技术,降低MySQL分库分表带来的运维复杂度
- 之前历史库在MySQL上,采用分库分表技术,总共分了8个实例64个库,总数据量约 9.6TB,64个库的维护对DBA也是很大一部分的工作消耗,同步到OceanBase之后,只用一个库,大大减少了这块的工作量。