基于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/cloud-shard-jdbc GitEE·地址 https://gitee.com/cicadasmile/cloud-shard-jdbc
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Nebula Graph 技术总监陈恒:图数据库怎么和深度学习框架进行结合?
引子 Nebula Graph 的技术总监在 09.24 - 09.30 期间同开源中国·高手问答的小伙伴们以「图数据库的设计和实践」为切入点展开讨论,包括:「图数据库的存储设计」、「图数据库的计算设计」、「图数据库的架构设计」等方面内容,本文整理于他和开源中国小伙伴对图数据库的讨论内容~ 嘉宾·陈恒介绍 陈恒,开源的分布式图数据库 Nebula Graph 技术总监,图数据库领域专家 & HBase Committer。北京邮电大学硕士,曾就职于蚂蚁金服、猿题库、网易等公司,一直从事基础设施相关研发工作。 本文目录 图数据库怎么和深度学习框架进行结合? 图数据库它可以被认为是 MySQL 中的一种数据库引擎,具备特殊的查询功能,以及特殊的数据结构? Nebula 和 Neo4j 的图数据库的优势和劣势?为何要新开发使用 Nebula ? 图数据库目前主要用于哪些应用场景? 图数据库和一般数据库结构相比,优势在哪里? Nebula 的实践问题 存储计算分离 Nebula 高度可扩展具体指的是什么?存储层是否还支持其他类型的数据库? 「图数据库」是基于已有数据库衍生出来的产品吗?...
- 下一篇
RocketMQ 整合 DLedger(多副本)即主从切换实现平滑升级的设计技巧
源码分析 RocketMQ DLedger 多副本系列已经进行到第 8 篇了,前面的章节主要是介绍了基于 raft 协议的选主与日志复制,从本篇开始将开始关注如何将 DLedger 应用到 RocketMQ中。 摘要:详细分析了RocketMQ DLedger 多副本(主从切换) 是如何整合到 RocketMQ中,本文的行文思路首先结合已掌握的DLedger 多副本相关的知识初步思考其实现思路,然后从 Broker启动流程、DLedgerCommitlog 核心类的讲解,再从消息发送(追加)与消息查找来进一步探讨 DLedger 是如何支持平滑升级的。 1、阅读源码之前的思考 RocketMQ 的消息存储文件主要包括 commitlog 文件、consumequeue 文件与 Index 文件。commitlog 文件存储全量的消息,consumequeue、index 文件都是基于 commitlog 文件构建的。要使用 DLedger 来实现消息存储的一致性,应该关键是要实现 commitlog 文件的一致性,即 DLedger 要整合的对象应该是 commitlog 文件,即只需...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装