写点什么

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

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

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

关注

评论

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

Vagrant 快速入门

FeiLong

vagrant

百万级别数据Excel导出优化

Throwable

架构设计 springboot

并行流ParallelStream中隐藏的陷阱

Throwable

Java

list vs tupple

Leetao

Python 数据结构 Python基础知识

大话设计模式 | 4. 装饰模式

Puran

C# 设计模式

Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?

newbe36524

Docker .net core netcore ASP.NET Core

3W字干货深入分析基于Micrometer和Prometheus实现度量和监控的方案

Throwable

Java 监控 Grafana Prometheus springboot

修炼我们的智慧之眼

J.Smile

认知提升

iOS - CollectionViewCell对应不同flow layout的实例

teoking

ios

谈谈对分布式事务的一点理解和解决方案

Throwable

分布式 分布式事务 架构设计

看动画学算法之:排序-冒泡排序

程序那些事

算法 动画 排序算法 轻松学

ARST Week7

时之虫

ARTS 打卡计划

DolphinScheduler-1.3.0-dev功能体验

Eights

大数据 hadoop

架构师训练营第六周总结

陈靓-哲露

11个提高产品经理工作效率的必备工具,果断收藏

马踏飞机747

大数据 设计 产品经理

SpringBoot2.x入门:应用打包与启动

Throwable

springboot

基础篇:JAVA基本类型

csc

Java Java 25 周年

架构师训练营第六周作业

烟雨濛濛

数据分析之AB testing实战(附Python代码)

JackTian

Python 编程 程序员 数据分析 AB testing实战

“新基建”来了!云南三年投资3776亿!

CECBC

架构师训练营第六周作业

Melo

如何搭建Hive 环境

Rayjun

大数据 hive

不会有人还不知道全文检索工具Lucene怎么用吧?文字长文教程

给你买橘子

Java 搜索引擎 lucene 程序员 开发工具

玛雅密码社区不忘初心 共筑未来通证新经济

Geek_116789

云原生实践系列:概述

孤岛旭日

Serverless 微服务 Service Mesh 服务架构

架构师训练营第六周总结

烟雨濛濛

SpringBoot 入门:02 - 实现 MVC

封不羁

Java spring springboot

关于架构的几件小事:架构概述(1)

北风

架构 架构设计 架构师 架构设计原则

基础篇:Object对象

csc

Java Java 25 周年

【计算机网络】网络层——路由器与路由选择协议

烫烫烫个喵啊

计算机网络 网络层

北京区块链规划重点发展海淀朝阳通州等区,加大对代币监管力度

CECBC

北京行动计划 四个高地 需求导向 为政务服务

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