分布式事务

分布式事务 spring 两阶段提交 tcc

随声附和 提交于 2020-03-21 08:19:24
请问分布式事务一致性与raft或paxos协议解决的一致性问题是同一回事吗? - 知乎 https://www.zhihu.com/question/275845393 分布式事务11_TCC 两阶段型、补偿型 - 架构师的成长之路的博客 - CSDN博客 https://blog.csdn.net/qq_27384769/article/details/79349847 分布式事务业界主流方案 - 余正忠 - 博客园 https://www.cnblogs.com/yuzhengzhong/p/9803781.html Java分布式事务 两阶段提交的编码实现-TCC - qq_36184390的博客 - CSDN博客 https://blog.csdn.net/qq_36184390/article/details/81671214 java分布式事务,及解决方案 - 狂风骤起 - 博客园 https://www.cnblogs.com/xifenglou/p/8440836.html 来源: https://www.cnblogs.com/rgqancy/p/10411980.html

3 月,跳不动了?

拜拜、爱过 提交于 2020-03-20 18:33:26
3 月,跳不动了?>>> 3 月起,许多互联网公司都已经陆陆续续宣布复工。很多想冲击高薪的朋友都开始了跳槽计划。昨天,一位读者留言提到跳槽的事情,说自己在国企工作,绩效一般般,加不动班,技术水平也一般,考虑跳槽,担心跳不动了,还调侃说自己比上不足比下有余。 这里谈谈我的看法—— 不要给自己设立舒适区,要有危机感 。如果现在的工作,让自己感到瞎忙或者无所事事,我建议跳槽。不管是遇到更契合的老板,更有发展的行业,或是单纯涨点钱,都比原地不动强。金三银四,正值跳槽、冲击高薪的时期,对照岗位需求,用心准备面试才能抢占先机。 这里把去年秋招季 阿里、字节跳动、腾讯、美团 等一线互联网公司的 N 套面试题,梳理成了一份大而全的知识图谱,将面试中涉及到的知识点分类汇总了下。 希望能帮助到大家。 由于篇幅有限,这里不能展示出所有的 知识分枝+细分脉络 ,仅以图片的形式给大家展示一部分(完整高清大图文末扫码获取) 。这份资料尤其适合: 1.近期想跳槽,需要面试的程序员,以便查漏补缺,尽快弥补短板; 2.想了解 “一线大厂” 最新技术要求,对比找出自身的长处和弱点所在,评估自己在现有市场上的竞争力如何; 3.尚未形成系统的 Java 知识体系,缺乏清晰的提升方向和学习路径的朋友。 高清大图,文末获取,建议下载到电脑上查看。 除面试资料外,分享一位 高级架构师 朋友近期新录制的 “ 分布式事务 ”

RabbitMQ解决分布式事务问题

