摘要:
我们介绍了NetCache,这是一种新的键值存储体系结构,它利用新一代可编程交换机的功能和灵活性来处理对热点项目的查询并平衡存储节点之间的负载。即使在高度倾斜和快速变化的工作负载下,NetCache仍可提供较高的聚合吞吐量和较低的延迟。
NetCache的核心是一个数据包处理管道,该管道利用现代可编程交换机ASIC的功能来有效地检测,索引,缓存并在交换机数据平面中提供热键值项。此外,我们的解决方案以最小的开销保证了缓存的一致性。
背景/问题:
现代Internet服务严重依赖于高性能键值存储——渲染单个网页通常需要数百甚至数千个存储访问权限,因此随着这些服务扩展到数十亿用户,系统运营商越来越依赖于内存中的键值存储来满足必要的吞吐量和延迟要求。
扩展键值存储的一个主要挑战是应对倾斜的动态工作负载,热门商品比其他商品收到的查询要多得多,并且由于热门帖子,限时优惠和趋势事件,“热门商品”的集合迅速变化。
本文介绍了NetCache,这是一种新的键值存储架构,该架构利用了新一代可编程交换机的功能和灵活性来在网络中缓存数据。交换机针对数据输入输出进行了优化,与传统的高速缓存和存储服务器相比,其性能提高了几个数量级(图1),使其成为构建路径上高速缓存层以实现高性能,内存中键值的理想储存场所。
![](https://img.haomeiwen.com/i20027590/e4308e5c010031b8.png)
像NetCache这样的网络中缓存热点是一种自然的解决方案,可以在动态和高度动态的工作负载下为内存中的键值存储提供性能和强大的一致性保证。
理想情况下,如果每个存储节点的吞吐量为T,则具有N个节点的键值存储应该能够保证总吞吐量为N·T。假设每个节点处理的负载不超过T,则查询延迟也受到限制,这些性能保证使服务提供商可以轻松地扩展存储系统以满足特定的SLA。
不幸的是,实际工作负载的偏斜,动态性质使其难以提供此类保证。
热门项目的查询频率远远高于其他项目,从而导致存储服务器严重失衡。系统受到过载节点的瓶颈的困扰,许多其他节点没有得到充分利用,因此整个系统无法实现所需的总吞吐量。此外,过载的节点收到的查询数量超出其处理能力,导致未决查询的队列较长,系统具有较高的尾部延迟,违反了延迟要求。
解决方法:
NetCache是一种新的机架式键值存储架构,该架构利用网络内缓存在所有存储服务器之间提供动态负载平衡。假设机架专用于键值存储,并且键值项被哈希分区到存储服务器,直接连接到服务器的ToR交换机用作负载平衡缓存。
图2(a)显示了NetCache存储机架的体系结构概述,该机架由ToR交换机,控制器和存储服务器组成。
![](https://img.haomeiwen.com/i20027590/fbb28701d935d617.png)
交换机是NetCache的核心组件,它负责使用标准的L2 / L3协议实现键值项的路径缓存和路由数据包。我们保留了一个L4端口,以区分NetCache数据包(图2(b))与其他数据包。
![](https://img.haomeiwen.com/i20027590/0d94af79ef15e36d.png)
交换机中的NetCache模块仅处理NetCache数据包,这使NetCache与其他网络协议和功能完全兼容。键值缓存模块存储最热的项目,交换机直接处理读查询,而写查询则转发到存储服务器,轻量级直写机制保证了高速缓存的一致性,再利用匹配操作表和寄存器数组来索引,存储和提供键值项,查询统计信息模块向控制器提供键访问统计信息,以进行缓存更新。
缓存可靠性的部分:
由于最近研究数据包处理部分,专门挑出来这部分的研究一下
NetCache使用直写来保证高速缓存的一致性:
交换机在处理对缓存值的写查询时,会使缓存值无效,并将数据包头中的操作字段修改为特殊值,以通知服务器查询的值在缓存中。
缓存无效化可确保在进行写查询时,所有后续的读和写查询都将发送到服务器,服务器自动更新该值并序列化查询以保持一致性。
服务器从数据包头中识别出已缓存了值,然后发送另一个数据包以使用新值更新交换机缓存,并在数据包丢失后重试更新以确保可靠性。一旦完成写查询,服务器便会回复客户端,而无需等待交换机缓存被更新。
服务器将阻止所有后续写查询,直到确认交换机缓存已用新值更新,以确保服务器和交换机缓存之间的一致性。
最后:
有点可惜这个不是我要找的内容,还要继续看论文找一下我需要的保证数据包正确处理的思路。
网友评论