[项目说明]: 这是暑期我进入腾讯实习时,TEG布置的虚拟项目,此项目由6个实习生共同完成
[个人分工]: 除系统设计外,本人主要负责Client端的设计与实现,以及LRU-K类模板编写
[文章致谢]: 我非常怀念我们共同写项目的时光!十分感谢大家的帮助,和你们合作超级愉快!
[项目源码]: 由于公司的保密要求,以及我们使用的是内部开源的网络框架,因此无法将源码拷出,所以这篇文章将详细说明我们的设计与实现过程
[博客链接]: 分布式K-V缓存系统设计(如果未使用VPN,博客中的图片可能无法查看)
受磁盘和SQL解析的影响,数据库的检索速度是非常慢的,随着服务器规模的扩大,大量客户端向数据库请求数据,数据库的压力将变得非常大,进而可能无法正常响应。解决方法之一是:引入一个中间层——缓存。如果引入的是单点缓存,则可以对复杂且业务逻辑不会发生变化的查询进行缓存,当请求再次发起时,就可以先从单点缓存中查询结果,从而大大减少对数据库的查询,进而减小服务器的压力。但是单点缓存存在稳定性较差和可扩展性较差的问题,当流量多大时依然难以应对,因此需要设计分布式缓存系统,它具有更好的稳定性和可扩展性。下图对比了上述三种情况下系统的稳定性和扩展性:
接下来介绍一下系统的总体架构,如下图所示:
系统由一个Master-Server、多组Cache-Server、若干个Client组成,各自的功能如下所述: