Redis 多数据中心复制管理系统 X-Pipe

Apache
Java
跨平台
2017-04-27
王练

X-Pipe 是由携程框架部门研发的 Redis 多数据中心复制管理系统。。基于 Redis 的 Master-Slave 复制协议,实现低延时、高可用的 Redis 多数据中心复制,并且提供一键机房切换,复制监控、异常报警等功能。

XPipe 解决什么问题

Redis 在携程内部得到了广泛的使用,根据客户端数据统计,整个携程全部 Redis 的读写请求在每秒 200W,其中写请求约 10W,很多业务甚至会将 Redis 当成内存数据库使用。这样,就对 Redis 多数据中心提出了很大的需求,一是为了提升可用性,解决数据中心 DR(Disaster Recovery) 问题,二是提升访问性能,每个数据中心可以读取当前数据中心的数据,无需跨机房读数据,在这样的需求下,XPipe 应运而生 。

为了方便描述,后面用 DC 代表数据中心 (Data Center)。

整体架构

  • Console 用来管理多机房的元信息数据,同时提供用户界面,供用户进行配置和 DR 切换等操作。

  • Keeper 负责缓存 Redis 操作日志,并对跨机房传输进行压缩、加密等处理。

  • Meta Server 管理单机房内的所有 keeper 状态,并对异常状态进行纠正。

Redis 数据复制问题

多数据中心首先要解决的是数据复制问题,即数据如何从一个 DC 传输到另外一个 DC。我们决定采用伪 slave 的方案,即实现 Redis 协议,伪装成为 Redis slave,让 Redis master 推送数据至伪 slave。这个伪 slave,我们把它称为 keeper,如下图所示:


有了 keeper 之后,多数据中心之间的数据传输,可以通过 keeper 进行。keeper 将 Redis 日志数据缓存到磁盘,这样,可以缓存大量的日志数据(Redis 将数据缓存到内存 ring buffer,容量有限),当数据中心之间的网络出现较长时间异常时仍然可以续传日志数据。

Redis 协议不可更改,而 keeper 之间的数据传输协议却可以自定义。这样就可以进行压缩,以提升系统性能,节约传输成本;多个机房之间的数据传输往往需要通过公网进行,这样数据的安全性变得极为重要,keeper 之间的数据传输也可以加密,提升安全性。

加载中

评论(0)

暂无评论

携程开源 Redis 多数据中心复制管理系统 X-Pipe

由携程框架部门研发的 Redis 多数据中心复制管理系统 X-Pipe 已于近日开源。基于 Redis 的 Master-Slave 复制协议,实现低延时、高可用的 Redis 多数据中心复制,并且提供一键机房切换,复制...

2017/04/27 08:02

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

LibGDX重建Flappy Bird——(4) 创建游戏对象

在本章,我们将为Flappy Bird项目创建一个真正的场景。该游戏场景由几个具有共同属性和功能的游戏对象组成。但是,这些对象被渲染的方式和行为却各有不同, 简单的 对象直接渲染其所分配的纹...

2016/01/27 15:20
6
1
linux命令eval的用法

1. eval command-line 其中command-line是在终端上键入的一条普通命令行。然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次。如: pipe="|" eval ls $pipe wc -l shell...

2014/10/26 17:38
94
0
测试进程上下文切换时间

测试Context Switch time(进程上下文切换时间) -------------------------------------------------- 创建两个进程(实时进程)并在它们之间传送一个令牌,如此往返传送一定的次数。其中一个进...

2013/04/04 13:38
290
0
unixbrench 测试linux服务器性能

###1. 安装unixbrench 下载unixbrench,链接https://codeload.github.com/kdlucas/byte-unixbench/tar.gz/v5.1.3 安装gcc,perl,cpan等软件后编译 解压后进入UnixBrench目录后执行make命令编...

2016/06/05 19:35
52
0
squid install script

#!/bin/sh if [ ` getconf LONG_BIT` == 32 ];then export CHOST="i686-pc-linux-gnu" export CFLAGS="-O9 -funroll-loops -Wall -W -mtune=nocona -mcpu=nocona -march=nocona -mfpmath=sse...

2010/06/13 15:31
178
0
开源js项目推荐:无任何依赖的string操作库

strman是一个无依赖的string操作库,api非常丰富,适用于前端和Node.js。从开源到今天(4月24日),才12天,已经754个star,还算是不错的了,想参与的可以去贡献一下。另外要说的是它是学习e...

2016/04/24 14:16
71
1
Gitlab基于git-hooks做checkstyle代码检测

Gitlab基于git-hooks做checkstyle代码检测 描述:为了规范团队代码,在成员push代码时,做代码检测规范,不符合规范的禁止成员推送代码到服务端. 基于git-hook服务器端钩子pre-receive进行处...

08/05 09:29
137
0
python进程池详解

python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例 1,Python的multiprocessing 实现多cpu 多进程 为啥用multiprocessing? *现在cpu都多核了, 写大型程序你还在用单...

2017/10/26 21:28
31
0
python之subprocess 创建子进程

ps:实现代码 #!/usr/bin/env python import subprocess; def run_proc1(strProc): proc = subprocess.Popen(strProc, shell = False); #proc.stdin.write('a'); #proc.s...

2014/07/02 16:23
34
0
RxJS的另外四种实现方式(二)——代码最小的库(续)

接上篇 RxJS的另外四种实现方式(一)——代码最小的库 上篇我们展示了生产者interval和操作符filter的实现,接下来我们看一下消费者subscriber的实现 callbag的实现 const subscribe = (lis...

09/16 15:32
28
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部