写点什么

构建高可用的缓存集群的开源解决方案

  • 2014-10-27
  • 本文字数:1032 字

    阅读完需:约 3 分钟

很多应用都通过使用缓存来避免所有的请求都查询数据库,以加快系统的响应速度, 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 也非常关注国内相关问题的解决方案,欢迎读者在评论中留言与我探讨。

2014-10-27 06:026880
用户头像

发布了 219 篇内容, 共 151.8 次阅读, 收获喜欢 195 次。

关注

评论

发布
暂无评论
发现更多内容

分享Android资深架构师的成长之路,系列篇

android 程序员 移动开发

含爱奇艺,小米,腾讯,阿里,享学课堂怎么样

android 程序员 移动开发

这部分布式事务开山之作,凭啥第一天预售就拿下当当新书榜No.1?

冰河

数据库 分布式 分布式事务 微服务 数据一致性

区块链是否正在慢慢演变为中心化的数据库?我们又该如何预防数据中心化?

CECBC

从三流Android外包到秒杀阿里P7,从理论到实践

android 移动开发

免费Android高级工程师学习资源,苦熬一个月

android 程序员 移动开发

023云原生之Kubernetes的存储

穿过生命散发芬芳

云原生 10月月更

你还在把Java当成Android官方开发语言吗,字节跳动算法工程师总结

android 程序员 移动开发

聊聊产品的使用场景

石云升

场景应用 职场经验 10月月更

架构训练营第3期模块一作业

吴霏

架构实战营 #架构实战营 「架构实战营」

作为程序员一定不要仅仅追求物质,做了6年Android开发

android 程序员 移动开发

做了3年Android还没看过OkHttp源码,学Android看这就完事了

android 程序员 移动开发

刚从阿里、头条面试回来,动脑学院课程值得买吗

android 程序员 移动开发

【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

码界西柚

云原生 Quarkus 10月月更

五面阿里拿下飞猪事业部offer,思维导图+源代码+笔记+项目

android 程序员 移动开发

模块一学习笔记、总结

吴霏

架构实战营 「架构实战营」

中软国际用一场自我进化,推动云市场跨入下一幕

脑极体

自动驾驶 Lidar 激光雷达 易筋 ARTS 打卡 Week 73

John(易筋)

ARTS 打卡计划

区块链与数字化转型携手并进

CECBC

史上超级详细:扔物线学堂

android 程序员 移动开发

紧张的336小时53分钟21秒,我等来了字节跳动offer(Java岗)

Java 编程 程序员 架构 面试

对话凡泰极客联合创始人杨涛: 小程序生态市场潜力广阔

FinClip

小程序 金融科技 移动开发

Leetcode 题目解析:70. 爬楼梯

程序员架构进阶

LeetCode 动态规划 算法题 10月月更

作为一个程序员你觉得最大的悲哀是什么,安卓音视频开发

android 程序员 移动开发

架构设计-电商微服务拆分

小智

架构训练营

什么是aPaaS?低代码与高生产率的aPaaS和RAD相比如何?

优秀

低代码 aPaaS RAD

从不一样的角度描述Android事件传递,字节跳动面试官

android 程序员 移动开发

Docker环境搭建和使用

Fox爱分享

Docker

三国与AI,交汇在中原

脑极体

华为云数据库内核专家为您揭秘MySQL Volcano模型迭代器性能提升千倍的秘密

华为云数据库小助手

GaussDB 华为云数据库 GaussDB(for MySQL)

谈一谈使用Python入门量化投资

Regan Yue

量化交易 10月月更

构建高可用的缓存集群的开源解决方案_DevOps & 平台工程_小盖_InfoQ精选文章