微服务架构

关于微服务,ThoughtWorks 公司的首席科学家 Martin Fowler 有如下解释:

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

-- James Lewis and Martin Fowler (2014)

简而言之,微服务架构风格是一种将单个应用程序开发为一组小服务的方法,每个小服务都运行在自己的进程中并通过轻量级机制进行通信,通常是 HTTP 资源 API。这些服务是围绕业务能力构建的,并且可以通过自动化部署机制独立部署。这些服务的集中管理最少,可以用不同的编程语言编写并使用不同的数据存储技术。

系统采用微服务架构之后,服务之间独立部署在不同的服务器上,每个服务的业务数据独立存储在不同的数据库中(分布式存储)。由于业务数据分布在不同的数据库中,系统功能的实现需要调用多个服务操作多个不同的数据库,此时保证多个数据库操作的原子性(同时提交或回滚)就显的极其重要!

事务

关于数据库事务,维基百科有如下解释:

数据库事务拥有以下四个特性,习惯上被称之为ACID特性

  • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
  • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
  • 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行
  • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。

分布式事务

分布式事务是在分布式系统中实现事务,是由多个本地事务组合而成。

分布式事务的解决方案:2PC、3PC、TCC、本地消息表、事务消息、最大努力通知。

2PC(两阶段提交)

两阶段提交是一种强一致性设计,2PC 引入一个事务协调者(Transaction Coordinator)的角色来协调管理各本地资源管理器( Resource Manager,对应微服务架构中的各个独立服务)的提交和回滚,两阶段分别指的是准备(投票)和提交两个阶段。

准备阶段事务协调者会给参与分布式事务的各个资源管理器发送准备命令(执行除提交事务之外的其他操作),然后同步等待所有资源管理器的响应之后进入提交阶段。(提交阶段不一定是提交事务,也可能是回滚事务)。假如在第一阶段所有参与者都返回准备成功,那么协调者则向所有参与者发送提交事务命令,然后等待所有事务都提交成功之后,返回事务执行成功。

Seata的AT 模式是两阶段提交协议的演变

一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。

二阶段:

提交异步化,非常快速地完成。
        回滚通过一阶段的回滚日志进行反向补偿。

Seata已经在国内很多团队开始落地,其中不乏有大公司;

Github:https://github.com/seata/seata

Seata AT模式

AT模式使用起来对代码的侵入性很小,能够快速的使项目具备分布式事务的能力。

在正式介绍Seata的AT模式之前,首先介绍使用到的3个概念定义:

RM:资源管理者(Resource Manager ),对应微服务架构中小型服务的业务数据库,业务数据库代表了一个分支事务。RM管理分支事务并与 TC 进行协调注册分支事务并且汇报分支事务的状态,驱动分支事务的提交或回滚。

TC:事务协调者(Transaction Coordinator),负责管理整个分布式事务,每个节点的分支事务在执行之前,都会在事务协调者上注册,本地事务执行结束后,还会向协调者汇报。当事务需要提交或回滚时,也协调者负责推送给各个RM。每个节点的分支事务在执行之前,使用XID向TC注册分支事务并接收TC的提交或回滚指令。

TM:事务管理者(Transaction Manager),分布式事务的发起者,负责向TC申请全局事务XID。TM在调用其他服务提供的API执行本地分支事务时会向各分支事务传递XID。

流程分析

以电商经典订单场景创建为例,用户创建订单的同时需要调用库存服务扣减库存,扣减库存和订单创建必须保证同时执行。

SEATA示例源码

GitHub - seata/seata-samples: seata-samples

首先需要启动Seata-Server作为事务协调者TC,由于当前微服务架构采用Consul作为注册中心。

Seata-Server的高可用也采用Consul作为注册中心,使其加入当前微服务集群。

1.启动Seata-Server

sh seata-server-1.4.2/bin/seata-server.sh -p 8091 -h 127.0.0.1 -m db

注册成功之后,可以在Consul看到对应的服务

由于Seata的示例代码十分完备,包含底层数据库创建的SQL都有脚本,可以参照官方示例自己验证。

