阿里中间件(Aliware)双十一专题——“分布式事务中间件GTS(TXC)”

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 什么是事务?大家最熟悉的莫过于数据库事务,一大堆SQL操作一个DB,要么同时成功、要么同时失败。(GTS支持ACID,特此公告,不再解释) 什么是分布式事务?一大堆SQL操作N个DB,或者一大堆服务操作1个或多个DB,要么同时成功、要么同时失败。

一、 前言

什么是事务?大家最熟悉的莫过于数据库事务,一大堆SQL操作一个DB,要么同时成功、要么同时失败。(GTS支持ACID,特此公告,不再解释)
什么是分布式事务?一大堆SQL操作N个DB,或者一大堆服务操作1个或多个DB,要么同时成功、要么同时失败。
怎么保证事务?有一个解决办法是“两阶段提交”,一阶段大家先把该做的做了但是不提交,二阶段再一起提交或都不提交。
单机事务到分布式事务的变化?在分布式环境下,所有的状态同步都需要走网络,成本变得非常高。因此做好分布式事务容易,难点在于怎样做的又快又好。
现状?分布式事务是性能杀手,千万不要使用,可以异步做最终一致,既保证性能又保证功能,完美!我们是程序员,不怕实现幂等、不怕实现补偿、不怕逻辑复杂、不怕工作量、不怕人肉、不怕加班。。。
楼主想说:niubility!然而事实的真相是,过度使用事务造成的性能下降的恶果,应该由应用的开发者承担;应用开发者在使用事务的时候,必须考虑到性能问题。然而,作为中间件,必须提供事务机制,而不是因为性能问题,就干脆不提供事务。我们有义务把通用的问题从复杂业务中抽丝剥茧,做成稳定的工具,避免重复造轮子。更何况,我们只是牺牲了那么一丢丢性能,换来的是不用加班、不用承担故障风险、可以更好的关注业务本身。

二、 GTS来了

进入正题,什么是GTS?GTS是一款高性能、高可靠、接入简单的分布式事务中间件,用于解决分布式环境下的事务一致性问题。该产品支持 DRDS(TDDL)、RDS、Oracle、MySQL、PostgreSQL、H2 等多种数据源,并可以配合使用 EDAS(HSF)、Dubbo 及多种私有 RPC 框架,同时还兼容 MetaQ(MQ) 消息队列等中间件产品,能够轻松实现分布式数据库事务、多库事务、消息事务、服务链路级事务及其各种组合,策略丰富,易用性和性能兼顾。
我们专注于提供易使用、高性能、稳定、可靠的完整的分布式事务解决方案体系。

三、 双11解决了哪些问题

作为双11战场的新兵,我们承担了阿里影业、村淘、菜鸟结算等业务线,以及公有云波司登、慧银等外部用户的双11大促。
GTS承担了保证业务数据一致的责任,并且一般在业务出现异常的时候才发挥作用,把不完整的业务数据回滚到操作之前的状态。这种异常,在业务压力不大的情况下,是低概率事件,而到了双11大促这种业务流量突发的情况下,变成了频发事件。从11.11零点到10分这段时间里,后端通用服务系统均存在不同程度限流的状况,前端业务出现了大量的不完整事务。我相信,使用GTS的产品线都可以爽歪歪、早早洗洗碎了,完全不用担心那些不完整的事务怎么处理。
事实说明,菜鸟结算、阿里影业、村淘的三个业务场景,在双11的前30分钟内,业务回滚超过5%,全天平均回滚超过2%。其他业务线普遍回滚事务超过总量的1%。无一数据不一致!!!

四、 更多的应用场景

(1)解决TDDL分库分表产生的跨数据库事务

54b00f52c432827f48929a2d635950acfa705cbf

@TxcTransaction(timeout = 60 * 1000)
void funcUseDrds(DataSource tddlDataSource) throws SQLException {
Connection connection = tddlDataSource.getConnection();
Statement statement = connection.createStatement();
try {
statement.execute("insert");
statement.execute("update");
statement.execute("delete");
} catch (Exception e) {
throw new TxcExecption(e);
} finally {
// clear env ...
}
}

