系列文章是博主对沈剑的《架构师训练营》分享内容的个人笔记总结,原内容公众号“成为架构师”。
回顾
追日志方案:
- 服务升级,记录“数据修改”日志
- 迁移数据小工具,进行数据迁移
- 追日志小工具,追平数据差异
- 数据校验小工具,检验数据一致性
- 切流量到新库,完成平滑迁移
双写方案:
- 服务升级,“数据修改”双写
- 迁移数据小工具,进行数据迁移
- 数据校验小工具,检验数据一致性
- 切流量到新库,完成平滑迁移
两种方案都需求:服务升级,专门的小工具
服务屏蔽数据库复杂性
数据库高可用,虚IP,keepalived
通过水平切分,扩充数据量,增加实例个数
总体而言,互联网微服务的数据库架构是这样的:
有服务层屏蔽底层复杂性,有高可用,又有水平切分。
这时候,随着数据量的不断增大,我们需求持续的扩展,也就落到了秒级扩容的水平切分方案上。
水平切分
这个水平切分方案是根据取模和成倍扩容给出的
步骤一:修改配置
修改配置主要是两个点:
- 增加虚ip,原先是单个虚ip,如虚ip0,现在要增加到虚ip0,虚ip00
- 修改service的配置,原先是模2,现在更新为模4,这一更新是无损的,原先走模2余0的还是到ip0,余1的还是到ip1,这不会变化
步骤二:reload配置
微服务修改完配置还没有载入,所以需要reload,理论上,reload之后我们的扩容就完成了。
reload前面提到过了,有两种方案:
- 手动重启服务,让它载入新的配置,初始化连接池等
- 配置中心通知服务让它自动重启载入配置
无论是哪一种方案,reload这一过程都可以在秒级完成,reload之后,数据库实例从原先的两个对线上提供服务变为四个了。
步骤三:数据收缩,收尾
完成reload之后,虽然提供服务的实例个数增加了,但是数据量还是没有变化,这就需要收尾工作,进行数据收缩
数据收缩工作主要也是有两步:一是恢复高可用,二是删除不需要的数据
主要以下三个步骤:
- 解除旧的双主同步,它们现在是平行结构了
- 补充高可用,为四个新库分别建立四个备库,双主或者影子主
- 对四个库删除它们不需要的冗余数据,ip0的删除原先模4为2的数据,ip00删除原先模4为0的数据
后话:这个方案是非常成熟的,从两个库升级到256个库用的都是这个方案。
讨论还是以思路为主。
上一篇回顾:【成为架构师3-12】数据库:扩展性,平滑扩展如何实现
下一篇更精彩:持续更新中…