分布式事务系列(一):Seata的AT模式整体流程相关推荐

  1. 分布式事务:Alibaba Seata 如何实现分布式事务

    * 讲解分布式事务的解决方案 * 介绍Alibaba Seata 分布式事务中间件 * 分析Seata 的AT 模式实现原理 分布式架构中两种经典的分布式事务解决方案: 二阶段提交.三阶段提交 二阶段 ...

  2. Spring Cloud Alibaba 高级特性 分布式事务:Alibaba Seata 如何实现分布式事务

    本讲咱们要解决分布式事务这一技术难题,这一讲咱们将介绍三方面内容: 讲解分布式事务的解决方案: 介绍 Alibaba Seata 分布式事务中间件: 分析 Seata 的 AT 模式实现原理. 分布式 ...

  3. springcloud分布式事务_Springcloud 分布式事务集成Naco Seata

    前言:分布式系统架构中,最最费劲的是分布式事务,分布式事务解决方案网上大致分为两种 消息一致性 基于TCC分布式事务 不管基于那种解决方案,都是对侵入的代码植入,以大量的代码或者消息来作为代价,来实现 ...

  4. 分布式事务解决方案,Seata的基本配置和使用

    文章目录 1. 分布式事务介绍 ①:本地事务 ②:分布式事务 ③:常见的分布式事务解决方案 3. 2PC与3PC ①:2PC与3PC的区别 3. Seata介绍 ①:Seata的三种角色 ②:Seat ...

  5. 分布式事务系列一:BASE,一种ACID的替代方案(eBay分布式事务解决方案)

    前言 对于很多业务系统来说,整个系统其实是由多个独立的系统构成的.这些独立的系统由各自的研发小组进行研发和维护,数据往往也存储在各自独立的数据库中. 我们以下单流程为例.下单往往涉及到订单系统.库存系 ...

  6. 阿里开源的分布式事务揭秘:Seata原理及流程剖析

    背景 在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案.今天带来的这篇,就给大家分析一下Seata的源码是如何一步一步实现的.读源码的时候我们需要俯瞰起全貌,不要去扣一 ...

  7. 如果你还不知道SAGA,那这篇不容错过!|分布式事务系列(五)

    这是分布式事务系列的第五篇,如果之前文章没读请自行前往.精华专题,强烈建议收藏. ‍本文详细讲解了分布式事务解决方案--SAGA. 点击上方"后端开发技术",选择"设为星 ...

  8. 【分布式事务系列九】聊聊分布式事务

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 分布式事务 [分布式事务系列一]提出疑问和研究过程 [分布式事务系列二]Spring事务管理器PlatformTra ...

  9. 事务对性能影响_不是事务的事务!(分布式事务系列-完结篇)

    虽然我们都把最大努力通知型作为分布式事务的一种,但是各位同学心里要明白,这个完完全全和事务没有任何关系,为了确保我们这个分布式事务系列的完整性,我有必要用这篇最大努力通知型来做整个系列的收尾. 到现在 ...

最新文章

  1. 习题2-5 求平方根序列前N项和 (15 分)
  2. 关于读取数据库进行数据处理的一些小问题
  3. linux内核参数优化 for 高并发服务器
  4. mongodb之 复制集维护小结
  5. PaddlePaddle实现波士顿房价预测
  6. [leetcode] 题型整理之图论
  7. Kaggle Kernels和 Colab, Binder, Azure Notebooks, CoCalc, Datalore的比较
  8. iOS uiviewcontroller 添加另外一个controller的View
  9. linux怎么杀掉mpd进程,linux怎么样安装mpd进程管理器
  10. Labview子VI的创建与调用
  11. commandname
  12. mysql 字符串转日期
  13. idea激活到2100年
  14. Clickhouse查询语句 sample
  15. 【5G核心网】5GC核心网之网元SMF
  16. 今天测试twm000 850的windows7 记录
  17. 流量贵如金,APP推广如何迈好第一步?技术和策略缺一不可
  18. 直男届的杀手-『小冰』架构解析
  19. Hibernate第五篇【inverse、cascade属性详解】
  20. 泰克示波器知识分享-波的类型

热门文章

  1. 如何设计与搭建古风饰品小程序
  2. 【无标题】呵呵没事的
  3. 记一次极为失败的腾讯电话面试
  4. python2.7连接mysql_python2.7版本连接mysql数据库入门
  5. Unhandled exception 0xC0000005:Access Violation
  6. php7 中文乱码_PHP 中文乱码解决办法总结分析
  7. linux服务器php读取word字数,linux读取word
  8. 苹果手机如何批量删除联系人
  9. 临时人造皮肤行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  10. .NET Framework源码研究系列之---万法归宗Object