录:1.什么是事务?2.换个角度看事务3.Java中的事务4.啥又是分布式事务?5.分布式事务的几种实现思路6.总结写在前面在分布式、微服务大行其道的今天,相信大家对这些名词都不会陌生。而说到使用分布式,或者拆分微服务的好处,你肯定能想到一大堆。比如每个人只需要维护自己单独的服务,没有了以前的各种代码冲突。自己想测试、想发布、想升级,只需要care自己写的代码就OK了,很方便很贴心!然而事物都有两面性,但是它也同时也会带来的一些问题,今天的文章谈的就是分布式系统架构带来的其中一个棘手的问题:分布式事务1、什么是事务?首先抛出来一个问题:什么是事务?有人会说事务就是一系列操作,要么同时成功,要么同时失败;然后会从事务的ACID特性(原子性、一致性、隔离性、持久性)展开叙述。确实如此,事务就是为了保证一系列操作可以正常执行,它必须同时满足ACID特性。但是今天我们换个角度思考下,我们不仅要知道what(比如什么是事务),更要知道事务的why(比如为什么会有事务这个概念?事务是为了解决什么问题)。有时候,换个角度说不定有不一样的收获。2、换个角度看事务就像经典的文学作品均来自于生活,却又高于生活,事务的概念同样来自于生活,引入“事务”肯定是为了解决某种问题,不然,谁又愿意干这么无聊的事情呢?最简单最经典的例子:银行转账,我们要从A账户转1000块到B账户。正常情况下如果从A转出1000到B账户之后,A账户余额减1000(这个操作我们用action1代表),B账户余额加1000(这个操作我们用action2代表)首先我们要明确一点,action1和action2是两个操作。既然是两个操作那么就一定会存在执行的先后顺序。那么就可能会出现action1执行完刚准备去执行action2的时候出问题了(比如数据库负载过大暂时拒绝访问)。类比到我们生活中,那就是我给朋友转了1000块钱,然后我卡里的余额少了1000,但是我朋友确没有收到钱。为解决这种“money去哪儿了”的问题,引入了“事务”的概念。也就是说,既然我转账的时候你保证不了100%能成功,比如银行系统只能保证99.99%的高可用,那么在那0.01%的时间里如果出现了上述问题,银行系统直接回滚action1操作?(即把1000块钱再加回余额中去)对于银行系统来说,可能在0.01%的时间里我保证不了action1和action2同时成功,那么在出问题的时候,我保证它俩同时失败。(事务的原子性)通过这个例子,就已经回答了刚开始提出的2个问题(为什么会有事务?事务是为了解决什么问题?)总

U2FsdGVkX19WBxUWzF6E6ZnoIAkitNCzvtyzz2D3M1CtZxwQeD4VtbrAQTVMyoMd
Z42Xobp0ZBjw40yi48nMA9Qjz2t/bjX6SwjkxfXjZXO1++nG+3gCe2bsFrczX+SB19E5I0XAYgu71MIyt5VIaIKvyocf/CBS9GwgfyfWOaZcgpFORL7683Lw95zH/KM6Go7HsGD+cakx/RJp83UzvfrDPGpLXzd5uHM72Fulsn7/5b2u0k5dnMUrnxa2NOpNHW0P8ZgIrwebSNJ4koE/bxAjMpo+n7qctYV2776Oeuv2fG8jhcMroVqjbQilXyO8hOxqx7PP4eir6nQvJPaFgESlPYlr+bDBmPNyyTzkCBdquG6HDS0UacrqwDk/LBtI8LVnqpgYAmxmz5zj8qyRqxmXe/UEjzKvPY4B8ZS0GfvisPW8VGGBisPPcjhat0RIpBr/Le9tfXCApaKr6zWsjQ6uew80SlB+QxcPqE+PvZOmSIzdTueZJZwPf2cZYZ5vbdOZwTfp5SLvYw4hlBArJjGz4t9dxq95+LDG0s2dJzWEBAF4+TiSjiUrRlZfOnCNjU9hWCh3g/aMRMuxwShMgVM1ZRie58h4IhFVnJ6GdawKGoFTZpgjgPIeklF9wggDdjuh7oQtZAzcVUTePIvAh1u4brYPYYiC/AUmTwP76OmxYieuvGWIco2d0nHDRU8Aemp8HGhaJA/2Y4/pyZXwvVEyGV6K8DTqwRsGG1q3Fwgsr7Ofh5rLqxibqbeUYXiaGsBB1zeYMX/9tSCGhdT2IlA9n9xnabSQmh1S5vCLcYhOqPLWl8qWLQhm70wEND0X1UttOBlD0TRseVvNxTVlnuloUIrHEw8GhtYWiIBahnp2+DszZV+DTitoybsQEvP6m3nyDp34VcyAw86ZTTocxcM4DGlTwT05iB8rcZCuA6BQK3kzr8OD5uLOXs8riXDCvsb8Tl1VvUl4FQcJv4r74r6/YcqYYR46wcj1elPSWhBnnDzq8x3yQkLgjzQwyKpLIjNY+Nh1oVKPR8lvCfyL7AsprCbNYMXlzn3pPDisLOU=

结一下:事务就是通过它的ACID特性,保证一系列的操作在任何情况下都可以安全正确的执行。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