文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

我们激动的宣布我们第一个开源项目: Rump!

Rump是一个只专注做一件事情的小工具: 从AWS ElasticCache Redis集群中动态的获得数据.

我们遇到的问题是当我们试着从Staging Redis容器同步到我们生产环境集群的时候不方便. 在Sticker Mule我们重度使用 Docker 和CoreOS生产环境使用 ElastiCache 集群作为Redis服务.

然后我们想让我们的Staging环境更加接近于我们的生产环境,Redis是其中的一部分。就是这个过程最后催生了Rump。

第 1 段(可获 1.26 积分)

不要阻塞

我们只有一个要求: 在获得数据的过程中不要阻塞我们的线上环境. Redis的单线性是需要考虑的重要方面.

令人惊讶的是,我们发现 ElastiCache ships with some commands disabled这篇文章.基本上所有的命令,您可以使用安全传输数据.

Rump Redis Sync

BGSAVE

通常手动出发一个Redis备份的方法是使用其自带的命令 BGSAVE, 然后等待Redis数据库后台执行完成, 一个没有阻塞的草自拍.不幸的是,这个命令被禁用了, 除了你去使用AWS实现快照功能.

第 2 段(可获 1.15 积分)

SLAVEOF

搭建slave是另个有趣的选择 ,这对于我们来说是完美的选择.

这个计划是临时的Staging redis容器作为我们生产集群的slave,获取数据. 不幸的是SLAVEOF也被禁掉了,没有办法添加一个ElastiCache实例的Slave.

现存的其他工具

有许多很棒的redis的工具,来简化Redis服务器管理,导出JSON,等.

问题是,大部分的稳定, 可维护的工具, 使用了KEYS命令来获取keys. 而这个命令是 O(N) 复杂度, 当N非常大的时候严重阻塞了Redis, 直到获得了所有的keys, Staging 容器将会频繁创建和销毁,同时我们也有一个很大数量的键, 我们不想DoS 我们自己的服务器.

第 3 段(可获 1.76 积分)

rump-logo-600w

很明显,我们需要一个简单的工具来做同步. 我们开始使用 SCAN来获取 keys, 用DUMP/RESTORE来get/set 值.

SCAN是一个 O(1) 的命令, 可以安全的在生产环境获得所有的keys, 因为,它的实现和keys是不同的. SCAN 返回当前在数据库中存在的一组键, 同时移动光标到下一组。

DUMP/RESTORE 使读/写值独立于关键工作。

有了这一想法, 以下是Rump的特性:

  • 通过SCAN非阻塞的获取keys.
  • 使用DUMP/RESTORE使type可以被保留.
  • 把 SCAN 和DUMP/RESTORE 操作放在同一个管道中.
  • 从源服务器读取和写入到目标服务器是并发的。Rump不需要缓存服务。
  • 一个跨平台的二进制文件,没有依赖.
  • 最小侵入, UNIX philosophy,一个工具只完成一件事。
第 4 段(可获 1.85 积分)

我们希望这个工具能对和我们遇到同样问题的人们有帮助, 同时感谢 Redis 支持等一系列的命令!

P.S.如果这是你感兴趣的, 考虑加入我们 或者给我们留下信息。

第 5 段(可获 0.59 积分)

文章评论

dreampuff
真的是一个工具只做一件小事啊,不过他们的这个小工具为什么能有这么多star