arXiv Paper CXL论文阅读汇总
问题
在为多个松散耦合的客户端提供服务的系统中,客户端操作的失败原子性和隔离执行是一个默认要求。然而,分离的内存在远程索引中破坏了这一要求,因为客户端操作被分解为多个远程读/写。当前的索引侧重于性能改进,很大程度上忽视了对客户端故障的容忍。我们认为,实际的DM索引应该是事务性的:每个索引操作应该具有故障原子性和隔离性,除了并发隔离。
挑战
在传统的分布式系统(如KVS)中,服务器可以同时为许多松散耦合的客户端提供服务,例如微服务[2]或无状态函数[29]。一个基本的要求是,在故障情况下,每个客户端操作都应该是“全有”或“全无”的原子操作[49],并且要具有故障隔离性,一个失败的客户端不应该影响其他客户端。传统系统可以轻松实现这一点,因为它们使用远程过程调用(RPC):客户端操作通过单个RPC发送到服务器执行。只要服务器存活,每个操作就在服务器上以原子方式执行,而服务器与失败的客户端隔离。然而,分离的内存将每个客户端操作从单个网络请求解耦为多个网络化的分离式内存(DM)读/写。如果在完成所有这些写操作之前客户端发生故障,服务器上的索引数据可能变得非原子(由于部分更新),并且对其他客户端不可用(由于未释放的锁),尽管服务器是正常的。
现有方法局限性
现有的DM索引[7,40,61,70]专注于通过优化索引结构布局,以更好地适应DM或在有限的DM原语(例如内存读/写和原子操作)下支持快速并发控制来改善索引性能。尽管它们取得了性能改进,但它们没有考虑容忍客户端故障,这是由于索引的复杂性和DM索引操作的非原子性质。即使对于单个索引,要推导出一个能够容忍客户端端非原子性更新的正确算法也很困难。以B+Tree为例,一个失败的客户端插入可能导致索引数据处于许多中间状态。为了实现故障原子性和隔离性,其他客户端必须即时修复所有这些情况,因为对于分布式系统来说,停止所有客户端进行恢复是不可接受的。更糟糕的是,无法区分失败的操作和未完成的操作。盲目地修复一个(未失败的)未完成的操作会导致数据损坏。
一个简单的解决方案是使用分布式事务为DM构建索引[15,21,50,63,65,68]。但来自事务的技术对于DM索引来说太重了,因为它们没有考虑客户端松散耦合的设置。在检测到客户端故障时,需要在客户端之间进行明确的协调,这不仅打破了客户端故障隔离,还消耗了额外的系统资源,并增加了DM索引的部署负担。
本文工作
我们提出了可修复事务(rTX),一种轻量级事务原语,用于构建事务性的DM索引。一个rTX可以在其对DM索引的读/写过程中检测其他失败的rTX,一旦检测到,它将立即帮助失败的rTX提交或中止来修复任何失败状态。我们通过不破坏DM索引应用程序的松散耦合模型来实现这一点:每个rTX都是完全使用DM原语实现的,不与其他客户端通信。
rTX借助预写式日志(write-ahead logging),这是实现故障原子性的技术,实现了在线索引修复。它可以自动修复失败的索引数据,无论索引有多复杂。然而,我们仍然需要处理DM索引的独特约束,即内存节点的计算能力不足[5,24,38,39,70]和松散耦合的客户端。
为了高效且有效地检测故障的rTX,我们的方法是并发控制的故障执行将在索引元数据上留下提示,例如,在一段时间内未释放的锁。我们提出了一种新的锁原语LLLock,它支持在现有DM锁上的正常锁获取操作中携带故障检测。为了正确协调正在修复和修复过的rTX的并发提交,我们进一步设计了新的幂等提交协议。只要提交是幂等的,不同的客户端就可以在没有协调的情况下正确地提交相同的rTX。
rTX依赖并发控制协议进行故障检测和索引修复,我们默认采用了乐观并发控制(OCC)[36]来隔离并发的索引操作。我们通过两个方法减少开销:(1)设计优化的协议,为仅修改一个对象的索引操作去除日志记录,这在DM索引中很常见;(2)将部分并发控制委托给现有的冲突检测算法,可以最小化开销。我们在YCSB基准测试[17]上的结果表明,与现有的非原子索引相比,rTX的成本最高可达42%。
rTX可以用于从头开始构建复杂的DM索引,例如,在B+Tree中,要导出事务性索引算法是具有挑战性的。还可以增强现有索引,要求其中大多数操作都是事务性的,例如,RaceHashing支持事务性操作,只要不进行重新哈希。我们使用rTX对其进行扩展,以支持事务性的重新哈希,同时对其正常操作带来最小的开销。
我们已经创建了一个实现rTX的运行时REPTX原型。我们使用REPTX对两种最先进的DM索引进行了重构:RaceHashing [70](哈希表)和Sherman [61](B+Tree)。使用行业标准的YCSB基准测试[17]进行的广泛评估表明,REPTX在构建DM索引方面比现有的替代方案快1.2-2倍,例如在DM上使用分布式事务(即DrTM+H [63])。此外,REPTX可以在1毫秒的时间间隔内修复崩溃的客户端,而没有可观察到的性能下降。
实验
实验环境:12-core Intel Xeon E5-2650 v4 x 2,128 GB DRAM, 100Gbps ConnectX-4 IB NIC,5个节点做计算节点,1个节点做内存节点。文章来源:https://www.toymoban.com/news/detail-818300.html
总结
在分离式内存场景下,如何保证客户端操作的事务性,即故障原子性和隔离性,避免客户端崩溃导致索引数据的损坏。作者提出在事务进行前先记录redo log,如果发生故障则通过redo log来恢复;通过租约锁识别客户端故障,后续客户端如果发现租约锁过期则认为发生故障,并主动通过redo log恢复;保证修复操作时幂等的,实现协调修复操作。文章来源地址https://www.toymoban.com/news/detail-818300.html
到了这里,关于Transactional Indexes on (RDMA or CXL-based) Disaggregated Memory with Repairable Transaction——论文泛读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!