分享一下 TDSQL 在实现“双一致性(事务一致性、分布式一致性)”,并进步分布式事务型集群的解决效率的摸索实际。
家喻户晓,数据库是一个高并发零碎,所有的操作通过事务的语义加以束缚。而事务的语义,体现为事务的四个个性——ACID:原子性(A)、一致性(C)、隔离性(I)、持久性(D)。而一个数据库系统,其最外围的技术,就是事务处理技术。为了保障 ACID,数据库应用了多种简单技术,其中, 技术的外围是并发拜访控制算法。
事务处理技术,有两个初衷: 一是数据正确性,二是并发高效率。TDSQL 的分布式事务处理模型,经验了 2 代,第一代采纳的技术是 2PL+MVCC,第二代采纳的是 OCC+2PL+MVCC。OCC 技术交融了 2PL 以解决高抵触不能高效率的问题,OCC 交融了 MVCC 打消了读写、写读相互阻塞的并发问题进一步提高了性能,自适应的 OCC 使得在 OCC 和 2PL 间动静主动切换,使得分布式事务处理机制更聪慧。
然而,这些还不足以体现 TDSQL 如何着手进步分布式事务的效率。 在架构上,TDSQL 是去中心化的架构,没有集中式单 Master 那样的解决分布式事务的单点瓶颈,事务协调器间传递相关联的分布式事务管制信息量被优化,分布式并发拜访控制算法的抵触粒度管制在数据项一级从而进步了事务的并发度,因此效率更高。另外还有很多其余方面的优化,使得 TDSQL 的分布式事务处理效率较高。
而咱们持续探讨,在分布式背景下,怎么实现“双一致性(事务一致性、分布式一致性),并进步分布式事务型集群的解决效率?”
实现分布式事务面临的问题
该问题,是业界一个难题。Google 的 Spanner 零碎实现了双统一,但事务处理的效率很低。TDSQL 在深入研究分布式事务处理的技术时,不仅解决了全局一致性问题(2019DTCC 大会分享:分布式数据库全局读一致性),而且提出了一个“统一致性模型”,不仅在正确性上实现了双统一的性能,而且高效地解决了该问题。
在 TDSQL 看来,双一致性的正确性绝对容易实现(只管这也是一个很难解决的问题),但分布式事务型数据库的性能难以无效进步。
那么,有哪些因素,制约着分布式事务型数据库性能的进步呢?
一些研究者认为,是网络带宽限度了性能;一些研究者认为,制约分布式事务型数据库性能的进步有 2 个因素,一是“latency”自身,二是“latency”缩短了事务的生命周期,而长的事务生命周期导致并发事务发生冲突的概率增大,进而引发事务回滚升高了性能。
分布式事务的瓶颈
另外,影响正确性和性能的,是事务处理技术中的核心技术——并发拜访控制算法。
如图 3 所示,试验表明,在事务型数据库中,OCC 算法效率更高,在多核环境下,OCC 算法比 2PL 算法性能高出 170 倍。然而,高的并发抵触下,OCC 的回滚率减少,表明 OCC 算法的毛病也很显著。
并发拜访控制算法的优劣
然而,还有研究者对于多种并发拜访控制算法进行了较验证,如图 4,发现传统的 OCC 算法比很多种出名的改良的 OCC 算法(如出名的 Tictoc、自适应的 OCC 等算法)更无效。这表明,不同人实现的不同的零碎只管采纳了一样的算法思路,然而实际效果却大不相同(如 Tictoc 本身的测试结果表明其改良的 OCC 算法效率好于传统的 OCC 算法)。所以,咱们在思考,不同试验失去不同的论断,其背地,真的影响分布式事务的效率的因素到底是什么?
多种并发拜访控制算法的比拟之一
其实能够发现,不同的研究者的验证后果,是不能相互推证的,他们的验证后果,只能表明算法之间的大抵趋势(如 OCC 性能会比 2PL 更好一些)差别,但不能准确表明算法之间的差别点到底在哪里。
多种并发拜访控制算法的比拟之二
腾讯在 MySQL 上做了热点更新性能,发现在高并发高竞争同一个数据项的状况下,影响 MySQL 性能的,不是 2PL 这个算法自身,而是为解决死锁问题时死锁检测算法耗费的 CPU 资源,故 MySQL 的事务吞吐量近乎为 0。禁止了死锁检测后,并用零碎锁(非事务锁)互斥了在同一个数据项上的并发竞争后,MySQL 零碎事务处理吞吐量回升的万倍左右。
实在零碎下的实在问题
这阐明了,在不同零碎下实现的雷同算法的后果,只具备参考价值。如果在理论零碎中,如 MySQL、PostgreSQL 中做实现,才更有理论参考意义。