写点什么

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

  • 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:026888
用户头像

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

关注

评论

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

社招中级前端笔试面试题总结

loveX001

JavaScript

SpringBoot集成Tomcat服务

Java 架构

基于Unittest框架,使用Python+Selenium+Webdriver的WebUI自动化测试项目应用实例(附源码)

Python 单元测试 自动化测试 unittest

推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐

汀丶人工智能

nlp 推荐算法

快学会这个技能-.NET API拦截技法

沙漠尽头的狼

hook harmony .NET API拦截 拦截 伪造

FDF循环互助智能合约开发系统搭建

薇電13242772558

智能合约

立即执行函数在前端国际化方案中的应用

xiaoxi666

不同程序集,名称空间类名和方法签名都一样的方法,如何调用

newbe36524

C# Docker Kubernetes

前端面试指南之JS面试题总结

loveX001

JavaScript

广告流量反作弊风控中的模型应用

vivo互联网技术

算法 广告 风控系统

LR性能测试常见问题及处理方法(四)

性能测试 问题排查 LoadRunner 云性能测试

Spark练习题

mm

Sparksql Spark Scala 大数据开发

一图读懂 | 2023年中国企业数字化技术应用十大趋势

易观分析

数字化 数字经济

微软 New Bing 和 Edge 动手实践:令人惊讶的 AI 集成度

kcodez

微软 edge 新必应 Copilot

LR性能测试常见问题及处理方法(六)

性能测试 问题排查 LoadRunner 云性能测试

企业微信的聊天机器人来了!免费下载,Python自动化办公

程序员晚枫

Python 聊天机器人 企业微信

LR性能测试常见问题及处理方法(五)

性能测试 问题排查 LoadRunner 云性能测试

前端二面react面试题集锦

beifeng1996

React

LeetCode题解:2347. 最好的扑克手牌,哈希表,详细注释

Lee Chen

JavaScript 算法 LeetCode 哈希表

2023前端二面经典面试题汇总

loveX001

JavaScript

LR性能测试常见问题及处理方法(三)

性能测试 问题排查 LoadRunner

osx使用alfred集成有道查词

Geek_pwdeic

macos Alfred 有道

React-hooks面试考察知识点汇总

beifeng1996

React

社招前端常考react面试题总结

beifeng1996

React

2023-02-20:小A认为如果在数组中有一个数出现了至少k次, 且这个数是该数组的众数,即出现次数最多的数之一, 那么这个数组被该数所支配, 显然当k比较大的时候,有些数组不被任何数所支配。 现在

福大大架构师每日一题

算法 rust 福大大

2023年1月中国汽车智能网联月度观察

易观分析

汽车 智能网联

Unittest+Python接口自动化测试如何进行token关联?

Python 自动化测试 unittest Token

React-Hooks怎样封装防抖和节流-面试真题

beifeng1996

React

ChatGPT 入门案例|商务智能对话客服(四)| 社区征文

TiAmo

AI ChatGPT

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