架构组件:基于Shard-Jdbc分库分表,数据库扩容方案
本文源码:GitHub·点这里 || GitEE·点这里
一、数据库扩容
1、业务场景
互联网项目中有很多“数据量大,业务复杂度高,需要分库分表”的业务场景。

这样分层的架构
(1)上层是业务层biz,实现业务逻辑封装;
(2)中间是服务层service,封装数据访问;
(3)下层是数据层db,存储业务数据;
2、扩容场景和问题
当数据量持续新增,面临着这样一些需求,两台数据库无法容纳,需要数据库扩容,这里选择2台—扩容到3台的模式,如下图:

这样扩容的问题
(1)分库分表的策略导致数据迁移量大;
(2)影响数据的持续服务性;
(3)指定时间完成,技术压力大,容易导致预想不到的错误;
如何平稳不停机迁移数据,保证系统持续服务,是本文将要讨论的问题。
二、扩容解决方案
1、扩容方案图解

(1)分库分表基于MySQL数据库,使用shard-jdbc中间件
(2)该方案的思路整体基于SpringCloud微服务架构
2、解决扩容问题
(1)扩容情况下不需要暂停服务;
(2)数据迁移的压力小,不需要指定时间;
3、数据访问层逻辑

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

方案描述
(1)关闭基于两台库的数据入库流程
(2)开启基于三台库的数据入库流程,这样新入库数据就可以被服务三直接访问到。
(3)开发数据迁移中间件,扫描原先两台库的数据。
(4)扫描的数据根据分三台库策略判断是否需要迁移。
(5)如果数据需要迁移,则调用服务三的数据入库接口。
(6)数据迁移完成后,删除原来的位置的数据。
(7)这种迁移模式基于SpringCloud很容易做到。
5、该方案迁移的优点
(1)整个过程是持续对线上提供服务;
(2)数据迁移中间件的开发复杂度较低;
(3)可以限速慢慢迁移,没有时间压力;
三、源代码管理
GitHub·地址
https://github.com/cicadasmile/spring-cloud-base
GitEE·地址
https://gitee.com/cicadasmile/spring-cloud-base

架构组件:基于Shard-Jdbc分库分表,数据库扩容方案的更多相关文章
- .net core 基于Dapper 的分库分表开源框架(core-data)
一.前言 感觉很久没写文章了,最近也比较忙,写的相对比较少,抽空分享基于Dapper 的分库分表开源框架core-data的强大功能,更好的提高开发过程中的效率: 在数据库的数据日积月累的积累下,业务 ...
- JAVA分库分表的实现方案
分库分表的实现方案无非2种:1.本地,2.远程.而在本地一般有2种实现(1.业务代码级别 2.jdbc级别), 其中jdbc级别的本地代理方案的代表有:当当开源的 shardingsphere,远 ...
- 一种可以避免数据迁移的分库分表scale-out扩容模式
转自: http://jm.taobao.org/ 一种可以避免数据迁移的分库分表scale-out扩容方式 目前绝大多数应用采取的两种分库分表规则 mod方式 dayofweek系列日期方式(所有星 ...
- 基于ShardingJDBC的分库分表详细整理
转载 https://www.cnblogs.com/jackion5/p/13658615.html 前言 传统应用项目设计通常都是采用单一数据库作为存储方案,但是随着互联网的迅猛发展以及应用数据量 ...
- 【转】mysql分库分表,数据库分库分表思路
原文:https://www.cnblogs.com/butterfly100/p/9034281.html 同类参考:[转]数据库的分库分表基本思想 数据库分库分表思路 一. 数据切分 关系型数 ...
- 一种可以避免数据迁移的分库分表scale-out扩容方式
原文地址:http://jm-blog.aliapp.com/?p=590 目前绝大多数应用采取的两种分库分表规则 mod方式 dayofweek系列日期方式(所有星期1的数据在一个库/表,或所有?月 ...
- [转]一种可以避免数据迁移的分库分表scale-out扩容方式
原文地址:http://jm-blog.aliapp.com/?p=590 目前绝大多数应用采取的两种分库分表规则 mod方式 dayofweek系列日期方式(所有星期1的数据在一个库/表,或所有?月 ...
- 分库分表数据库自增 id
分库分表之后,ID 主键如何处理? 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 ...
- 基于ShardingJDBC的分库分表及读写分离整理
ShardingJDBC的核心流程主要分成六个步骤,分别是:SQL解析->SQL优化->SQL路由->SQL改写->SQL执行->结果归并,流程图如下: sharding ...
- 基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案
本文源码:GitHub·点这里 || GitEE·点这里 一.项目结构 1.工程结构 2.模块命名 shard-common-entity: 公共代码块 shard-open-inte: 开放接口管理 ...
随机推荐
- python基础入门 列表
列表 1.关键字---list 2.定义:用来存储数据可存储多种数据类型 支持索引,切片 是有序的 可变的 3.定义一个列表 l1 = ['列表','字符串','lnh',123,'kk0','ttt ...
- webpack学习2.2webpack简介,初步了解
webpack V1功能进化 编译打包 HMR(模块热更新) 代码分割 文件处理(loader) webpack V2功能进化 tree shaking(并欸有在项目中使用的代码不会打包到里面,打包之 ...
- java基础集合简介Set(三)中
今天主要说夏set集合,每天抽出一个小时总结下,生活会更加美好! --< java.util >-- Set接口: 数据结构:数据的存储方式: Set接口中的方法和Collection中方 ...
- spring源码学习(四)-spring生命周期用到的后置处理器
生命周期的九大后置处理器 第一次调用后置处理器org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory# ...
- Nginx-HTTP Strict Transport Security(HSTS)
HTTP Strict Transport Security(HSTS) HTTP Strict Transport Security(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过HTTP ...
- Nginx配置实例-反向代理实现浏览器请求Nginx跳转到服务器某页面
场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...
- 因特尔CPU上TM和R标识的区别
TM是英文trademark的缩写,TM标志并非对商标起到保护作用,它与R不同,TM表示的是该商标已经向国家商标局提出申请,并且国家商标局也已经下发了<受理通知书>,进入了异议期,这样就可 ...
- 0基础-scp命令一学就会
scp -P 22 -r /home/server Android@192.168.1.110:/opt 将本地/home/server的文件夹上传到远端服务器192.168.1.110的目录 ...
- PCA主成分分析(最大投影方差)
PCA简介: 从n维数据中提取最能代表这组数据的m个向量,也就是对数据进行降维(n->m),提取特征. 目标: 找到一个向量\(\mu\),使n个点在其上的投影的方差最大(投影后的数据越不集中, ...
- Jmeter自动化集成工具Ant的安装
一.Ant介绍 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供.只要使用过Linux系统的读者 ...