一种基于可编程交换机的多级缓存分布式键值存储系统

文档序号:30992063发布日期:2022-08-03 02:29阅读:218来源:国知局
一种基于可编程交换机的多级缓存分布式键值存储系统

1.本发明属于分布式存储技术领域,尤其涉及一种基于可编程交换机的多级缓存分布式键值存储系统。


背景技术:

2.分布式键值存储(key-value storage kvs)系统是现代互联网服务的重要基础,如社交网络、电子商务等。kvs系统将频繁访问的数据缓存在内存中,以满足数十亿次请求所带来的高吞吐量和低延迟需求。分布式kvs系统的一个关键挑战是在时间范围内平衡倾斜的和动态的工作负载。在一个固定的时间间隔内,只有少量的被称为热点项的条目被频繁访问。例如,大约50%到90%的访问请求都来自于1%的键值项。如果没有精心的设计,这种负载失衡可能会过度利用少数服务器,服务器的cpu成为瓶颈,导致吞吐量下降和延迟增加。虽然副本复制技术可以缓解这个问题,但它会导致高存储开销和潜在的数据不一致性。
3.随着可编程交换机的出现,热点项,即一个时间周期内访问次数最多的nlogn个键值对,其中n为系统中服务器的数量,可以有选择地存储到交换机的片上内存中以响应查询,并在服务器之间平衡负载。目前只在可编程交换机中缓存较小的热点项,交换机可以直接处理查询请求而不涉及服务器,这在一定程度上提高了服务器的峰值处理能力。然而,在像tofino这样的可编程开关中,为单个项目分配的内存空间通常小于128字节,而且由于硬件限制,要存储的项目大小受到严格限制。另外,根据实际工作负载的分析,只有25%的热点项小于100字节,大多数无法被系统的缓存到交换机中,这意味着在实际工作中无法充分发挥它的优势。为了解决上述问题,在可编程交换机中存储固定大小的目录和元数据,而将任意大小的项目存储在服务器的内存中。虽然提供了有效的负载平衡,但可编程交换机的处理能力尚未得到充分的开发和利用,在高度倾斜的数据下该系统的性能会降低许多,且不适用具有多个交换机和服务器机架的生产数据中心。


技术实现要素:

