- 博客(15)
- 资源 (14)
- 收藏
- 关注
原创 seata源码解析:TM RM 客户端的初始化过程
TM和RM初始化过程上一篇文章说过,在Spring启动的过程中就会就会初始化TM和RM,建立与TC的长连接。TM,RM,TC都是用netty来处理网络连接的,初始化netty客户端和服务端的过程也非常类似。本篇文章只分析TM的初始化过程,RM和TM复用了很多方法// TmNettyRemotingClientpublic void init() { // registry processor // 注册消息处理器 registerProcessor(); if (i.
2021-10-31 20:57:52 932
原创 分布式事务解决方案:7种常见解决方案汇总
二阶段提交协议为了解决分布式事务的问题,出现了很多协议,如2PC(二阶段提交协议)、3PC(三阶段提交协议)在二阶段提交协议中有一个事务管理器和多个资源管理器。事务管理器分两阶段协调资源管理器。一阶段:事务管理器告诉资源管理器准备执行事务,并锁住需要的资源。当准备完成后,资源管理器向事务管理器报告已准备就绪。二阶段:如果所有资源管理器都准备成功,第二阶段事务管理器回要求所有的资源管理器执行提交操作。如果任一资源管理器在第一阶段返回准备失败,那么事务管理器回要求所有的资源管理器在第二阶段执行回滚操作.
2021-10-29 20:56:53 5035
原创 分布式事务解决方案:RocketMQ事务消息
用RocketMQ事务消息实现分布式事务RocketMQ实现分布式事务的流程如下producer向mq server发送一个半消息mq server将消息持久化成功后,向发送方确认消息已经发送成功,此时消息并不会被consumer消费producer开始执行本地事务逻辑producer根据本地事务执行结果向mq server发送二次确认,mq收到commit状态,将消息标记为可投递,consumer会消费该消息。mq收到rollback则删除半消息,consumer将不会消费该消息,如果收到.
2021-10-28 20:54:12 485
转载 分布式事务解决方案:TCC设计思想及其可能遇到的问题
发现网上的一个关于TCC的分享很赞,转载一下。原文地址:https://www.sofastack.tech/blog/sofa-channel-4-retrospect/1、 Seata 的 TCC 模式1.1 服务化拆分下面我们就进入第一个主题,Seata 的 TCC 模式。蚂蚁金服早期是单系统架构,所有业务服务几乎都在少数几个系统中。随着业务的发展,业务越来越复杂,服务之间的耦合度也越来越高,故我们对系统进行了重构,服务按照功能进行解耦和垂直拆分。拆分之后所带来的问题就是一个业务活动原来只需.
2021-10-26 11:18:15 1632
原创 seata源码解析:seata AT模式是如何实现的?
AT模式RM在回滚时会先跟afterImage进行比较如果一致,则执行回滚sql如果不一致,再跟beforeImage进行比较2.1 如果一致没必要执行回滚sql了,数据已经恢复2.2 如果不一致说明出现脏数据,抛出异常,让人工处理AT模式是如何保证隔离性的?参考博客[1]https://chenjiayang.me/2019/06/29/seata-at/[2]https://www.beikejiedeliulangmao.top/middleware/seata/des.
2021-10-25 09:42:10 1008
原创 seata源码解析:分支事务的提交或回滚
介绍一个全局事务是由多个分支事务组成的,而ResourceManager就是用来管理分支事务的,主要有如下3个功能向TC注册资源接收TC的commit请求,提交分支事务接收TC的rollback请求,回滚分支事务因为Seata支持多种模式,每种模式都有对应的资源管理器,如TCCResourceManager,DataSourceManager,ResourceManagerXA等DefaultResourceManagerDefaultResourceManager包含了所有Resou.
2021-10-24 13:50:24 1509
原创 seata源码解析:seata和spring是如何整合的?
介绍在seata低版本中,seata需要用户自己配置数据源代理,并且在resources目录下放2个文件,file.conf和registry.conf。其中file.conf配置了数据存储模式,registry.conf配置了注册中心的信息在最新的版本中,seata新增了一个seata-spring-boot-starter模块,让我们可以将数据存储模式和注册中心定义在application.yaml中,并且可以通过Enable注解开始数据源自动代理。因为我之前的Demo都是基于seata-sp.
2021-10-22 16:37:28 1115
原创 seata源码解析:事务状态及全局锁的存储
介绍public class Server { public static void main(String[] args) throws IOException { // 省略部分代码... // SessionHolder负责事务日志的持久化存储 // 设置存储模式,有三种可选类型,file,db,redis SessionHolder.init(parameterParser.getStoreMode()); .
2021-10-21 21:34:58 1621
原创 seata源码解析:seata server各种消息处理流程
介绍上一篇文章我们分析了seata-server端启动流程以及消息处理流程。这篇我们就来看第二个比较重要的内容,全局事务管理器是如何工作的?seata中有一个全局事务协调器DefaultCoordinator,它主要是处理来自RM和TM的请求来做相应的操作,但是实际的执行者并不是DefaultCoordinator,而是DefaultCoreDefaultCore的继承关系如下图,从继承图中我们可以看到其实Core类的实现类才是一个事务管理器。在seata中有4种事务管理模式,所以每种模式有一个具.
2021-10-21 21:31:54 499
原创 seata源码解析:全局事务id是如何传递的?
Dubbo想在Dubbo应用之间进行参数传递,其实非常简单。通过Dubbo提供的隐式传递功能即可实现。使用方式如下所示。// A服务设置参数RpcContext.getContext().setAttachment("name", "小明");// A服务通过RPC调用B服务// B服务可以获取到A服务设置的参数RpcContext.getContext().getAttachment("name");所以我们可以把全局事务id放在RpcContext(rpc)中,然后在下游取出来。但.
2021-10-21 20:16:35 1863
原创 面试官:生产环境发生问题,你一般怎么排查?(网络篇)
网络篇计算机网络的性能指标常用数据量单位一个比特就是二进制数据中的一个1或01Byte = 8 bitKB = 210BMB = KKB = 220BGB = KMB = 230BTB = K*GB = 240B常用速率单位kb/s = 103b/s (bps) (一秒传输1000个比特)Mb/s = kkb/s = 106b/s (bps)Gb/s = kMb/s = 109b/s (bps)Tb/s = k*Gb/s = 1012b/s (bps)有一个待发送的数据块,大小.
2021-10-17 20:52:57 1615
原创 面试官:生产环境发生问题,你一般怎么排查?(Linux工具篇)
CPU篇平均负载本篇文章是我看了极客时间《Linux性能优化实战》专栏做的一个总结当系统变慢时,我们经常用uptime或者top命令来查看系统的负载情况,如下命令所示[root@VM-0-14-centos ~]# uptime 15:30:04 up 108 days, 23:29, 1 user, load average: 0.07, 0.05, 0.05值含义15:30:04当前时间up 108 days, 23:29系统运行时间1 user.
2021-10-13 10:01:05 2191
原创 seata源码解析:seata是如何支持TCC模式的?
最常应用的模式TCC模式应该是企业应用最广的一种模式,主要分为2个阶段prepare,锁定相关的资源,保证事务的隔离性commit/rollback,根据全局事务的执行状态来执行分支事务的提交和回滚TCC模式不需要进行数据源代理,因为提交和回滚操作在业务层面都已经定义好了,不需要通过数据源代理生成对应的回滚操作当然事务的执行状态还是会通过seata server记录在global_table和branch_table表中通过TccActionInterceptor对方法进行增强当使用TC.
2021-10-05 23:54:26 579
原创 seata源码解析:seata-server启动时都做了哪些操作?
seata-server的主要功能有哪些?当我们启动一个seata-server的时候,只需要执行一下seata-server.sh脚本即可,这个脚本其实就是调用了io.seata.server.Server的main方法,我们来看一下这个main方法做了哪些操作?public class Server { public static void main(String[] args) throws IOException { // get port first, use to.
2021-10-05 23:25:30 534
原创 seata源码解析:只需一个注解就能开启分布式事务?
介绍给加了@GlobalTransactional,@GlobalLock,@GlobalLock注解的方法生成代理类protected Object wrapIfNecessary(Object bean, String beanName, Object cacheKey) { try { synchronized (PROXYED_SET) { // 已经处理过就不在处理 if (PROXYED_SET.contains(be.
2021-10-05 22:24:00 3726
mybatis-generator-core-1.3.5.jar
2019-08-15
将doc文件批量转为docx文件,用python将doc文件批量转为docx文件
2017-12-28
Spring MVC学习指南
2017-10-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人