- 浏览: 807415 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (360)
- Java (101)
- JPA/Hibernate (10)
- Spring (14)
- Flex/BlazeDS (37)
- Database (30)
- Lucene/Solr/Nutch (0)
- Maven/Ant (25)
- CXF/WebService (3)
- RPC/RMI/SOAP/WSDL (1)
- REST (6)
- TDD/BDD/JUnit (1)
- Servlet/JSP (2)
- AI/MachineLearning (3)
- Resource (1)
- 字符编码 (2)
- OOA/OOPS/UML (5)
- DesignPattern (8)
- 算法与数据结构 (11)
- Web&App Server (13)
- 并发&异步&无阻塞 (7)
- Entertainment (4)
- JavaScript/ExtJS (45)
- CodeStyle&Quality (1)
- svn/git/perforce (8)
- JSON (2)
- JavaScriptTesting (4)
- Others (6)
- RegularExpression (2)
- Linux/Windows (12)
- Protocal (2)
- Celebrities (1)
- Interview (1)
- 计算机语言 (1)
- English (2)
- Eclipse (5)
- TimeZone/时区 (1)
- Finance (1)
- 信息安全 (1)
- JMS/MQ (2)
- XSD/XML/DTD (3)
- Android (4)
- 投资 (3)
- Distribution (3)
- Excel (1)
最新评论
-
qdujunjie:
如果把m换成具体的数字,比如4或者5,会让读者更明白
m阶B树中“阶”的含义 -
java-admin:
不错,加油,多写点文章
关于Extjs的mixins和plugin -
xiehuaidong880827:
你好,我用sencha cmd打包完本地工程后,把app.js ...
ExtJS使用Sencha Cmd合并javascript文件为一个文件 -
KIWIFLY:
lwpan 写道inverse = "true&qu ...
Hibernate中什么时候使用inverse=true -
luedipiaofeng:
good
消除IE stop running this script弹出框
关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
http://blog.csdn.net/bluishglc/article/details/7612811
作者:谢照东
链接:http://www.zhihu.com/question/29483490/answer/107142534
来源:知乎
比如事务补偿机制:即在事务链中的任何一个正向事务操作,都必须存在一个完全符合回滚规则的可逆事务。
或者两阶段提交、三阶段提交:分布式事务服务(DTS) 支付宝的DTS实现!最近也看见一个tcc方案GitHub - changmingxie/tcc-transaction: tcc-transaction是TCC型事务java实现 还没有线上试过
或者利用消息系统(转载自高可用架构公众号)
经典方案 - eBay 模式
此方案的核心是将需要分布式处理的任务通过消息日志的方式来异步执行。消息日志可以存储到本地文本、数据库或消息队列,再通过业务规则自动或人工发起重试。人工重试更多的是应用于支付场景,通过对账系统对事后问题的处理。
消息日志方案的核心是保证服务接口的幂等性。
考虑到网络通讯失败、数据丢包等原因,如果接口不能保证幂等性,数据的唯一性将很难保证。
eBay 方式的主要思路如下。
Base:一种 Acid 的替代方案
此方案是 eBay 的架构师 Dan Pritchett 在 2008 年发表给 ACM 的文章,是一篇解释 BASE 原则,或者说最终一致性的经典文章。文中讨论了 BASE 与 ACID 原则在保证数据一致性的基本差异。
如果 ACID 为分区的数据库提供一致性的选择,那么如何实现可用性呢?答案是
BASE (basically available, soft state, eventually consistent)
BASE 的可用性是通过支持局部故障而不是系统全局故障来实现的。下面是一个简单的例子:如果将用户分区在 5 个数据库服务器上,BASE 设计鼓励类似的处理方式,一个用户数据库的故障只影响这台特定主机那 20% 的用户。这里不涉及任何魔法,不过它确实可以带来更高的可感知的系统可用性。
文章中描述了一个最常见的场景,如果产生了一笔交易,需要在交易表增加记录,同时还要修改用户表的金额。这两个表属于不同的远程服务,所以就涉及到分布式事务一致性的问题。
文中提出了一个经典的解决方法,将主要修改操作以及更新用户表的消息放在一个本地事务来完成。同时为了避免重复消费用户表消息带来的问题,达到多次重试的幂等性,增加一个更新记录表 updates_applied 来记录已经处理过的消息。
系统的执行伪代码如下
基于以上方法,在第一阶段,通过本地的数据库的事务保障,增加了 transaction 表及消息队列 。
在第二阶段,分别读出消息队列(但不删除),通过判断更新记录表 updates_applied 来检测相关记录是否被执行,未被执行的记录会修改 user 表,然后增加一条操作记录到 updates_applied,事务执行成功之后再删除队列。
通过以上方法,达到了分布式系统的最终一致性。进一步了解 eBay 的方案可以参考文末链接。
或者在业务层面整合,整合成本地事务的方式。
Dubbo分布式事务
http://javatar.iteye.com/blog/981787
http://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring--with-and-without-xa.html
http://blog.csdn.net/bluishglc/article/details/7612811
作者:谢照东
链接:http://www.zhihu.com/question/29483490/answer/107142534
来源:知乎
比如事务补偿机制:即在事务链中的任何一个正向事务操作,都必须存在一个完全符合回滚规则的可逆事务。
或者两阶段提交、三阶段提交:分布式事务服务(DTS) 支付宝的DTS实现!最近也看见一个tcc方案GitHub - changmingxie/tcc-transaction: tcc-transaction是TCC型事务java实现 还没有线上试过
或者利用消息系统(转载自高可用架构公众号)
经典方案 - eBay 模式
此方案的核心是将需要分布式处理的任务通过消息日志的方式来异步执行。消息日志可以存储到本地文本、数据库或消息队列,再通过业务规则自动或人工发起重试。人工重试更多的是应用于支付场景,通过对账系统对事后问题的处理。
消息日志方案的核心是保证服务接口的幂等性。
考虑到网络通讯失败、数据丢包等原因,如果接口不能保证幂等性,数据的唯一性将很难保证。
eBay 方式的主要思路如下。
Base:一种 Acid 的替代方案
此方案是 eBay 的架构师 Dan Pritchett 在 2008 年发表给 ACM 的文章,是一篇解释 BASE 原则,或者说最终一致性的经典文章。文中讨论了 BASE 与 ACID 原则在保证数据一致性的基本差异。
如果 ACID 为分区的数据库提供一致性的选择,那么如何实现可用性呢?答案是
BASE (basically available, soft state, eventually consistent)
BASE 的可用性是通过支持局部故障而不是系统全局故障来实现的。下面是一个简单的例子:如果将用户分区在 5 个数据库服务器上,BASE 设计鼓励类似的处理方式,一个用户数据库的故障只影响这台特定主机那 20% 的用户。这里不涉及任何魔法,不过它确实可以带来更高的可感知的系统可用性。
文章中描述了一个最常见的场景,如果产生了一笔交易,需要在交易表增加记录,同时还要修改用户表的金额。这两个表属于不同的远程服务,所以就涉及到分布式事务一致性的问题。
文中提出了一个经典的解决方法,将主要修改操作以及更新用户表的消息放在一个本地事务来完成。同时为了避免重复消费用户表消息带来的问题,达到多次重试的幂等性,增加一个更新记录表 updates_applied 来记录已经处理过的消息。
系统的执行伪代码如下
基于以上方法,在第一阶段,通过本地的数据库的事务保障,增加了 transaction 表及消息队列 。
在第二阶段,分别读出消息队列(但不删除),通过判断更新记录表 updates_applied 来检测相关记录是否被执行,未被执行的记录会修改 user 表,然后增加一条操作记录到 updates_applied,事务执行成功之后再删除队列。
通过以上方法,达到了分布式系统的最终一致性。进一步了解 eBay 的方案可以参考文末链接。
或者在业务层面整合,整合成本地事务的方式。
Dubbo分布式事务
http://javatar.iteye.com/blog/981787
http://www.javaworld.com/article/2077963/open-source-tools/distributed-transactions-in-spring--with-and-without-xa.html
发表评论
-
使用RestTemplate发送post JSON请求
2019-01-12 17:30 4760private final String BASE_URL = ... -
使用RestTemplate发送post JSON请求
2019-01-12 17:30 3544private final String BASE_URL = ... -
Spring线程池ThreadPoolTaskExecutor
2018-08-06 09:51 1910<!-- spring thread pool ex ... -
Spring注解事物@Transactional不工作
2018-08-02 18:50 2697“In proxy mode (which is the de ... -
mysql,oracle,sql server中的默认事务隔离级别
2018-08-02 17:03 704mysql,oracle,sql server中的默认事务隔离 ... -
创建前缀索引报长度超出错误
2018-07-25 15:44 1741表结构定义如下: CREATE TABLE `sku` ( ` ... -
Mysql Varchar字符长度
2018-07-25 15:23 1357`sku_name` VARCHAR(200) NOT NUL ... -
使用 Spring RestTemplate 发送 post 请求
2018-07-23 18:49 11736注意点: 1)使用MultiValueMap设置入参,不要使 ... -
Spring MVC几种页面跳转方式
2017-07-26 10:31 2015Spring MVC几种页面跳转方式 http://blog. ... -
Mysql分表和分区的区别、分库分表介绍与区别
2017-06-14 20:32 1877Mysql分表和分区的区别、分库分表介绍与区别 http:// ... -
Nested Loop Join和子查询
2017-06-03 20:56 740这2个是不同的概念,不要混淆在一起了 Nested Loop ... -
oracle中rownum和rowid的区别
2017-06-03 20:55 1013oracle中rownum和rowid的区 ... -
大数据技能图谱
2016-03-24 13:33 874http://mp.weixin.qq.com/s?__biz ... -
Java 方法(JdbcTransactionTemplate)与存储过程共享同一个事务
2016-01-12 19:24 1721如果要让java来管理事务,那么在存储过程里不能写提交(com ... -
Java 平台开发有效事务策略,数据库事务性能
2016-01-11 15:42 881Java 平台开发有效事务策略系列文章 http://www. ... -
Spring中XML配置注入枚举类型值
2015-10-21 10:56 5817http://stackoverflow.com/questi ... -
SQL语句的where字句表达式顺序影响性能吗?
2015-09-09 13:45 1970比如下面的SQL语句性能有区别吗? select * from ... -
Sybase database Transaction mode: chained and unchained
2015-09-02 10:15 1460Support for Sybase database Tra ... -
annotation-config vs(对比) component-scan
2015-08-26 10:51 678<cx:annotation-config/> 可 ... -
聚集索引,非聚集索引,主键,索引类型及实现方式
2015-08-06 11:31 826聚集索引和非聚集索引(整理) http://www.cnblo ...
相关推荐
还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现多数据源的事务实现。... 4-1 Spring事务机制_基本接口 4-2 Spring事务机制_实现 4-3 Jpa事务实例 4-4 Jms事务原理 4-5 Jms-session事务实例 4...
- 2PC(两阶段提交):最传统的分布式事务协议,由准备阶段和提交阶段组成。虽然简单,但存在阻塞和单点故障问题。 - TCC(Try-Confirm-Cancel):每个服务提供try、confirm和cancel三个操作,尝试执行、确认执行...
- 第二阶段(提交阶段):如果所有参与者都同意,则协调者发送“提交”指令;如果有任何参与者拒绝,则发送“回滚”指令。 #### 四、Java EE平台中的分布式事务实现 在Java EE平台中,分布式事务可以通过以下几种...
1. 两阶段提交(2PC,Two-Phase Commit):2PC是最基础的分布式事务协议,分为准备阶段和提交阶段。虽然简单,但存在阻塞问题和单点故障风险。 2. 三阶段提交(3PC,Three-Phase Commit):为了解决2PC的缺点,引入...
分布式事务解决方案「手写代码」,完整版视频教程下载。 课程大纲 1.基础概念:了解事务的ACID、CAP理论、BASE理论,为分布式方案打基础 2.2PC/3PC:通过2PC演化各种方案:XA方案、JTA、LCN、Seata 3.TCC:TCC不依赖...
1. 两阶段提交(2PC):是最经典的分布式事务解决方案,由一个协调者和多个参与者组成,分为准备阶段和提交阶段。然而,2PC存在单点故障和阻塞问题。 2. 三阶段提交(3PC):在2PC的基础上增加了预提交阶段,降低了...
在上述代码中,`crossDatabaseOperation`方法内的两个数据库操作将被包含在一个分布式事务中。即使其中一个数据库操作失败,Atomikos也会确保两个数据库的状态都恢复到事务开始前的状态,实现了ACID(原子性、一致性...
4. **TCC编程式解决方案**:这种方案通过预先定义好Try-Confirm-Cancel三个阶段的操作来实现分布式事务,适用于那些对事务控制有特殊需求的场景。 本文将重点介绍如何使用RabbitMQ作为消息中间件来解决分布式事务...
- **基于数据库的XA/JTA协议**:需要数据库支持,如Oracle、MySQL的分布式事务支持,但可能增加复杂性和性能开销。 - **异步校验数据**:如支付宝、微信支付通过主动查询支付状态来保持一致性,但可能会引入额外的...
这个项目整合的jar包是针对Java Transaction API (JTA) 的扩展,提供了分布式事务管理功能,使得应用程序能够在多个数据库之间进行跨库事务操作。 JTA 是Java平台标准版(Java EE)的一部分,它定义了一个接口,...
Java提供JTA(Java Transaction API)和JTS(Java Transaction Service)来处理分布式事务,确保数据的一致性。X/Open XA规范也是处理分布式事务的重要标准。 7. 分布式锁与一致性 在分布式环境中,同步和一致性...
31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建...