写点什么

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

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

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

关注

评论

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

大数据之Hadoop图解概述

小满大王i

三周年连更

【Linux】之Centos7安装KVM虚拟化及相关命令

A-刘晨阳

Linux 虚拟化 kvm 三周年连更

突破传统监测模式:业务状态监控HM的新思路

京东科技开发者

系统架构 监控系统 数据监控 业务监控 企业号 4 月 PK 榜

openGauss:共建数据库根社区,打造开源数据库核心竞争力

宠物行业如何做留存?答案都在这里了!

游读分享

易观千帆 | 2023年3月证券APP月活跃用户规模盘点

易观分析

证券 经济

复旦MOSS大模型开源了!Github和Hugging Face同时上线

Openlab_cosmoplat

人工智能 开源项目 ChatGPT

迪斯克Disrupt DEX众筹挖矿系统开发技术

薇電13242772558

dapp

使用AI优化慢SQL,开发秒变DBA

NineData

sql AI 开发者 dba NineData

Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)

汀丶人工智能

人工智能 机器学习 深度学习 Gradio streamlit

Java如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)注解中的value值name值?

bug菌

三周年连更 获取注解值

如何建设一个用于编译 iOS App 的 macOS 云服务器集群?

京东科技开发者

ios 编译 CI/CD 企业号 4 月 PK 榜 云服务集群

连接OpenAI两大智能产品Whisper & DALL·E,实现智能语音转文本/文本转图像

集简云开放平台

AI 智能 openai 数据集成平台 AI绘画

流量即生意!红海中的茶饮品牌如何做增量?

游读分享

李士福:openGauss 自驾驶数据库内核在AI领域的探索和创新

一些常见的字符串匹配算法

京东科技开发者

字符串 字符串匹配算法 企业号 4 月 PK 榜 文本处理

用友BIP助力中国领先企业数智化国产替代

用友BIP

国产替代

语雀-使用指南

六月的雨在InfoQ

在线文档 在线协同文档 三周年连更 语雀

Nginx常用配置及和基本功能讲解

京东科技开发者

nginx 负载均衡 正向代理与反向代理 企业号 4 月 PK 榜 Nginx入门

用友联合7家信创生态伙伴成立“信创领先实践联盟”,助力企业数智化国产替代

用友BIP

如何优雅的处理异常

京东科技开发者

异常处理 java 抛出异常 企业号 4 月 PK 榜 throwale

代码优雅之道——如何干掉过多的if else

小小怪下士

Java 程序员 后端 代码

算法题每日一练:最长递增子序列

知心宝贝

数据结构 算法 前端 后端 三周年连更

Qz学算法-数据结构篇(查找算法--线性、二分)

浅辄

数据结构 三周年连更

黄凯耀:深度解读openGauss架构创新与新特性

高效易用的C++单元测试框架:轻松构建高质量代码

万木春

c++ GitHub 单元测试

Mac哪款系统性能软件好用呢?Performance Index 64 Pro mac版推荐~

真大的脸盆

Mac Mac 软件 系统性能监测

《API加速优化方案:多级缓存设计》

后台技术汇

三周年连更

JUnit 5 参数化测试

码界行者

Java JUnit

孔再华:openGauss在民生银行的应用实践

执行个 DEL 竟然也会阻塞 Redis?深挖一下果然不简单

架构精进之路

redis 缓存 后端 bigkey 三周年连更

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