(2)解决服务化产生的操作多个服务的分布式事务

b28c09f9af434173b6daa7eb3d4f1132c7aae0a6

@TxcTransaction(timeout = 60 * 1000)
void funcUseEdas(HsfService hsf) {
// 调用远端服务
boolean ret = hsf.runBusiness();
if(ret == false)
throw new TxcExecption;
}

(3)解决异构数据源,包括TDDL、MetaQ、以及其他关系型数据库产品的分布式事务问题;

380c149427ab28436cb91e85bf65cf554cc13872

@TxcTransaction(timeout = 60 * 1000)
void distributedTransaction(
Service svc,
DataSource dataSource,
Message msg, TxcMetaQProducer producer)
{

// 调用远端服务
serv.runBusiness();
// 调用DB
dataSource.executeSQL();
// 调用MQ
producer.sendMessage();
}

五、 我们的优势

完整的分布式事务解决方案;
高性能、高可靠;
九项发明专利奠定了技术壁垒;
支撑内外近50个用户,经过实际验证。

六、 未来的挑战及我们的目标

提升SQL兼容性
提升用户体验
丰富可接入资源(含nosql类、消息类、rdbms、更多服务框架)

阿里云帮助文档:https://help.aliyun.com/document_detail/43085.html?spm=5176.product29500.6.225.ePTeeW

阿里沈询:分布式事务原理与实现 2016年12月28日20:00在线直播 绝对干货等你来   立即去报名观看直播

相关文章
|
6月前
|
消息中间件 数据库
消息中间件系列教程(18) -RabbitMQ-基于RabbitMQ解决分布式事务(思想)
消息中间件系列教程(18) -RabbitMQ-基于RabbitMQ解决分布式事务(思想)
50 0
|
5月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
9月前
|
NoSQL Java Redis
阿里Java高级岗中间件二面:GC+IO+JVM+多线程+Redis+数据库+源码
虽然“钱多、事少、离家近”的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难。但是,有些技术人确实是认真努力工作,但在面试时表现出的能力水平却不足以通过面试,或拿到高薪,其实不外乎以下 2 个原因:
|
9月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
9月前
|
算法 NoSQL Java
2021年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
10月前
|
消息中间件 安全 Java
全网首发!消息中间件神仙笔记,涵盖阿里十年技术精髓
消息中间件是分布式系统中的重要组件,在实际工作中常用消息中间件进行系统间数据交换,从而解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。
|
10月前
|
消息中间件 数据采集 Java
开发神技!阿里消息中间件进阶手册限时开源,请接住我的下巴
相信大家在实际工作中都用过消息中间件进行系统间数据交换,解决应用解耦、异步消息、流量削峰等问题,由此消息中间件的强大功能想必也不用我多说了!目前业界上关于消息中间件的实现多达好几十种,可谓百花齐放,所用的实现语言同样也五花八门。不管使用哪一个消息中间件,我们的目的都是实现高性能、高可用、可伸缩和最终一致性架构。
|
12月前
|
缓存 NoSQL 容灾
《Java应用提速(速度与激情)》——六、阿里中间件提速
《Java应用提速(速度与激情)》——六、阿里中间件提速
|
12月前
|
消息中间件 NoSQL Dubbo
阿里Java高级岗中间件二面:GC+IO+JVM+多线程+Redis+数据库+源码
一转眼,都2023年了,你是否在满意的公司?拿着理想的薪水? 虽然“钱多、事少、离家近”的工作可能离技术人比较远,但是找到一份合适的工作,其实并不像想象中那么难。但是,有些技术人确实是认真努力工作,但在面试时表现出的能力水平却不足以通过面试,或拿到高薪,其实不外乎以下 2 个原因: 第一,“知其然不知其所以然”。做了多年技术,开发了很多业务应用,但似乎并未思考过种种技术选择背后的逻辑。所以,他无法向面试官展现出自己未来技术能力的成长潜力。面试官也不会放心把具有一定深度的任务交给他。 第二,知识碎片化,不成系统。在面试中,面试者似乎无法完整、清晰地描述自己所开发的系统,或者使用的相关技术。
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)