亡梦爱人 提交于 2020-03-16 17:58:46
SpringBoot消息重试机制 消息重试机制幂等性 如何合适选择重试机制 情况1: 消费者获取到消息后,调用第三方接口,但接口暂时无法访问,是否需要重试? 需要重试 情况2: 消费者获取到消息后,抛出数据转换异常,是否需要重试? 不需要重试 总结:对于情况2,如果消费者代码抛出异常是需要发布新版本才能解决的问题,那么不需要重试,重试也无济于事。应该采用日志记录+定时任务job健康检查+人工进行补偿 消费者如果保证消息幂等性,不被重复消费 产生原因:网络延迟传输中,会造成进行MQ重试中,在重试过程中,可能会造成重复消费。 解决办法: 使用全局MessageID判断消费方使用同一个,解决幂等性。 基于全局消息id区分消息,解决幂等性 生产者: 请求头设置消息id(messageId) @Component public class FanoutProducer { @Autowired private AmqpTemplate amqpTemplate; public void send(String queueName) { String msg = "my_fanout_msg:" + System.currentTimeMillis(); Message message = MessageBuilder.withBody(msg.getBytes())

面试被问分布式事务(2PC、3PC、TCC),这样解释没毛病!

若如初见. 提交于 2020-03-11 21:33:40
整理了一些Java方面的架构、面试资料(微服务、集群、分布式、中间件等),有需要的小伙伴可以关注公众号【程序员内点事】,无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问分库分表怎么办?你可以这样怼他 3万字总结,Mysql优化之精髓 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架 9种分布式ID生成之美团(Leaf)实战 絮絮叨叨 还记得刚入行开始写Java时,接触的第一个项目是国家电网的一个业务系统,这个系统据说投资了5亿人民币进行研发,鼎盛时期研发人员一度达到过500人。项目采用当时最流行的ssh(Struts+Spring+Hibernate)框架,典型的三层架构(controller - > service -> dao)简单又粗暴,所有人写的代码都放在一个大工程里,项目文件大小达到几百M,解决代码冲突是当时最大的工作量。 然而戏剧性的是,交测当天五人同时上线,项目崩 崩 崩溃了。。。 哎!你永远想象不到甲方愤怒的样子,项目组每个人的祖宗都被问候到了。 说了一些没用的,脑子里总想起这个事,不说不痛快,大家姑且就当笑话听吧,下边我们进入正题 引言 前两天有个学弟公众号留言,说让讲讲分布式事务,面试就挂在这个问题上。时下随着微服务架构体系的流行,面试的题目也都慢慢开始升级,不再是早些年单纯的问点SSH框架知识、数据结构了。

Java客户端Jedis的八种调用方式

孤街醉人 提交于 2020-03-11 07:41:30
redis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务、管道及有jedis自身实现的分布式。 在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比: 一、普通同步方式 最简单和基础的调用方式, @Test public void test1Normal() { Jedis jedis = new Jedis("localhost"); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String result = jedis.set("n" + i, "n" + i); } long end = System.currentTimeMillis(); System.out.println("Simple SET: " + ((end - start)/1000.0) + " seconds"); jedis.disconnect(); } 很简单吧,每次set之后都可以返回结果,标记是否成功。 二、事务方式(Transactions) redis的事务很简单,他主要目的是保障,一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 看下面例子: @Test

分布式事务TCC两阶段提交

て烟熏妆下的殇ゞ 提交于 2020-03-10 11:35:41
分布式事务TCC两阶段提交 两阶段提交 在提交事务的过程中需要在多个节点之间进行协调,而各节点对锁资源的释放必须等到事务最终提交时,比较耗时,锁资源发生冲突的概率增加,当事务的并发量达到一定数量的时候,就会出现大量事务积压甚至出现死锁,系统性能就会严重下滑。 TCC型事务 TCC属于补偿型柔性事务,本质也是一个两阶段型事务。 TCC(Try-Confirm-Cancel) TCC分三部分,如下所述: Try: 尝试执行业务; Confirm: 确认执行业务; Cancel: 取消执行业务; 实例 Try 操作 tryX 下单系统创建待支付订单 tryY 冻结账户红包200元 tryZ 冻结资金账户800元 Confirm 操作 confirmX 订单更新为支付成功 confirmY 扣减账户红包200元 confirmZ 扣减资金账户800元 Cancel 操作 cancelX 订单处理异常,资金红包退回,订单支付失败 cancelY 冻结红包失败,账户余额退回,订单支付失败 cancelZ 冻结余额失败,账户红包退回,订单支付失败 来源: oschina 链接: https://my.oschina.net/wallenheng/blog/3190895

分布式事物2 基于rocketmq

梦想的初衷 提交于 2020-03-05 20:05:44
分布式事物2 基于rocketmq 从rocketmq的官网可以看到,它又以下几种消息类型: 1)发送同步消息 这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知 2)发送异步消息 异步消息通常用在对响应时间敏感的业务场景,即发送端不能容忍长时间地等待Broker的响应。 3)单向发送消息 这种方式主要用在不特别关心发送结果的场景,例如日志发送。 消息消费: 1)负载均衡模式 消费者采用负载均衡方式消费消息,多个消费者共同消费队列消息,每个消费者处理的消息不同 2)广播模式 消费者采用广播的方式消费消息,每个消费者消费的消息都是相同的 4)顺序消息 消息有序指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。 顺序消费的原理解析,在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);而消费消息的时候从多个queue上拉取消息,这种情况发送和消费是不能保证顺序。但是如果控制发送的顺序消息只依次发送到同一个queue中,消费的时候只从这个queue上依次拉取,则就保证了顺序。当发送和消费参与的queue只有一个,则是全局有序;如果多个queue参与,则为分区有序,即相对每个queue,消息都是有序的。 5)延时 比如电商里

