java分库框架shard_架构组件:基于Shard-Jdbc分库分表,数据库扩容方案-Go语言中文社区...
架构组件:基于Shard-Jdbc分库分表,数据库扩容方案
一、数据库扩容
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)可以限速慢慢迁移,没有时间压力;
三、写在最后
下一篇文章会更新该方案基于SpringCloud的代码实现。
java分库框架shard_架构组件:基于Shard-Jdbc分库分表,数据库扩容方案-Go语言中文社区...相关推荐
- java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区
在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...
- java mysql查询界面_Java GUI小程序 实现数据库查询界面-Go语言中文社区
源代码如下:package 数据库图形化界面3; import java.awt.*; import javax.swing.*; import java.awt.event.*; public cl ...
- java中3 0.1_为什么java里面3*0.1=0.30000000000000004,而4*0.1=0.4?-Go语言中文社区
作者:蓝色 链接:https://www.zhihu.com/question/56545018/answer/149620518 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- java 取出集合前两个数据库_【Java】获取两个List中不同的数据(效率非常不错)-Go语言中文社区...
项目背景 刚好项目要快速对比两张表的不同数据,但是提供的是id的列表(list),另外在数据库中,所以这里想出了一个办法,先从数据库中找出有的数据in(sql)出来先,然后用代码匹对,因为这里要查出提 ...
- java生成word文档 图片_java生成带有图片的word的文档-Go语言中文社区
生成带有图片的word的文档 @RequestMapping(params ="getWordByDate",produces = "text/html;charset= ...
- java采用匈牙利命名法_【Java】工具类,如何将匈牙利命名法转换成驼峰命名法-Go语言中文社区...
一.概念介绍 1.1.匈牙利命名法:user_id,字母均小写,不同单词间用下划线分割: 1.2.驼峰命名法:userId,除了第一个单词的首字母小写,其余单词的首字母均大写,单词之间没有符号,仅仅通 ...
- 架构组件:基于Shard-Jdbc分库分表,数据库扩容方案
架构组件:基于Shard-Jdbc分库分表,数据库扩容方案 一.数据库扩容 1.业务场景 互联网项目中有很多"数据量大,业务复杂度高,需要分库分表"的业务场景. 这样分层的架构 ( ...
- java计算机毕业设计vue架构云餐厅美食订餐系统源码+数据库+系统+lw文档
java计算机毕业设计vue架构云餐厅美食订餐系统源码+数据库+系统+lw文档 java计算机毕业设计vue架构云餐厅美食订餐系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开 ...
- java计算机毕业设计bs架构实习管理系统(附源码、数据库)
java计算机毕业设计bs架构实习管理系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...
- 网易分库分表数据库DDB
作者:马进,DDB项目负责人,2013年加入网易,热衷于分布式中间件相关方面工作,从事过分库分表数据库DDB.缓存NKV.分布式事务中间件TCC.分布式视频处理系统NTS等项目. 本文为<程序员 ...
最新文章
- C++拾趣——有趣的操作符重载
- php 数组值的交集,PHP 数组交集与差集
- python——生成器详解
- uap--studio设置文本字体
- 前端学习(3096):vue+element今日头条管理-回顾
- Linux 开发环境工具 下载网址大全
- Python正则表达式模式备忘表
- C# 程序异常关闭时的捕获
- 基于react antd的新的tag和Badge的组合使用
- [10秒学会] - iOS录制屏幕 ReplayKit
- UIApplication对象及其代理UIApplicationDelegate[转]
- 生活随记 - 2020国庆第四天
- 我的世界1.12.2java下载_我的世界1.12.2forge下载
- wps2016向程序发送命令_老司机帮您向程序发送命令时出现错误
【操作步骤】
的设置办法...
- php生成其他网页截图,php实现网页截图
- Visual Studio 修改
- Java基础语言(可查阅)
- LitJson 将json 解析为C#类
- java刷卡扣钱,商场购物“刷一次卡被扣了两次钱”,你遇到过吗?!
- centos7里没有ifcfg-eth0只有 ifcfg-ens33(没有Eth0网卡)
热门文章
- android nfc P2P模式
- 论文解析 | 不确定性校准的化学反应预测模型
- 使用gitee部署静态网页
- 从零开始再造打爆李世石的AlphaGo:快速构建棋盘和围棋规则
- 软件版本 —— Alpha、Beta、RC版本的区别
- 2160亿元电费如何降下来?地方5G“硬核”政策助力
- ECSHOP和SHOPEX快递单号查询中通插件V8.6专版
- flv格式转换为mp4(ffmpeg)
- Enterprise Architect学习(1)
- Incorrect string value: '\xF0\x9F\x91\x80' for column数据库中添加表情报错