腾讯CKV海量分布式存储系统是腾讯公司自主研发的一款高性能、低延时、持久化且分布式的KV(key-value)存储服务。它在微信平台、开放平台、腾讯云、游戏和电商平台中得到广泛应用,应对日访问量超过万亿次的挑战。该系统的特点包括低成本、可扩展性强、高性能、高可用性、高数据持久性以及完善的运维体系。与流行的开源NoSQL解决方案如Memcached和Redis相比,CKV具有显著的技术优势和创新。
CKV采用了数据冷热自动分离技术,热数据存储在内存中,而冷数据则存储在SSD(固态硬盘)上,这样不仅大幅度降低了成本,而且确保了99%以上的访问可以直接命中内存,而Memcached和Redis只能将数据全部存储在内存中,成本是CKV的三倍。CKV还实现了单表存储空间从1GB到1PB之间的自动无损伸缩,避免了单机性能和内存容量的限制,实现了真正的在线自动无损扩容,伸缩过程对业务几乎没有感知。
在性能方面,CKV的单表最大支持千万次每秒的访问量,网络访问延迟控制在1ms左右。对于单台服务器,在千兆网络环境下,CKV支持50万次每秒的访问量,在万兆网络环境下,支持超过100万次每秒的访问量。相比之下,Memcached虽然是多线程,但性能略低于CKV,而Redis作为单线程方案,其性能垂直扩展性较差。
可用性方面,CKV通过软硬件全冗余设计和双机热备,主备切换对业务透明,实现了跨机架跨交换机部署,使其可用性超过99.95%。在数据持久性方面,CKV的数据在磁盘上有多个副本,并且具有灾难时的回档能力,提供了超过8个9的数据持久性保障。Memcached在死机后数据会丢失,Redis虽然有双机方案,但尚不成熟。
运维方面,CKV能够预防并及时发现和处理故障,实现了自动化运营。CKV系统由多个SET组成,每个SET包含多种角色的服务器,并且是一个独立完整可运营的单元。CKV具备完善的运维体系,能够有效处理各种故障,保证了系统的稳定运行。
在实现原理上,CKV每个业务都有一个唯一的tid(Transaction ID),由Master负责管理tid的路由表,路由表记录了tid的key存储在Cache的位置信息。Access作为无状态、全镜像的角色,负责在业务访问时,根据tid找出相应的路由表,对key进行sharding(分片),映射为一个shard ID,然后找到key所属的shard位于的Cache地址。Cache负责数据的写入内存并落磁盘,而Access将操作结果反馈给业务。在故障处理上,CKV通过硬件冗余和软件容灾处理,确保了系统的高可用性,即便是主备Cache同时死机并且磁盘损坏,也能够通过备份中心的备份和流水中心的流水回档,恢复到任意5分钟的Cache内存状态。
腾讯CKV海量分布式存储系统代表了分布式存储领域中先进的技术水平,它在低成本、可扩展性、性能、可用性和数据持久性等方面都展现出明显优势,并且在运维体系的完善性上也领先于同类产品。通过这些技术的综合应用,CKV不仅满足了腾讯内部业务的巨大访问量,也为业界提供了一种可靠的解决方案。