256变4096:分库分表扩容如何实现平滑数据迁移?

本文讲述了在一个高德打车弹外订单系统中,如何从256张表扩展到4096张表的分库分表扩容过程。涉及容量规划、数据迁移策略、灰度切换数据源等关键步骤,通过自研数据同步组件确保了数据一致性,并成功实现了平滑迁移。
摘要由CSDN通过智能技术生成

一 背景

2020年,笔者负责的一个高德打车弹外订单系统进行了一次扩分库分表和数据库迁移。该订单系统整体部署在阿里云上,服务使用阿里云ECS部署,数据库采用阿里云RDS,配置中心基于阿里云ACM自研,数据同步基于阿里云DTS自研以及自研分库分表组件、分布式ID组件等等。

此次进行扩分库分表的背景是,原4实例4库、每个库64张表一共256张表,部分单表已超千万量级,按当前每日单量量级,一年内单表会达到上亿条记录,单表数据量过大会带来数据库性能问题。

注:【弹内弹外】弹是指弹性计算,弹内与弹外其实是指两套独立的弹性计算网络环境。弹内主要是指部署在阿里生产网的弹性计算环境,最早是基于原有淘宝技术构建的,主要用于支撑淘宝业务。弹外主要是指部署在阿里公有云的弹性计算环境,支撑了阿里云计算业务。

二 容量规划

1 当前分库分表情况

4实例(16C/64G/3T SSD),4库(每个实例一个库),每库64张表,共256张表。

通过RDS后台一键诊断功能,来计算表空间使用情况(这里拿测试环境数据库举例)。

2 容量计算

实例数

数据库的瓶颈主要体现在:磁盘、CPU、内存、网络、连接数,而连接数主要是受CPU和内存影响。CPU和内存可以通过动态升配来提升,但是SSD磁盘容量最大支持到6T(32C以下最大3T、32C及以上最大6T)。

但是现阶段兼顾成本,可先将实例扩容一倍,采用8个实例(16C/64G/3T SSD),每个实例建4个库(database)、每个库128张表(这里实际上是一个成本取舍的过程,理论上应该采取"多库少表"的原则,单库128张表其实太多了,单库建议32或64张表为宜)。

后续如果实例压力提升可进行实例配置升级(16C/128G、32C/128G、32C/256G等);未来如出现单实例升配无法解决,在考虑扩容实例,只需要将database迁移至新实例,迁移成本较小。

表数

按单表最多1000w条数据评估,4096张表可支持日5000w单3年(10.1压测标准)、日2000w单5年的架构。(因业务表比较多,此处忽略掉单条数据大小的计算过程)

库数

32个库,每个库128张表。未来可最大扩容到32个实例,无需rehash,只需要迁移数据。

阿里云RDS规格和价格一览

三 数据迁移

因扩分库分表涉及到reha

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值