频道栏目
IT货架 > > 正文
构建高可用的缓存集群的开源解决方案
网友分享于:Jun 12, 2018 11:42:38 PM    来源: IT货架   

很多应用都通过使用缓存来避免所有的请求都查询数据库,以加快系统的响应速度,Memcached是常用的缓存服务器(现在比较流行的还有Redis),它一个高性能的分布式内存对象缓存系统,旨在通过缓存数据库查询结果,减少数据库的访问次数。但是在运行多个Memcached服务器时,往往还需要考虑其它的问题,比如缓存一致性、缓存失效等,缓存一致性是指要保证多个Memcached服务器中数据的一致,缓存失效的后果相对来说比较严重,当在大并发访问的场景下,如果Memcached缓存失效,所有请求会在同一瞬间并发访问数据库,可能会导致数据库宕机。为了保证缓存系统的稳定和高可用,很多公司都研发了相应的系统。本文汇总了Twitter、Facebook、Youtube在缓存方面的解决方案,供读者参考。

  1. Twitter的Redis/Memcached代理服务:Twemproxy
    Twemproxy是一个使用C语言编写的Redis 和 Memcache 代理服务器,通过引入一个代理层,将应用程序后端的多台Redis或Memcached实例进行统一管理,使应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有多少个真实的Redis或Memcached实例。当某个节点宕掉时,Twemproxy可以自动将它从集群中剔除,而当它恢复服务时,Twemproxy也会自动连接。由于是代理,所以Twemproxy会有微小的性能损失。

  2. Facebook的Memcached协议路由器:McRouter
    McRouter是一个使用C++(主要语言,使用了大量的C++ 11特性)开发的基于Memcached协议的路由器,它是Facebook和Instagram缓存架构的核心组件,在高峰时期可以处理近50亿请求。McRouter中客户端可以共享连接池,这样能减少连接的数量。McRouter可以根据key前缀把客户端分配到不同的Memcached池中,允许以主机、池或者集群为单位设置任何请求的速率的阀值,同时也支持限制请求的速度以减缓请求的发送速度,以保障服务质量。

  3. Youtube的Mysql中间件:Vitess
    缓存层存在的初衷是减少应用与数据库的交互,以提高响应时间,与其将缓存与数据库分离,不如直接将缓存嵌入数据库中。Vitess是Youtube的开源分布式MySQL工具集,主要使用Go语言编写,已经用于Youtube生产环境。Vitess支持行级缓存,并与Memcached进行了集成,可以有效提高带主键查询的速率,查询只有在Memcached中查询不到时才会进入数据库查询,而当数据被修改或者数据库表结构发生变化时,缓存数据会被删除。

另外,还有一些未开源的解决方案,比如Box的Tron。同时,InfoQ也非常关注国内相关问题的解决方案,欢迎读者在评论中留言与我探讨。


广告服务联系QQ:1134687142 | 网站地图

版权所有: IT货架- 内容来自互联网,仅供用于技术学习,请遵循相关法律法规. 京ICP备11030978号-1