为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第11天 数据库分布式架构

标签:
架构

课程名称Java架构师-十项全能

课程章节

分布式ID、分库分表中间件、分布式事务、数据的迁移

主讲老师

大目

课程内容

分布式ID

UUID:

优点:使用简单,无需引入额外的组件

缺点:无序,无法实现范围查询;mysql是B+tree的数据结构,B+tree是有序的,导致插入操作是随机I/O,插入操作比自增ID性能差不少, 自增ID性能是UUID的1/4;建议用自增ID+UUID, 自增ID做主键,UUID做业务的唯一标示的方式来提升插入性能。

 

Redis:

提供了Incr的指令,可以实现原子性的自增,可以作为Redis的ID生成器,优点是:使用简单,性能不错。缺点是需要引入redi, 算是额外组件,增加架构复杂性,依赖Redis,Redis挂了ID就生成不了。

 

利用数据库的自增能力:

实例A起始ID为1,步长为3,实例B始ID为2,步长为3,实例C始ID为1,步长为3,多个库的ID不会重复,使用简单, 对代码没有侵入性,缺点是扩展性不佳。不能实现单调递增, 只能实现趋势递增。

 

号段模式:

https://img4.sycdn.imooc.com/6323371e0001386305950334.jpg

https://img4.sycdn.imooc.com/6323371e0001d53c07190240.jpg

号段模式优缺点:

优点:取得号段之后,不在强依赖数据库

缺点:趋势递增,而非单调递增

 

类Snowflake算法:

https://img1.sycdn.imooc.com/6323371f00017a9d06720296.jpg

优点:不依赖任何中间件、性能好、单调递增

缺点:依赖时钟的一致性,时钟回播就会产生相同ID

 

分库分表中间件

每个库只存储部分数据, 如何根据查询条件路由到对应库;

一条语句可能要同事查询多个实例,才能获得最终的结果;

跨库join:参与join的表,分别属于不同的数据库实例。

https://img3.sycdn.imooc.com/6323371f0001da6902440149.jpg

 

分布式事务

XA、TCC、Saga、基于可靠消息的分布式事务...

Seata、ByteTCC、tcn...

https://www.cnblogs.com/monkeyblog/p/10449363.html

 

数据迁移

  • 机房迁移

  • 系统重构,表结构发生了巨大变化

  • 分表调整

  • 更换数据库选型

迁移数据的诉求:

  • 数据准确性

  • 不能影响用户体验、中途不能停机等

挂从库:

https://img4.sycdn.imooc.com/632337200001f92005400394.jpg

优点:迁移成本比较低,操作简单

缺点:有段时间不可写入,只适合数据库选型不变的,同事表结构不变的场景。

双写:

https://img2.sycdn.imooc.com/632337200001223e08350623.jpg

优点:灵活,能满足各种业务场景、不会停机

缺点:复杂度相对高,要修改业务代码,迁移周期相对长

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消