一、题目分析
1. 仅根据qps计算多少机器是不够的
如果一个Redis服务器支持五千万上面的读写请求,那么此题很简单,一个机器,一个Redis进程即可。
但显然没有这样的超级机器,Redis也做不到一个进程就能处理五千万QPS。
那么一个Redis到底能处理多少QPS?
如果是简单的读写,那么一个Redis在一个硬件服务器(只要1个核,CPU为当前主流即可),就能处理Million级别的QPS,即至少百万。
所以,上面的问题好像简单了,我们只要用50个Redis进程就能支持题目所需的五千万,然后在一个50核的机器上跑这五十个进程,即可。
所以,答案好像很简单:一台五十核机器,五十Redis进程。
但是这样的吗?不是的,因为很可能应用环境并不是只有简单的有限量的key,如果key不断增多,那就会出现大麻烦。
2. 瓶颈在哪?
难点在那个两千万QPS的写入(即20M qps write),我来仔细分析给你看。
假设:每个写入是100字节(即key+value之和平均在100Bytes,即0.1KB),而且万一这两千万QPS的写入都是新增数据,而且随后的三千万QPS(即30M qps read)还可能查历史的数据,我们会有什么麻烦?
显然,下一秒将产生 0.1KB * 20M qps = 2GB 新增数据,每天将产生 2GB * 86400 秒 = 173 TB 新增数据。
没有任何一台机器的内存可以支持一天的新增数据容量,更何况服务运行时间以年为单位。
所以,我们只能用到磁盘。
但问题是:如果将数据存盘,Redis是查不到的。
但如果Redis能查到磁盘上的数据,是否能解此题?
RedRock支持Redis存储磁盘,那么我们尝试用RedRock解解此题。
二、首先拆分
假设我们