前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis Cluster 迁移案例

Redis Cluster 迁移案例

作者头像
dys
发布2018-04-04 14:30:55
1.5K0
发布2018-04-04 14:30:55
举报
文章被收录于专栏:性能与架构

背景简介

Grab 是东南亚的打车巨头,app 下载量已有 5500 万,司机有 120 万

app 与 server 通信时需要使用一个认证 token,Grab 使用 Redis 来缓存 token,使用 Mysql 来持久化备份

之前 Redis 是单节点结构,今年年初时 Grab 意识到这个结构很快就会支撑不住,因为用户增长太快

选择解决方案

备选方案

(1)使用多节点复制结构

之前的单点结构是设计上的缺陷,容错性很差,现在正是个修补的机会,可以使用 Redis 复制结构来提升容错性

但这也点问题,当 master 出现问题时,选择 slave 提升为 master 这个过程需要时间,这段时间内的写操作会受到影响

(2)自建 Redis Cluster

Redis Cluster 的确能够解决可用性问题,但会有其他麻烦:

  1. 分片依赖客户端,所以客户端的复杂度增加了
  2. 添加新的分片时比较麻烦,需要自己设计迁移逻辑,选择好一批用户信息,从现有节点上移动到新的节点

(3)使用 AWS 的弹性缓存服务

可以按需添加每个分片的复制节点,可以在服务端完成数据切分,AWS 来为我们操心分片策略,但不支持添加新的分片

选择

Grab 最想要的是水平扩展能力,在请求压力加大时可以轻松的增加处理能力

AWS 的弹性缓存服务是最适合的,每个分片可以动态添加复制节点,很好的支持了读数据能力的水平扩展,但不能够添加分片,这就限制了写数据能力的扩展

读写能力都需要很好的扩展性吗?经过统计发现,主要压力是在读上

写负载:

读负载:

写负载并不太高,提前规划好容量就可以了,Grab 统计了过去6个月的增长率,对容量进行了评估,最后决定使用3个分片,每个分片2个复制节点,一共9个节点

迁移过程

决定使用 AWS Redis Cluster 弹性缓存服务之后,就需要把现有的单点 Redis 中的数据迁移到 AWS,并把读写操作也转过去

Grab 把整个迁移过程拆分成了6步,来保证绝对的安全稳定

第1步

把数据从老的 Redis 节点迁移到 Redis Cluster,这个过程比较简单,因为 cluster 还没有开始处理线上流量

需要考虑的就是不要影响老节点的性能,Grab 使用了 scan,dump,restore这些高效的命令把影响降到最低

第2步

应用开始向 cluster 中写数据,写入老节点的时候异步写入 cluster

这个过程对原有业务流程没有任何影响,可以验证是否出错、写入过程是否符合预期

第3步

上一步没问题后,使用同步模式向 cluster 中写入,真正参与到业务流程中,如果出现问题,就会影响真实的 API 调用结果,在真实环境中检验

第4步

读操作时,异步读取 cluster 中的数据,与老节点中的结果进行对比验证

这个过程对原有流程也没有影响,就是用来验证新老数据源是否同步

第5步

把所有读操作完全转到 cluster,停止对老Redis的读取,至此,API 完全依赖于新的 redis-cluster

第6步

停止向老 Redis 写,彻底停掉与其的任何交互,迁移完成

每个步骤都是使用配置进行控制,如果出现了不可预知的情况,便可以快速的回退到初始状态

小结

Grab 这次 Redis 迁移的过程并不复杂,但他们的分析思路和严谨的态度很值得借鉴

本文翻译正自理 Grab 的技术文章

代码语言:javascript
复制
http://engineering.grab.com/migrating-existing-datastores
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景简介
  • 选择解决方案
    • 备选方案
      • 选择
      • 迁移过程
        • 第1步
          • 第2步
            • 第3步
              • 第4步
                • 第5步
                  • 第6步
                  • 小结
                  相关产品与服务
                  云数据库 Redis
                  腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档