mysql构建栋_【转载】这次拆库 应是微服务化的拆分方式

一、现状

a222923d0116c63aace4a1c533aeea85.png

现状.png

我们将一个大而全的系统一拆为三,容器,发布,测试都已经独立出去,但是原始的数据库还是一套,现在需要将数据库做一个拆分,A、B、C三个系统有各自的数据库之后,我们的微服务化在现有部署、测试等已经独立的基础上才算最终完成,形成三个各自独立的单元。因此本篇文章叙述的不是数据库的水平拆分也不是垂直拆分,不是讲述分库分表,而是讲述从业务系统去拆分数据库,把业务最终微服务化。

二、方法

06918baec90018a4bf4a45c299703c9c.png

拆分方案.png

2.1、SOA

通过提供RPC接口,将原先共用的表有一方系统提供接口服务,另一方系统来调用该接口。这种情况下系统之间是解耦了,但是数据调用的时候一方还是要强依赖另一方。这个时候要重新关注接口服务方如果down掉或者延时发生,需要有容错机制,比如熔断、降级等。同时要考虑好数据的托底展示,比如本机缓存,remote缓存。详细可参看《微服务下的网关与容错》里面有专项介绍。

2.2、数据异构

通过数据异构的方式,比如B系统与C系统原来是一张表,数据库拆分之后这张表的数据放在了C系统,但是B系统只需要这张表的部分字段,这个时候可以通过异构平台把C系统的表按需异构到B系统中的一张表。这样两个系统之间彻底解耦,各自微服务化,也没有了SOA方式的强依赖问题。关于数据异构的详细介绍可以参看这篇文章

《数据异构的武器-BINLOG+MQ》

三、拆库的步骤(mysql)

集群A(源库)

集群B(新搭建)

集群C(新搭建)

a7bc301812d2adbb7e9e1f623061ba33.png

DB拆库起始位置.png

注意此方案需要停写!

步骤一、搭建集群B、C

将集群B、C以从库形式挂载到集群A

步骤二、将如下集群A主库设置为只读模式

192.168.x.x xx.mysql.xxx.com

命令:set global read_only=on;

步骤三、待从库无延迟后,集群B、C停止复制,执行如下操作

命令:stop slave;

此时A、B、C三套集群均为只读模式

步骤四、研发人员修改应用url指向到正确的数据库集群,待确认无误后,(此时可回退,打开写后不可回退)

通知DBA将集群A、B、C三套打开读写

命令:set global read_only=off;

步骤五、拆分完成

7fe8c528d0a441a0987d82d56151207d.png

DB最终位置.png

步骤六

观察一段时间后drop冗余表,DBA在复制的时候实际上是全量复制,因此后续我们需要drop掉各自系统内不需要的表。可以用rename的方式先行标出,一段时间后再drop掉。

===================================================================

回退方案

步骤一、集群B、C打开复制

命令:start slave;

步骤二、打开集群A的读写

命令:set global read_only=on;

四、SOA和微服务

SOA面向服务架构,是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。关键点是接口调用,这是目前分布式系统中常用的方法。目前开源的RPC框架也有很多比如知名的DUBBO服务等。

微服务的重点是业务系统要彻底组件化和服务化,原有的单体应用系统会拆分为多个可以独立开发、运行、部署和运维的小应用。这些小的应用之间如果需要交互就通过服务来完成,比如提供DUBBO接口服务。每个小应用内部从前端WEB到业务逻辑处理,到数据库访问,以及数据库都是独立的。

五、总结

业务简单,团队组织规模较小的时候一个单体应用就可以支持当时的业务发展。随着业务的发展规模越来越大,过程中如果技术架构升级没有跟上,就会面临后期拆系统,拆库的的阶段。本篇文章结合我工作中自身的经历集中对数据库的业务拆分做了描述,拆库的原则以及数据库新集群的创建方法。对于拆分,我们要拆的粒度有多大,或者多小,没有一个标准,关于这方面,推荐大家阅读一本书《恰如其分的软件架构》。

关注公众号同步更新技术文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用SharePoint 2010新增的文档集内容类型来管理文档

使用SharePoint 2010新增的文档集内容类型来管理文档 SharePoint 2010新增加的文档集功能是作为内容类型存在的,使用范围在网站集中,需要激活“文档集”功能到网站集才可以正常使用。文档集其实就是一个SharePoint产品增强的文件夹和内容类型的综合体现。…

如何使用Java 8流快速替换列表中的元素

假设您有一个项目清单&#xff1a; List<String> books Arrays.asList("The Holy Cow: The Bovine Testament","True Hip Hop","Truth and Existence","The Big Book of Green Design" );&#xff08;不要判断我。此随机书生成…

db2和mysql性能优化_DB2数据库性能调优的十个办法

这篇文章主要是针对e-business OLTP的10个性能方面的Tips。10. Monitor Switches打开Monitor Switch,才能获得性能方面的信息,命令如下db2 "update monitor switches using lock ON sort ON bufferpool ON uow ON table ON statement ON"9. Agents要保证有足够的agen…

处理远程通知的方法

IOS的一大特点就是可以随时向客户端push相关的信息。那么在客户端收到这些信息时&#xff0c;如何处理呢&#xff1f; 有两种情景需要处理&#xff0c; 一是&#xff1a;从状态栏下拉&#xff0c;点击通知栏里的一项&#xff0c;启动应用 二是&#xff1a;在锁屏界面&#xff0…

java merge into_Oracle merge into的使用

