数据库分库分表(sharding)系列(四) 多数据源的事务处理ITeye - 凯时娱乐

数据库分库分表(sharding)系列(四) 多数据源的事务处理ITeye

2019-01-10 13:22:15 | 作者: 涵易 | 标签: 业务,数据库,处理 | 浏览: 2493

体系经sharding改造之后,本来单一的数据库会演变成多个数据库,怎么保证大都据源一起操作的原子性和共同性是不得不考虑的一个问题。总体上看,现在关于一个分布式体系的业务处理有三种方法:分布式业务、根据Best Efforts 1PC形式的业务以及业务补偿机制。咱们下面临这三种处理方法逐个进行剖析。本文原文链接: 转载请注明出处!

分布式业务

这是最为人们所熟知的大都据源业务处理机制。本文并不计划对分布式业务做过多介绍,读者可参阅此文:。在这里只想对分布式业务的利害作一下剖析。

优势:

1. 根据两阶段提交,最大极限地保证了跨数据库操作的“原子性”,是分布式体系下最严厉的业务完成方法。
2. 完成简略,作业量小。因为大都应用服务器以及一些独立的分布式业务和谐器做了许多的封装作业,使得项目中引进分布式业务的难度和作业量基本上能够忽略不计。

下风:

体系“水平”弹性的死敌。根据两阶段提交的分布式业务在提交业务时需求在多个节点之间进行和谐,最大极限地推后了提交业务的时刻点,客观上延伸了业务的履行时刻,这会导致业务在拜访共享资源时发作冲突和死锁的概率增高,跟着数据库节点的增多,这种趋势会越来越严峻,然后成为体系在数据库层面上水平弹性的"桎梏", 这是许多Sharding体系不选用分布式业务的主要原因。


根据Best Efforts 1PC形式的业务

与分布式业务选用的两阶段提交不同,Best Efforts 1PC形式选用的是一阶段端提交,献身了业务在某些特殊状况(当机、网络中止等)下的安全性,却取得了杰出的功能,特别是消除了对水平弹性的桎酷。一文对Best Efforts 1PC形式进行了具体的阐明,该文供给的Demo代码更是直接给出了在Spring环境下完成一阶段提交的大都据源业务管理示例。不过需求留意的是,原示例是根据spring 3.0之前的版别,假如你运用spring 3.0+,会得到如下过错:java.lang.IllegalStateException: Cannot activate transaction synchronization - already active,假如运用spring 3.0+,你需求参阅的完成。鉴于Best Efforts 1PC形式的功能优势,以及相对简略的完成方法,它被大大都的sharding结构和项目选用。

业务补偿机制

关于那些对功能要求很高,但对共同性要求并不高的体系,往往并不苛求体系的实时共同性,只要在一个答应的时刻周期内到达终究共同性即可,这使得业务补偿机制成为一种可行的计划。业务补偿机制开始被提出是在“长业务”的处理中,可是关于分布式体系保证共同性也有很好的参阅含义。抽象地讲,与业务在履行中发作过错后当即回滚的方法不同,业务补偿是一种过后查看并弥补的办法,它只希望在一个容许时刻周期内得到终究共同的成果就能够了。业务补偿的完成与体系业务严密相关,并没有一种规范的处理方法。一些常见的完成方法有:对数据进行对帐查看;根据日志进行比对;定时同规范数据来历进行同步,等等。

小结

 

分布式业务,最严厉的业务完成,但功能是个大问题;Best Efforts 1PC形式,功能与业务可靠性的平衡,支持体系水平弹性,大大都状况下是最合适的挑选;业务补偿机制,只能适用于对业务性要求不高,答应数据“终究共同”即可的体系,献身实时共同性,取得最大的功能报答。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯时娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章