与wisckeydb的关系:借用了wisckeydb将key和value分离的设计思想,本文将元数据,key和value分离,采用混合式的备份策略,实现了可用性和内存效率的同时满足。
主要设计:cocytus,针对不同大小的键值对,采用PBR和erasurecode混合的措施保证数据的可用性。
问题来源:在服务器宕机后,即使有持久性存储数据不会丢,但讲上百G的数据加载到内存中从而提供服务给用户是很耗时的一件事,2.5h-3h。传统的做法就是PBR和chain-replication(FAWN那篇文章中讲的概念?)
本文工作:提出了cocytus,一种副本模式,目的是在保持与PBR相似的性能的基础上,减少内存开销,尽管对更新频繁的负载会有额外的cpu开销以及在恢复过程中额外的网络开销。关键就是将空间利用率高的erasurecode和PBR结合。
高性能的cpu使得在线编码成为可能。RS编码5.26GB/S。
但同时因为ec面向block的特性与kv存储不一致,也有几个挑战存在
第一个挑战:离散的元数据像hashtable和kv的内存分配信息将出发大量的编码操作。解决办法就是利用将元数据与数据分离的想法,混合PBR和ec备份策略。
第二个挑战是如何利用分布的数据块和校验块在线的并且一致的恢复丢失的数据块。cocytus引入了分布式在线恢复协议,收集分布的数据和校验数据而不会阻塞任何工作服务器。
在memcached上实现的,
架构:
元数据和key使用PBR备份,value使用ec备份