最近项目上使用Oracle的Merge&#xff0c;所以找来一下资料学习了解。该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中&#xff0c;使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。特点&#xff1a;1、insert 和upd…

基于visual Studio2013解决算法导论之019栈实现(基于数组)

&#xfeff;&#xfeff;&#xfeff;题目用数组实现栈解决代码及点评#include <stdio.h> #include <stdlib.h> #include <time.h> #include <malloc.h> #include<assert.h>typedef struct Stack {int nTop;int nLen;int *pnArr; }Stack, *PSta…

关闭终端php就退出进程_解决windows下php-cgi进程经常自动关闭

php-cgi在linux中有fpm管理&#xff0c;Apache不是采用cgi这种模式&#xff0c;于是乎就出现了&#xff0c;在windows下&#xff0c;采用nginx时&#xff0c;开启的php-cgi监听非常不稳定&#xff0c;经常奔溃关闭。现在解决了这个问题。注意是win32位系统下解决的&#xff0c;…

九度OJ 1437 To Fill or Not to Fill -- 贪心算法

题目地址&#xff1a;http://ac.jobdu.com/problem.php?pid1437 题目描述&#xff1a; With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from …

php为什么获取不到id,微信小程序无法获取到unionId怎么办

UnionID机制说明如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序)&#xff0c;可通过unionid来区分用户的唯一性&#xff0c;因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序)&#xff0c;用户的unionid是唯一的。换句话说&#x…

不同类型的变量在内存中存储的详细情况

原文链接&#xff1a;http://blog.csdn.net/qingkong8832/article/details/6687793 一、int型变量在内存中存储详细情况 //By Richard #include <stdio.h> #include <math.h>int main() {int i10;int i21;int i3-1;int i4127;int i5-127;int i6128;int i7-128;int …

php 修改文件访问时间,php获取文件的创建、修改时间及访问时间

filemtime() 函数返回文件内容上次的修改时间若成功&#xff0c;则时间以 Unix 时间戳的方式返回。若失败&#xff0c;则返回 false。语法 : filemtime(filename)参数描述filename必需。规定要检查的文件。说明本函数返回文件中的数据块上次被写入的时间&#xff0c;也就是说&a…

数据包分析

通过对数据包的分析&#xff0c;我们可以判断通信双方的操作系统、网络信息流量、经过的路由、数据包的大小&#xff0c;以及数据包的内容等等。对于喜欢网络安全的人来说&#xff0c;掌握这方面的知识是相当重要的。现在的网络通信中&#xff0c;大部分数据都没有加密&#xf…

php-5.2.6安装,php5.2.6安装openssl.o扩展,make时报错?

问题&#xff1a;调试支付宝支付时报错&#xff1a;Fatal error: Call to undefined function openssl_get_privatekey()在网上查了 说是没有安装openssl.so扩展。通过 phpize安装扩展&#xff0c;但是make时报错&#xff1a;/bin/sh /opt/php-5.2.6/ext/openssl/libtool --mod…

highcharts第一篇---简介和使用

Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表&#xff0c;并且免费提供给个人学习、个人网站和非商业用途使用。HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表 具体参考&a…

php中数字可以加字符吗,在php中,怎么样把数字转化为字符串

PHP的数据类型转换属于强制转换&#xff0c;允许转换的PHP数据类型有&#xff1a;(int)、(integer)&#xff1a; 转换成整形(float)、(double)、(real)&#xff1a; 转换成浮点型(string)&#xff1a; 转换成字符串(bool)、(boolean)&#xff1a; 转换成布尔类型(array)&#x…

CUBA平台–新的Java企业应用程序框架

所以..你好&#xff0c;世界&#xff01; 我们的英语网站终于可以正常使用了&#xff0c;现在每个人都可以下载该平台&#xff0c;并可以以前所未有的速度更快地创建业务应用程序。 在我们决定与国际Java社区共享足够好之前&#xff0c;我们花了六年的永久发展和偶尔的革命&…

Redis,MemCached,MongoDB 概述

调研项目主要有Redis、 MemCached、 MongoDB&#xff0c;以及Amazon的DynamoDB Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。目前由VMware主持开发工作。 1&#xff09; 数据模型 作为K…

php 正则 回溯,php 正则表达式效率 贪婪、非贪婪与回溯分析

先扫盲一下什么是正则表达式的贪婪&#xff0c;什么是非贪婪&#xff1f;或者说什么是匹配优先量词&#xff0c;什么是忽略优先量词&#xff1f;好吧&#xff0c;我也不知道概念是什么&#xff0c;来举个例子吧。某同学想过滤之间的内容&#xff0c;那是这么写正则以及程序的。…

Abiword页面布局

Abiword页面布局 AP_Win32FrameImpl::_DocumentWndProc 文档窗口过程函数在WM_SIZE消息中设置FV_View对象的整体尺寸&#xff0c;跟窗体的&#xff1a;设备单位 转换成&#xff1a;布局单位。m_iWindowWidth 19695&#xff0c;m_iWindowHeight 8520 设备单位和布局单位的比例是…

php图片编辑失真,PHP处理图片固定大小 不失真 不变形

由于工中使用到此代码 借鉴了各位前辈们代码的基础上修改而来 如果您的项目中有需要此代码 要以尽情的复制和修改 &#xff1b;如果您有更好的代码烦请告知本人 。我将感激不尽下面由上代码//图像处理类class Image {private $file;//图片地址private $width;//图片长度privat…