朝着微服务的方向去做一次数据库拆分

新栋BOOK 关注

2017.11.16 21:41* 字数 1389 阅读 152评论 0喜欢 3

一、现状

现状.png

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

二、方法

拆分方案.png

2.1、SOA

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

2.2、数据异构

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

三、拆库的步骤(mysql)

集群A(源库)
集群B(新搭建)
集群C(新搭建)

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;

步骤五、拆分完成

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.jianshu.com/p/590037e67162

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

转载于:https://www.cnblogs.com/ww-xiaowei/p/9371601.html

【转载】这次拆库 应是微服务化的拆分方式相关推荐

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

    一.现状 现状.png 我们将一个大而全的系统一拆为三,容器,发布,测试都已经独立出去,但是原始的数据库还是一套,现在需要将数据库做一个拆分,A.B.C三个系统有各自的数据库之后,我们的微服务化在现有 ...

  2. 四种常用的微服务架构拆分方式

    微服务架构并无标准架构,不然什么架构师大会也不会各个系统架构百花齐放了.虽然没有固定的套路,却有一些经验,今天就来做一个总结. 基于角色拆分 这种拆分方式常见于基础设施以及其PaaS层的架构,比如服务 ...

  3. 实施前端微服务化的六七种方式

    微前端架构是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用. 由此带来的变化是,这些前端应用可以独立运行.独立开发.独立 ...

  4. 从一个运维人员的角度看微盟的这次删库跑路的节奏

    从一个运维人员的角度看微盟的这次删库跑路的节奏 这二天,微盟运维人员删库的事件刷屏了,造成的影响特别的大. 回顾整个事件,本人从15年的运维人员的角度来分析一下这个事件: 1. 为什么一个运维人员会有 ...

  5. 网易考拉的服务架构如何从单体应用走向微服务化? | 技术头条

    网易考拉(以下简称考拉)是网易旗下以跨境业务为主的综合型电商,自2015年1月9日上线公测后,业务保持了高速增长,这背后离不开其技术团队的支撑.微服务化是电商IT架构演化的必然趋势,网易考拉的服务架构 ...

  6. 微服务化小团队:让 GitLab、Jenkins 与 Sonar 碰撞出火花

    本文来自作者 邹毅 在 GitChat 上分享 「微服务化小团队:让 GitLab.Jenkins 与 Sonar 碰撞出火花」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 大风起兮云飞 ...

  7. 转摘-谈谈后端业务系统的微服务化改造

    谈谈后端业务系统的微服务化改造 作者 张旭 发布于 2016年4月29日 | 1 讨论 1. 篇首语 业务系统是任何一个用户产品的必须组成,充当着一个门面的角色,用户的输入就是这个系统需要维护的,数据 ...

  8. 谈谈后端业务系统的微服务化改造

    为什么80%的码农都做不了架构师?>>>    1. 篇首语 业务系统是任何一个用户产品的必须组成,充当着一个门面的角色,用户的输入就是这个系统需要维护的,数据存取是整个系统的核心. ...

  9. 微服务化之前需要先无状态化和容器化

    作者:刘超,毕业于上海交通大学,15年云计算领域研发及架构经验,先后在EMC,CCTV证券资讯频道,HP,华为,网易从事云计算和大数据架构工作.在工作中积累了大量运营商系统,互联网金融系统,电商系统等 ...

最新文章

  1. NodeJS、NPM安装配置步骤(windows版本)
  2. MATLAB读取HDF格式的SST数据
  3. ABAP 在字符串之间加入若干空格
  4. Lead time 在ERP 中怎么填
  5. 基本数据结构篇(三万字总结)
  6. 【快速入门Linux】6_Linux命令—用户权限相关命令
  7. go https client
  8. 常见的几种python字符串方法总结
  9. PAT甲级1015 素数
  10. 中小学教师计算机应用,关于中小学教师计算机应用教育的思考
  11. jQuery EasyUI API 中文文档 - 菜单按钮(MenuButton)
  12. Ajax+PHP快速上手及简单应用
  13. 【毕业求职季】-听说你想去大厂看学妹,带你看看字节广告运营岗面试长啥样?
  14. 60Echarts - 饼图(Texture on Pie Chart)
  15. 最新windows7旗舰版密钥
  16. 2014年蓝桥杯预赛 C/C++本科B组 解题报告 史丰收速算
  17. 渗透测试学习笔记(metasploit)
  18. 知道这六种拍摄技巧,让你玩转夕阳拍摄
  19. 2021年广东省安全员B证第三批(项目负责人)新版试题及广东省安全员B证第三批(项目负责人)作业模拟考试
  20. SNIPER: Efficient Multi-Scale Training解读

热门文章

  1. 学术圈「超级内卷」:“青椒”难!
  2. 收藏 | Pytorch nn.Transformer的mask理解
  3. Hinton发布最新论文!表达神经网络中部分-整体层次结构
  4. 大数据预测实战-随机森林预测实战(三)-数据与特征对模型的影响
  5. c++语言int最大值,c++ 关于如何获取int型的最大值
  6. python 解三阶多项式系数_python – 评估多项式系数
  7. 1048 行 MySQL指令(经典)
  8. Java 发起http GET POST请求实例
  9. vue中axios设置表单头_VUE项目axios请求头更改Content-Type操作
  10. 牛客网---Java题库(21~30)