每天百万次访问请求的缓存数据丢失的解决方案

来源:互联网 发布:如何备案域名 编辑:程序博客网 时间:2024/06/03 18:43

        今天看了一篇微信公众号的文章讲解了eBay在解决缓存数据丢失的时候曾经思考的三种解决方案。

在当前比较常用的缓存数据库中,比较常用的有redis和mongodb。不论是redis还是mongodb,在其内部数据都是以json格式进行存储的。这两个数据库在数据量的级别不同的时候,缓存的性能也存在差异。所以也不能简单说redis和mongodb到底哪个好。

        可以支持百万级/天的访问量已经相当不容易了,这里先暂时不讨论怎么达到百万级的访问量。

缓存数据库中其实是有一定的容量限定的,当容量达到一定的限度就会按照某种策略删除一部分数据;另外,缓存的时间也是有限制的,当超过设定的时间之后,也会删除缓存的数据。另外,我认为缓存的时候,有数据丢失也可能是因为网络拥塞或者数据库的io问题导致的。

为了解决缓存数据丢失问题。eBay团队的成员想了3个解决办法:

         (1)对mongodb中存储的数据进行切片

当在mongodb中存储新数据的时候先对数据进行切片处理。这样做的好处是可以减少单一mongodb中心节点的写入次数和网络开销。但是这种方式最终被否认了,因为切分之后,写入数据的速度的确变快了,但是查询数据的时候又需要把之前切分的数据整合起来,这个时间开销可能比直接不切分数据的时间总开销还大。所以这种方法相当于拆东墙补西墙,最终还是不能完美的解决问题。

(2)有选择的写入

eBay团队想出的另一个办法就是:只针对当特定值发生变化的时候,才启动写操作。这种想法从一定程度上缓解了io压力,但是mongodb中可以在更新的时候插入一个新的字段,如果是这种方式,那么最终却会更新整个文档,如果是这样,这个办法也是不可行的。

(3)压缩传输数据

这个办法可以减少存储的数据量的规模,也可以从一定程度上降低网络的开销,还不用修改业务逻辑,应该是一种非常好的解决办法了。

        

原创粉丝点击