美文网首页程序员码农的世界
架构师进阶实战随堂笔记十

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

作者: 山东大葱哥 | 来源:发表于2019-07-15 00:23 被阅读22次

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

目录

image.png

分库分表

为什么分片

image.png

分库分表策略

image.png
  • 按照指定字段区间,按照查询维度来,尽量使得查询落在单库单表上,如时间段、ID段、区域等

  • 按指定维度取模


    image.png
  • 一致性哈希进行分片


    image.png

    环形Hash 空间


    image.png
    把数据通过一定的Hash算法处理后映射到环上
    image.png
image.png

机器的添加


image.png

机器的删除


image.png

平衡性


image.png

平衡性- 虚拟节点


image.png

映射关系
相对均衡


image.png

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


image.png

分布式事务五种方法

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

两阶段提交 2PC

  • 例子


    image.png
  • 2PC流程


    image.png

    应用场景相对较少了,主要超时机制影响体验

TCC操作

image.png
  • 例子


    image.png

总结

  • 复杂场景下不推荐使用,逆向逻辑很复杂
  • 只有非常简单的场景,非常容易提供回滚时使用


    image.png

本地消息表

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

转账例子

  • 本地插入消息表


    image.png
  • 本地消息表
    通过本地事务绕过远程事务


    image.png

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

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

  • 总结
    比较经典的解决方案,依赖关系型数据库,存在吞吐量和性能方面的瓶颈


    image.png

MQ非事务消息

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

  }catch(Exception ex){
  }
}
image.png
  • 总结
    缺点:MQ的可靠性,消息延迟、挤压、丢失
    做到幂等性避免消息重复消费


    image.png

MQ事务消息

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


image.png
  • 总结
    2018年主流开源MQ都没有实现对事务消息的支持
    2019年RocketMQ等开源出来了事务性消息,虽然社区比较活跃,但建议核心流程暂时先不要使用事务型MQ。非核心业务可以尝试。


    image.png

分布式事务的最佳实践

image.png

本章小结

  • 分库分表的常用手段:指定字段区间、按指定维度取模、一致性哈希进行分片
  • 介绍分布式事务的五种方法:两阶段提交、TCC、本地消息表、MQ(非事务)、MQ(事务)
  • 分布式事务的最佳实践介绍

相关文章

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

    场景十:分布式数据管理问题 分布式事务和分库分表方法介绍与实践经验分享 目录 分库分表 为什么分片 分库分表策略 ...

  • 架构师进阶实战随堂笔记九

    场景九 微服务中数据存储的一致性问题 一致性数据同步与实践案例分享 数据存储 冗余 库冗余 表冗余 冗余数据同步...

  • 架构师进阶实战随堂笔记三

    场景三分布式系统中的CAP原则 CAP&Base 理论介绍与案例分享 CAP理论介绍 CAP原理 一致性(Cons...

  • 架构师进阶实战随堂笔记六

    场景六:微服务架构的服务化和Spring Cloud 快速实现服务化 目录 服务化 服务化是微服务的基石-->基于...

  • 架构师进阶实战随堂笔记二

    场景二:微服务架构的高可用问题,高可用架构师设计方法与实践案例 为什么要有软件架构 每个人都可以自己完成全部工作的...

  • 架构师进阶实战随堂笔记五

    场景五:微服务中的服务划分问题 微服务拆分原则、方法与最佳实践 目录 应该怎样去拆分服务呢? 基本原则: 低耦合,...

  • 架构师进阶实战随堂笔记七

    场景七:微服务架构的服务化和Dubbo、Dubbo框架的原理讲解与案例解析 目录 Dubbo是什么 Dubbo是一...

  • 架构师进阶实战随堂笔记四

    场景四 架构选择和迭代问题--6种架构模型介绍及其对应案例解析 单体式架构 所有程序安装一个电脑(上古时代) 两层...

  • 架构师进阶实战随堂笔记一

    前言 案例:12306 架构师特质:逻辑思维、抽象能力 架构师画像:业务抽象落地 共同能力: 工程思维、抽象、落地...

  • 架构师进阶实战随堂笔记八

    场景八:大型互联网公司的服务化落地问题 服务化技术讲解与实践经验分享 RPC调用的发展路径 答疑:压测工具jmet...

网友评论

    本文标题:架构师进阶实战随堂笔记十

    本文链接:https://www.haomeiwen.com/subject/jarjwqtx.html