程序员码农的世界

架构师进阶实战随堂笔记十

2019-07-15  本文已影响22人  山东大葱哥

场景十:分布式数据管理问题 分布式事务和分库分表方法介绍与实践经验分享

目录

image.png

分库分表

为什么分片

image.png

分库分表策略

image.png image.png

机器的添加


image.png

机器的删除


image.png

平衡性


image.png

平衡性- 虚拟节点


image.png

映射关系
相对均衡


image.png

进一步优化均衡
二次Hash,把负载大的节点再拆分后,对Hash值再进行二次Hash对应到拆分后的表上


image.png

分布式事务五种方法

为服务中数据存储层一致性如何做到?
五种分布式事务解决方案,按出现时间顺序进行讲解

两阶段提交 2PC

TCC操作

image.png

总结

本地消息表

来源于早一代的支付公司,如ebay、支付宝。
设计思想:将远程分布式事务拆分成一系列的本地事务

转账例子

第二步执行失败怎么处理?
再次重试,直到加成功为止,比如数据库故障导致的临时不成功。真实场景下第一步回滚很困难

业务导致的失败,比如对方账户销户,这需要通过一定的业务机制结合人工进行处理。
有些情况不一定在系统中实现,比如流单,有时可以从业务上解决比如赠送优惠券进行用户补偿等。

MQ非事务消息

public void trans(){
  try{
    //1.操作数据库
  bool result= dao.update(model);//操作数据库失败,会抛出异常
    //2.如果第一步成功,则操作消息队列投递消息

  }catch(Exception ex){
  }
}
image.png

MQ事务消息

新出现的解决方案
本地成功后修改消息状态为可投递


image.png

分布式事务的最佳实践

image.png

本章小结

上一篇 下一篇

猜你喜欢

热点阅读