问题
分布式键值存储是云服务的重要组成部分,随着对高性能需求的增加,新架构将计算和存储节点分开,并使用支持RDMA的网络将它们连接起来。上部分是客户端,下部分是服务端。
在服务端驱动的方法中,由存储节点识别数据位置,并返回客户端的请求结果。但当许多客户端访问一个存储服务器上的数据时,需要服务器端CPU执行计算和搜索数据位置,导致CPU争用程度很高。
为了缓解存储服务器上的CPU争用,提出各种缓存索引方案[20、20、26、27、28],将部分数据或索引搜索过程从存储服务器卸载到计算客户端,并使用RDMA直接访问服务器上的数据。然而,对于传统索引,例如B+树[29],索引大小很大,无法在计算客户端上完全缓存。如果使用部分B+树索引缓存(例如,前几层),导致在客户端和服务器之间经历多次RDMA往返,这会导致网络开销。
学习索引的内存占用比基于树的结构少几个数量级[30、31、32、33]。最近的工作XStore[17]提出混合架构,在存储服务器中维护传统的B+树索引来处理动态工作负载(例如插入),在客户端使用学习索引来执行静态工作负载(例如获取)。
挑战
对于计算密集型操作[12],服务端CPU由于计算压力经常成为性能瓶颈。
-
传统方法的索引在服务端构建,并将部分索引作为缓存存储在客户端,导致客户端缓存中存储的索引结构和服务器的索引结构之间不一致,仍需要服务端CPU参与数据访问。
-
最近的方法[17]使用空间小的学习索引作为客户端缓存索引来执行静态操作,使用服务端索引处理动态操作[16、18],但仍存在精度差距,并导致服务端CPU成为性能的瓶颈[13、19]。
本文方法
本文提出了AStore,采用客户端-服务器框架[17],利用RDMA、本地缓存索引、可更新的自适应学习索引模型来减少服务器CPU争用。
-
采用低内存占用的自适应学习索引模型(客户端称为CIndex,服务器称为SIndex),处理静态和动态工作负载。
-
为叶子节点中的模型提出了一种细粒度的版本控制策略,以降低客户端和存储端之间的同步频率。
-
设计了缓存策略,显著降低模型再训练的频率。
-
设计了自适应策略,根据预测误差范围减少RDMA通信延迟并提高吞吐量。
-
提出了基于客户端的插入处理,数据的插入位置由CIndex决定。
-
提出了叶子节点锁机制来支持并发控制。
基于YCSB、LGN和OSM数据集的实验表明,AStore在只读工作负载上的性能比XStore提高了75.2%、107.3%和57.7%,在读写工作负载上性能比XSstore提高了65.7%、108.7%和74.3%。
总结
针对客户端和服务端分离的分布式键值存储系统,传统方法利用传统索引结构或缓存,但受限于服务端CPU争用。本文提出AStore,采用客户端-服务端框架,利用RDMA、本地缓存索引、自适应学习索引模型。包括以下技术:(1)在客户端和服务端分别采用自适应学习索引模型,用于处理静态(读取)和动态工作负载(插入、更新、删除)。(2)对叶子节点的模型使用细粒度的版本控制,降低客户端和服务端的同步频率。(3)利用缓存显著降低模型再训练的频率。(4)利用自适应策略,根据预测误差范围减少RDMA通信延迟(RDMA读或RDMA请求)。(5)基于客户端的插入处理,数据的插入位置由客户端决定。(6)叶子节点锁机制,支持并发控制。