老爷爷都能看懂的微服务架构系列001☀️分布式事务介绍-全面详细

毛毛是一只狗 毛毛是一只狗     2023-01-09     797

关键词:

一:项目介绍

B2C, 微服务架构的项目

数据库表

二:在微服务架构中要面对的难点

1:扣减库存时候的超卖问题

2: 以及归还库存时候的数据错误问题

3: 订单超时问题

4: 下单时候的事务

产生以上问题的业务的流程图


三:分布式锁——解决的问题

1: 超卖问题,就是扣减库存避免数据错误

2:库存归还时的问题,原因同上

主要用到的解决方法:setnx,保证查找和修改的原子性

四:分布式事务

分布式事务这里要解决的问题

下单问题

下单和库存一直性问题

下订单和扣库存之间一致性的事务问题。

用户下单不支付问题

业务层面,永不下单不支付,但是库存减了,要买的人买不到,
当然也可以用户支付后在减库存,但是会出现一个问题,就是支付的时候已经没有库存了,但是已经下单了,用户体验非常非常不好。
所以就必须加入超时机制,用户下单后,一定时间不支付,归还库存。

什么是事务?

事务就是一组sql,可能涉及到很多表,这组sql,要么全部执行成功要么全部回滚取消执行,不允许一部分执行成功,这种特性就是“事务”!

什么是分布式事务?

分布式事务是由多个本地事务组合而成的,分布式事务就是在微服务中,一些服务相互调用时涉及到了很多表的sql语句,也要保证事务的特性。

什么是事务特性?

事务的特性:原子性,一致性,隔离性,持久性 ,简称ACID。
这里的原子性和一致性概念比较容易弄混,原子性指业务层面,所有功能全部成功,要么全部取消不执行,如下订单时和扣减库存的时候这两个功能要不争原子性。还有在分布式锁的时候setnx也是保证了原子性
而一致性是指数据的一致性,我给哥哥转钱,他收到,和我这边扣款保证一直,不能我扣款了,他没收到。

导致数据不一致的原因

1: 网络问题
硬件故障,网络抖动, 网络拥塞: 请求和返回是拥塞,但是以为失败了,做了回滚。
超时机制,重试
2:程序出错
宕机,端点,磁盘满了,电脑坏了等等

在以上问题基础上,保证事务的完整性。

关于分布式事务的两个重要理论

☀️视频讲解-cap和base理论☀️

cap理论

consistency,Availability ,Partition Tolerance
矛盾
consistency,Availability ,只能满足一个
为了达到数据一致性,读写数据库,在写的时候是不能读的,所以导致了不可用(读和写是两个不同的数据库)。
一致性和可用性看自己的需求选择

base理论(现在普遍用到的分布式理论基础)

基本可用
软状态
数据最终一致性

保证分布式事务解决方案

分布式中要保证的底线原则
同时成功同时失败

● 两阶段提交(2PC, Two-phase Commit)


优点:简单
缺点:开启事务和最后提交事务的时候,会锁表,并发会非常非常低。

● TCC 补偿模式(最复杂的方案)

☀️视频讲解-TCC分布式解决方案☀️

tcc管理器或者tcc日志完成事务的一致性(取代2pc中的事务锁表)

核心原理
try (冻结库存,数据库有冻结的字段)
commit (真正扣减库存)
cancel (把冻结的减掉就行了)
这是一个服务提供的三个函数接口

● 基于本地消息表实现最终一致性

☀️视频讲解-基于本地消息表实现最终一致性分布式事务方案☀️

基于本地消息表作用。

主要记录本地服务发送mq的情况,失败了就会记录一下,
以轮训的方式定期扫描这张本地消息表。

还有一个比较重要的问题,就是消息重复发送的问题,也需要解决这个问题,就需要再加一个流水表,每次查看的时候,看看有没有重复扣减。

● 最大努力通知

● 基于可靠消息最终一致性方案 (推荐)

☀️视频讲解-基于可靠消息实现最终一致性分布式事务方案☀️

基于rocketMQ提供的事务消息,和回查机制完成

小白都能看懂的linux系统下安装配置zabbix

...用户:root网络环境:InternetZabbix是一个基于web界面的提供分布式系统监控及网络功能的企业级的开源监控工具,做为一个企业运维人员来说,zabbix可以给企业和运维人员带来很大的帮助,zabbix是一个功能非常强大、跨平台、开源... 查看详情

大白话聊聊微服务——人人都能看懂的演进过程

...的逻辑,才是有意义的分享。所以接下来我会尝试用大家都能理解的语言来聊一聊”微服务“。【写在前面】那么,什么是微服务呢?你不一定知道微服务,但是你一定知道麦某劳,而且知道麦某劳有个甜品站。你可能会问,甜... 查看详情

《小学生都能看懂的群论从入门到升天教程》《群论全家桶》

