空心|Aurora,万字详文:腾讯数据库专家深度探索Amazon( 九 )


3.2事务与数据分布
在1.2节 , 我们曾说 , 目前制约存储层内的“Caching”起更大作用的因素 , 主要在于分布式事务的机制的选取和InnoDB自身的事务实现机制 。
这有两层含义 。 一是InnoDB自身的事务实现机制制约了存储层内的“Caching”起更大作用 。 二是分布式事务的机制的选取关联着存储层内的“Caching”是否有机会起更大作用 。
首先:InnoDB的事务信息 , 几乎不在数据上(除了元组头上有个事务ID用于版本可见性判断外再无其他信息) , 而是位于内存中 。 这其实是在说 , InnoDB的行级锁即索引项的记录锁 , 其锁表位于内存 , 不能随着Aurora的数据分布而“分布” 。 而Oracle的RAC可是在数据页上存储了足够多的事务信息(参见《数据库事务处理的艺术事务管理与并发控制》一书的第六章) , 所以RAC中的其他节点 , 就能够随着被分布的数据而获取事务相关的信息从而在分布的各节点上处理事务的ACID特性 。 此点是MySQL能否走向分布式事务的一个关键点(当然选用不同的分布式事务实现机制会反过来影响这点结论) 。
其次:分布式事务的机制的选取为什么会影响着Aurora的存储层内的“Caching”是否有机会起更大作用呢?
有的分布式事务架构 , 采取的是集中式架构 , 即中央点总控事务管理 。 事务的决策判断 , 都要经过中央点进行 , 多个子节点需要和中央节点多次交互 。 比如PostgreSQL-XC提供了全局事务管理器 。 如果MySQL/InnoDB或者Aurora的分布式架构向这个方向发展 , 则存储层内的“Caching”就没有多少机会起更大的作用了 。
而有的分布式事务架构 , 采取的是事务信息随同存储分布 。 这样不同的节点就可以进行“分布式”的事务处理 。 比如基于BigTable的Percolator系统 , 其核心不在于两阶段提交 , 而是在于分布的数据项上 , 有着丰富的事务信息 , 这些信息足以被任何节点用于做ACID的实现判断(参考《Large-scaleIncrementalProcessingUsingDistributedTransactionsandNotifications》) 。 如果MySQL/InnoDB或者Aurora的分布式架构向这个方向发展 , 则存储层内的“Caching”就有很大的机会起更大的作用 。
走向哪条路 , 或走向另外的路 , 需看Aurora的雄心有多大 。 目前的Aurora告诉我们的是 , 其分布式架构的选择 , 仅是用户数据分布 。 事务数据的分布 , 其实是更大的一个话题 。
3.3事务处理
MySQL和InnoDB的事务处理技术 , 采用了SS2PL , 把强严格两阶段锁融合到平板事务模型中 , 以提交和回滚机制实现A特性 , 并进一步在读数据时加锁确保C特性 , 通过MVCC实现了I特性中的RR和RC隔离级别以提高并发度 。 这些技术 , 在目前的Aurora中没有大的改变 。 如前所述 , Aurora改变的是依据事务日志做持久化处理(D特性)和系统故障后的恢复的一部分流程处理(A、C特性的一部分) , 从整体上看 , 没有革命性的变化 。 但是 , Aurora的事务提交却是异步的且和VDL相关(确保持久化) , 这点在论文中描述很细致如下:
InAurora,transactioncommitsarecompletedasynchronously.Whenaclientcommitsatransaction,thethreadhandlingthecommitrequestsetsthetransactionasidebyrecordingits“commitLSN”aspartofaseparatelistoftransactionswaitingoncommitandmovesontoperformotherwork.TheequivalenttotheWALprotocolisbasedoncompletingacommit,ifandonlyif,thelatestVDLisgreaterthanorequaltothetransaction’scommitLSN.AstheVDLadvances,thedatabaseidentifiesqualifyingtransactionsthatarewaitingtobecommittedandusesadedicatedthreadtosendcommitacknowledgementstowaitingclients.Workerthreadsdonotpauseforcommits,theysimplypullotherpendingrequestsandcontinueprocessing.


推荐阅读