4.本发明针对现有技术中的不足,提供一种基于可编程交换机的多级缓存分布式键值存储系统。
5.本发明提供一种基于可编程交换机的多级缓存分布式键值存储系统,包括客户端、服务器,可编程交换机和控制器;所述客户端、服务器和控制器均连接所述可编程交换机;所述客户端用于将将客户的请求封装为系统数据包格式、转发和解封数据包;所述服务器用于处理键值项的读写请求;所述可编程交换机用于处理缓存请求和网络路由;所述控制器用于周期性的调整可编程交换机和服务器中的缓存项;
6.客户端发送一个请求,当请求为读请求时,对于非热点项,请求将被直接转发到服务器获取数据,然后服务器回复客户端;对于热点项,如果请求被缓存在可编程交换机中,请求直接由可编程交换机处理,然后返回至客户端;如果请求的值缓存在服务器中,可编程交换机根据缓存目录选择一个服务器发送请求,服务器处理后回复客户端;
7.当请求为写请求时,对于非热点项,请求被转发到服务器来写数据,然后服务器将生成写回复通知客户端;对于热点项,请求将先从可编程交换机获得用于一致性保证的版本号,并转发到服务器;服务器生成一个带有id的回复,并发送至可编程交换机来存储热点项的元数据,然后可编程交换机将应答报文发送至客户端;控制器收集时间段内的统计信息并进行筛选,动态更新热点项并决定热点项缓存在可编辑交换机或服务器中。
8.进一步地,所述可编程交换机的片上内存作为多个寄存器存储键值项;每个寄存器的同一个索引中存放同一个键值项的分片数据;如果当前的分片数据包有多段数据,多次循环流水线访问不同的索引读取数据,同时需要匹配表来记录每个键值对的索引情况,可编程交换机将分片数据包依次回复至客户端。
9.进一步地,所述可编程交换机将所有热点项及热点项的存储位置存入匹配表;当可编程交换机接收到客户端发送的请求时,可编程交换机判断请求是否为热点项;如果是,请求直接由可编程交换机处理;如果否,请求直接转发至服务器处理。
10.进一步地,如果当前请求为读请求且缓存有效,那么可编程交换机将直接读取数据后返回给客户端;如果当前请求对应的键值项缓存无效,那么请求将被转发至服务器,服务器处理后返回至客户端,同时将可编程交换机之间发起缓存同步,将当前请求对应的键值项缓存到可编程交换机上,当缓存完成时,可编程交换机标记缓存有效;如果当前请求是写请求,那么可编程交换机先将缓存标记为无效,再将请求转发给服务器处理,服务器处理完成后回复客户端。
11.进一步地,如果当前请求是读请求,那么可编程交换机将在当前请求对应的副本集合里选取一个服务器并转发,当前请求由被选中的服务器进行处理;如果当前请求是写请求,可编程交换机向包头放入一个全局版本号并将请求转发给服务器,服务器在处理后发送写回复包至可编程交换机,当包头中的版本号大于可编程交换机内所记录的本地版本号时,可编程交换机将副本集合重置,记录下当前服务器的信息并更新键值项所对应的版本号;当包头中的版本号等于本地版本号时,可编程交换机向副本集合中加入当前服务器,并把副本集合大小加1;当包头版本号小于本地版本号时,可编程交换机忽略此次回复请求。
12.进一步地,所述可编程交换机统计请求中每个键值项的访问次数,所述控制器通过周期性的读取可编程交换机统计请求中每个键值项的访问次数,筛选出当前时段内的新的热点项并将热点项按照访问频率,将前目标数量个新的热点项更新到可编程交换机的缓存中,剩余新的热点项更新到服务器和服务器缓存目录中,替换掉可编程交换机和服务器中旧的缓存项,同时更新可编程交换机中的匹配表。
13.本发明提供一种基于可编程交换机的多级缓存分布式键值存储系统,包括客户端、服务器,可编程交换机和控制器;所述客户端、服务器和控制器均连接所述可编程交换机;所述客户端用于将将客户的请求封装为系统数据包格式、转发和解封数据包;所述服务器用于处理键值项的读写请求;所述可编程交换机用于处理缓存请求和网络路由;所述控制器用于周期性的调整可编程交换机和服务器中的缓存项。本发明提出将可编程交换机和服务器结合形成多级缓存的分布式键值存储系统,使得数据存储空间从可编程交换机的片上内存扩展到了服务器内存,充分地利用了交换机和服务器各自的优势,极大的提高系统的吞吐量和可用性。在交换机数据平面存储任意大小的键值项并处理数据包,利用分片的
思想将数据分散存储在寄存器的不同位置,并利用可编程交换机的镜像和循环功能处理数据,提高网络内缓存的有效性,可编程交换机可存储更复杂的对象。
附图说明
14.为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
15.图1为本发明实施例提供的一种基于可编程交换机的多级缓存分布式键值存储系统的结构示意图;
16.图2为本发明实施例提供的自定义包头结构示意图;
17.图3为本发明实施例提供的可编程交换机数据平面键值项存储结构示意图;
18.图4为本发明实施例提供的可编程交换机缓存处理流程结构示意图;
19.图5为本发明实施例提供的可编程交换机数据平面元数据目录结构示意图;
20.图6为本发明实施例提供的服务器缓存处理流程结构示意图。
具体实施方式
21.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
22.如图1所示,本发明实施例部分提供一种基于可编程交换机的多级缓存分布式键值存储系统,包括客户端、服务器,可编程交换机和控制器;所述客户端、服务器和控制器均连接所述可编程交换机;所述客户端用于将将客户的请求封装为系统数据包格式、转发和解封数据包,即客户端将请求封装为本系统自定义的固定数据包格式并根据数据映射发送给相应的服务器,只有具有该固定格式的数据包才会被可编程交换机和服务器处理;当客户端收到回复后,将请求的数据从自定义的数据包格式中剥离并呈递给客户;所述服务器用于处理键值项的读写请求;所述可编程交换机用于处理缓存请求和网络路由;所述控制器用于周期性的调整可编程交换机和服务器中的缓存项。
23.客户端发送一个请求,当请求为读请求时,对于非热点项,请求将被直接转发到服务器获取数据,然后服务器回复客户端;对于热点项,如果请求被缓存在可编程交换机中,请求直接由可编程交换机处理,然后返回至客户端;如果请求的值缓存在服务器中,可编程交换机根据缓存目录选择一个服务器发送请求,服务器处理后回复客户端。
24.当请求为写请求时,对于非热点项,请求被转发到服务器来写数据,然后服务器将生成写回复通知客户端;对于热点项,请求将先从可编程交换机获得用于一致性保证的版本号,并转发到服务器;服务器生成一个带有id的回复,并发送至可编程交换机来存储热点项的元数据,然后可编程交换机将应答报文发送至客户端;控制器收集时间段内的统计信息并进行筛选,动态更新热点项并决定热点项缓存在可编辑交换机或服务器中。
25.可选的,在可编程交换机的数据平面中实现了一个键值缓存系统,利用有状态寄存器和交换机的镜像、循环等特性来分片地存储任意大小的键值项作为第一级缓存;利用
匹配表等构建元数据目录为第二级缓存的数据进行快速的路由转发和负载均衡;利用服务器内存作为第二级缓存层,为所有的热点项复制一个或多个副本,以实现负载均衡;而服务器的硬盘则用于所有数据的持久化存储,并进行冗余备份。服务器内存中使用unordered map缓存数据,并定期的将所有数据写入服务器的硬盘当中。服务器还将根据接收数据包的速度来计算自身的负载,并判断是否需要将数据复制到其它服务器以均衡负载压力。
26.如图5所示,本发明通过两个寄存器数组来构建复制目录。一个用于记录每个复制集的大小,另一个用于记录每个复制集中的特定服务器。在更新期间,控制器设置了副本的最大大小,每个副本集的位置是固定的。例如,一个热项的索引是1,最大副本大小是4,那么该热点项的副本在寄存器数组中的范围是从4到7。此外,还需要使用全局版本寄存器和版本号寄存器数组来保证一致性。基于版本号的一致性方法是在可编程交换机中维护了一个单调递增的全局版本号,每一次热点项的写操作都会被赋予一个版本号,同时在可编程交换机的数据平面和服务器的内存中都维护了每个键值项的当前版本号,只有拥有最新版本号的请求才会被执行。
27.可选的,所述可编程交换机的片上内存作为多个寄存器存储键值项;每个寄存器的同一个索引中存放同一个键值项的分片数据;如果当前的分片数据包有多段数据,多次循环流水线访问不同的索引读取数据,同时需要匹配表来记录每个键值对的索引情况,可编程交换机将分片数据包依次回复至客户端。
28.如图3所示,首先将32个不同的寄存器连接起来构成一个逻辑上的大寄存器,每个寄存器的同一个索引中只会存放同一个键值项的分片数据。如果当前的分片数据包有多段数据,只需要多次循环流水线访问不同的索引读取数据即可。此外,还需要一个匹配表来记录每个键值对的索引情况。例如,当客户端请求key b的数据时,交换机首先从匹配表中读取第一个索引2中的数据,然后通过分片和循环读取索引4中的数据,至此b的所有数据都已经读取完成,然后交换机会将分片数据包依次回复给客户端。
29.使用多个不同的寄存器数组并连接来组成一个逻辑上的大寄存器来存储键值项。受限于可编程交换机的硬件限制,每个数据包在流水线中只能访问同一个寄存器一次,导致了单次所处理的数据大小非常有限,因此利用交换机的再循环机制,使数据包在管道中多次循环,从而扩展了数据大小。此外,由于交换机对解析的数据包头部长度有限制,导致无法把较大的数据放到一个包头中处理。因此,利用可编程交换机的镜像操作实现了一个分片机制,将大的数据填充到多个数据包中转发。对于第二级缓存的元数据,使用匹配表和寄存器记录每个键值对副本所在的服务器集合,用于快速转发和负载均衡。
30.如图2所示,包头基于udp,由指定的udp目的端口标识。op表示操作类型,包括read,write,read_reply,write_reply,update,ack和copy。前四个操作符用于基本数据查询,update和ack用于在交换机和服务器之间缓存传输,copy用于数据复制。key是固定长度项目的唯一标识符。ver是交换机分配的数据版本号。state表示该键值项所缓存的位置。sid和load由服务器填充。前者是网络管理员预先分配的每个服务器的唯一id。后者是当前服务器的负载。fnum和off分别记录当前报文的分片总数和偏移量。value是用于存储当前请求的值。没有系统包头的数据包将使用标准的l2/l3协议。
31.可编程交换机可多次访问同一个寄存器,将数据分片放入同一个寄存器当中,扩大了存储空间,实现了理论上任意大小的键值项存储。当可编程交换机收到第一级缓存中
的键值项的读请求后,会直接处理后返回给客户端,不需要经由服务器处理。
32.可编程交换机根据交换机数据平面的动作匹配表、有状态寄存器记录了第二级缓存中缓存项所在的服务器集合以及集合的大小。当可编程交换机收到第二级缓存中的键值项的请求后,从其对应的服务器集合中选择一个目标服务器,然后将请求转发至目标服务器进行处理,以实现服务器的负载均衡。
33.可编程交换机根据交换机数据平面的计数器和可编程交换机的cpu实现了一个键值对的频率计数。首先对于所有缓存在多级缓存中的热点项,都用一个专门的计数器来计数,即每来一个请求,对应的计数器就会加1;对于所有没有被缓存的非热点项请求数据包,将会对其进行概率性采样后将数据包中的键复制给cpu,cpu在内存中维护了一个完整的计数表对所有非热点项进行计数。
34.可选的,所述可编程交换机将所有热点项及热点项的存储位置存入匹配表;当可编程交换机接收到客户端发送的请求时,可编程交换机判断请求是否为热点项;如果是,请求直接由可编程交换机处理;如果否,请求直接转发至服务器处理。
35.可选的,如图4所示,如果当前请求为读请求且缓存有效,那么可编程交换机将直接读取数据后返回给客户端;如果当前请求对应的键值项缓存无效,那么请求将被转发至服务器,服务器处理后返回至客户端,同时将可编程交换机之间发起缓存同步,将当前请求对应的键值项缓存到可编程交换机上,当缓存完成时,可编程交换机标记缓存有效;如果当前请求是写请求,那么可编程交换机先将缓存标记为无效,再将请求转发给服务器处理,服务器处理完成后回复客户端。
36.可选的,如图6所示,如果当前请求是读请求,那么可编程交换机将在当前请求对应的副本集合里选取一个服务器并转发,当前请求由被选中的服务器进行处理;如果当前请求是写请求,可编程交换机向包头放入一个全局版本号并将请求转发给服务器,服务器在处理后发送写回复包至可编程交换机,当包头中的版本号大于可编程交换机内所记录的本地版本号时,可编程交换机将副本集合重置,记录下当前服务器的信息并更新键值项所对应的版本号;当包头中的版本号等于本地版本号时,可编程交换机向副本集合中加入当前服务器,并把副本集合大小加1;当包头版本号小于本地版本号时,可编程交换机忽略此次回复请求。
37.可选的,所述可编程交换机统计请求中每个键值项的访问次数,所述控制器通过周期性的读取可编程交换机统计请求中每个键值项的访问次数,筛选出当前时段内的新的热点项并将热点项按照访问频率,将前目标数量个新的热点项更新到可编程交换机的缓存中,其中目标数量由可编程交换机片上内存大小而定,一般为8至32个。剩余新的热点项更新到服务器和服务器缓存目录中,替换掉可编程交换机和服务器中旧的缓存项,同时更新可编程交换机中的匹配表。
38.本发明将可编程交换机和服务器结合形成多级缓存的分布式键值存储系统,使得数据存储空间不再局限于可编程交换机中少量的片上内存,扩展到了服务器内存,提高了系统的可用性。同时,本发明在交换机数据平面存储任意大小的键值项,提高网络内缓存的有效性。此外,本发明可以和现有的网络协议共存,易于部署到各种拓扑,具有极强的可扩展能力。
39.以上结合具体实施方式和范例性实例对本发明进行了详细说明,不过这些说明并
不能理解为对本发明的限制。本领域技术人员理解,在不偏离本发明精神和范围的情况下,可以对本发明技术方案及其实施方式进行多种等价替换、修饰或改进,这些均落入本发明的范围内。本发明的保护范围以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1