分布式事务中常见的三种解决方案

我的梦境 提交于 2020-03-05 19:11:28
一、分布式事务前奏 事务:事务是由一组操作构成的可靠的独立的工作单元,事务具备ACID的特性,即原子性、一致性、隔离性和持久性。 本地事务:当事务由资源管理器本地管理时被称作本地事务。本地事务的优点就是支持严格的ACID特性,高效,可靠,状态可以只在资源管理器中维护,而且应用编程模型简单。但是本地事务不具备分布式事务的处理能力,隔离的最小单位受限于资源管理器。 全局事务:当事务由全局事务管理器进行全局管理时成为全局事务,事务管理器负责管理全局的事务状态和参与的资源,协同资源的一致提交回滚。 TX协议:应用或者应用服务器与事务管理器的接口。 XA协议:全局事务管理器与资源管理器的接口。XA是由X/Open组织提出的分布式事务规范。该规范主要定义了全局事务管理器和局部资源管理器之间的接口。主流的数据库产品都实现了XA接口。XA接口是一个双向的系统接口,在事务管理器以及多个资源管理器之间作为通信桥梁。之所以需要XA是因为在分布式系统中从理论上讲两台机器是无法达到一致性状态的,因此引入一个单点进行协调。由全局事务管理器管理和协调的事务可以跨越多个资源和进程。全局事务管理器一般使用XA二阶段协议与数据库进行交互。 AP:应用程序,可以理解为使用DTP(Data Tools Platform)的程序。 RM:资源管理器,这里可以是一个DBMS或者消息服务器管理系统

分布式服务如何设计分布式事务

随声附和 提交于 2020-03-04 00:47:55
1、如果A-B-C强相关 考虑采用TCC框架 ByteTCC,Himly 阿里的fescar,seata 推荐使用seata TCC框架 2、如果A 与BC并不强相关 考虑可靠消息最终一致性解决方案,例如A成功后通过发送kafka事件,BC监听事件来处理。 rocketMQ,提供了分布式事务支持。 来源: CSDN 作者: 雪落南城 链接: https://blog.csdn.net/lbh199466/article/details/104641811

使用nhmicro提供的micro-datasource嵌入式的解决微服务架构中分布式事务问题

与世无争的帅哥 提交于 2020-03-02 17:51:41
应用原理 : 使用micro-datasource数据源使事务与线程解耦,通过groupid在其他线程进行事务提交或回滚。 多个系统需要统一提交时,通过activemq发送提交消息(含有groupid),各系统收到消息后进行统一提交或回滚。 micro-datasource数据源与Mybatis或hibernate或jdbcTemplate等orm框架可以整合使用 原理是micro-datasource包中提供了路由数据源方案,通过aop动态切换普通数据源和分布式数据源 使用普通数据源时仍接受传统事务管理器管理 jar包下载: 需要使用nh-micro-datasource.jar 依赖 log4j.jar\org.springframework.beans.jar\org.springframework.aop.jar\org.springframework.core.jar\aopalliance.jar <dependency> <groupId>com.github.jeffreyning</groupId> <artifactId>nh-micro-datasource</artifactId> <version>1.0.0-RELEASE</version> </dependency> jms通知功能需要使用nh-micro-datasource-msg.jar