...#xff01;!实际上是一个全新的精炼模板整合计划小学生都能看懂系列,小学生:我太难了  群论、置换、Bunrnside引理、Pόlya定理等概念是群论的内容,也是《组合数学》第十四章Pόlya计数的内容(一般认为组... 查看详情

分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践

当我们工作所在的系统处于分布式系统初期的时候,往往这时候每个服务都只部署了一个节点。如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,... 查看详情

小学生都能看懂的fft!!!

小学生都能看懂的FFT!!!前言在创新实践重心偷偷看了一天FFT资料后,我终于看懂了一点。为了给大家提供一份简单易懂的学习资料,同时也方便自己以后复习,我决定动手写这份学习笔记。食用指南:本篇受众:如标题所示... 查看详情

我奶奶都能看懂系列004☀️python基础语法,小学生也可以学!(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言while循环while实现猜拳游戏计算1-100之间的累加和... 查看详情

小白都能看懂的实战教程手把手教你pythonweb全栈开发(day2)(代码片段)

小白都能看懂的实战教程手把手教你PythonWeb全栈开发Flask(PythonWeb)实战系列之在线论坛系统第二讲这是小白都能看懂的实战教程手把手教你PythonWeb全栈开发的第二讲,如果文中有基础知识不太熟悉的话,可以看博主前几期... 查看详情

我奶奶都能看懂系列002☀️python基础语法,小学生也可以学!(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言1:输出2:输入3:类型转换后言因为下面有个后言... 查看详情

我奶奶都能看懂系列007☀️python基础语法——函数,小学生也可以学!(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言函数的定义和调用函数的文档说明带参数的函数... 查看详情

我奶奶都能看懂系列005☀️python基础语法——容器,小学生也可以学!(代码片段)

🌌专注Golang,Python语言,云原生,人工智能领域得博主;💜过去经历的意义在于引导你,而非定义你;📢欢迎点赞👍收藏⭐留言!前言字符串下标切片字符串查找相关的操作字符串的... 查看详情

人人都能看懂的lstm

点击上方“迈微AI研习社”,选择“星标★”公众号重磅干货,第一时间送达大家好,我是Charmve。熟悉深度学习的朋友知道,LSTM是一种RNN模型,可以方便地处理时间序列数据,在NLP等领域有广泛应用。在看了台大李宏毅教授的... 查看详情

小白都能看得懂的教程一本教你如何在前端实现富文本编辑器(代码片段)

小白都能看得懂的教程一本教你如何在前端实现富文本编辑器博主博客文章内容导航(实时更新)更多优质文章推荐:收藏!最详细的Python全栈开发指南看完这篇你还不会Python全栈开发你来打我!!!一本教你如何在... 查看详情

小白都能看懂的实战教程手把手教你pythonweb全栈开发(day4)(代码片段)

...家好,我叫亓官劼(qíguānjié),这个《小白都能看懂的实战教程手把手教你PythonWeb全栈开发》是一个零基础的实战教程,手把手带你开发一套系统,带你了解Pythonweb全栈开发,目前正在连续更新中,如... 查看详情

小白都能看懂的redis讲解--针对单个键操作集锦

1重命名键renamekeynewname可以对键重命名,下面的例子我们创建了一个key为name,value为luke的键值对。然后将name重命名为user,之后查询name就返回nil,而user是可以查到值的。127.0.0.1:6379>setnamelukeOK127.0.0.1:6379>getname"luke"127.0.0.1:6379&... 查看详情

猴子都能看懂的androidmenu总结(代码片段)

简单谈谈Androidmenu菜单的使用,帮助入门的同学。menu主要分类:选项菜单:最常规的菜单子菜单:多层菜单的实现方案之一上下文菜单:android中长按视图控件后出现的菜单选项菜单(OptionMenu)该菜单默认在右上... 查看详情

小白都能看懂的关于mixins机制的理解(代码片段)

前言​在学习Flutter源码的时候,看到各种复杂的mixin和on,为了便于后续Flutter的学习,这里有必要一起来份详细Dart的Mixin机制。什么是mixins首先看看官方文档的定义:Mixinsareawayofreusingaclass’scodeinmultipleclasshierarchie... 查看详情

小白都能看懂的关于mixins机制的理解(代码片段)

前言​在学习Flutter源码的时候,看到各种复杂的mixin和on,为了便于后续Flutter的学习,这里有必要一起来份详细Dart的Mixin机制。什么是mixins首先看看官方文档的定义:Mixinsareawayofreusingaclass’scodeinmultipleclasshierarchie... 查看详情

零基础都能看懂的stlmap详解(代码片段)

🎈作者:Linux猿🎈简介:CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!🎈关注专栏:C/C++面试通关集锦 (优质好文持续更新中……)... 查看详情