架构组件:基于Shard-Jdbc分库分表,数据库扩容方案

架构组件:基于Shard-Jdbc分库分表,数据库扩容方案git

1、数据库扩容

一、业务场景

互联网项目中有不少“数据量大,业务复杂度高,须要分库分表”的业务场景。github

图片描述

这样分层的架构
(1)上层是业务层biz,实现业务逻辑封装;
(2)中间是服务层service,封装数据访问;
(3)下层是数据层db,存储业务数据;数据库

二、扩容场景和问题

当数据量持续新增,面临着这样一些需求,两台数据库没法容纳,须要数据库扩容,这里选择2台—扩容到3台的模式,以下图:segmentfault

图片描述

这样扩容的问题
(1)分库分表的策略致使数据迁移量大;
(2)影响数据的持续服务性;
(3)指定时间完成,技术压力大,容易致使预想不到的错误;架构

如何平稳不停机迁移数据,保证系统持续服务,是本文将要讨论的问题。微服务

2、扩容解决方案

一、扩容方案图解

图片描述

(1)分库分表基于MySQL数据库,使用shard-jdbc中间件
(2)该方案的思路总体基于SpringCloud微服务架构spa

二、解决扩容问题

(1)扩容状况下不须要暂停服务;
(2)数据迁移的压力小,不须要指定时间;code

三、数据访问层逻辑

图片描述

方案描述
基于两台数据库分库分表,简称:服务二
基于三台数据库分库分表,简称:服务三
(1)提供两套服务,服务二和服务三
(2)数据库扩容后,若是访问服务三直接获取到数据,流程结束。
(3)若是访问服务三获取不到数据,则访问服务二获取数据。
(4)在迁移开始的一段时间内,访问压力还会在服务二上面。
(5)这样就作到数据访问服务不会停机。
(6)这种访问模式基于SpringCloud很容易作到。中间件

四、数据迁移层逻辑

图片描述

方案描述
(1)关闭基于两台库的数据入库流程
(2)开启基于三台库的数据入库流程,这样新入库数据就能够被服务三直接访问到。
(3)开发数据迁移中间件,扫描原先两台库的数据。
(4)扫描的数据根据分三台库策略判断是否须要迁移。
(5)若是数据须要迁移,则调用服务三的数据入库接口。
(6)数据迁移完成后,删除原来的位置的数据。
(7)这种迁移模式基于SpringCloud很容易作到。blog

五、该方案迁移的优势

(1)整个过程是持续对线上提供服务;
(2)数据迁移中间件的开发复杂度较低;
(3)能够限速慢慢迁移,没有时间压力;

3、源代码管理

GitHub地址:知了一笑
https://github.com/cicadasmile
码云地址:知了一笑
https://gitee.com/cicadasmile


相关文章
相关标签/搜索