深入浅出百亿请求高可用Redis(codis)分布式集群揭秘
主要是在迁移动作执行前,所有的请求都能够感知到路由的变化,所以有了一阶段的处理流程,此处实现是通过并行发送给所有的proxy,proxy会对相应的slot加写锁,所以的请求在队列中排队,直到所有的proxy都通知dashboard之后,proxy的锁才放开,此时请求的延时会有轻微增高,但由于是并行响应,影响时间很短,视图会轻微抖动。 迁移动作 主要由dashboard按批次触发直到所有的key都迁移ok,迁移的过程,slot上的key可能存在2种情况,一种在新的redis实例上A,一种在旧的redis实例上B,所以对于有迁移状态的slot,所有向这个slot发送的命令都通过在redis中定制的命令SLOTSMGRT-EXEC-WRAPPER来处理,该命令是基于3.2的分支新增的,该命令主要做这几个事情,1)判断key是否存在,如果存在,但不在迁移批次,则直接对key调用真实方法,如果存在,但在迁移批次,则允许读操作,不允许写操作,2)如果key不存大,则key可能已经被迁移到新实例,也可能key不存在,则通知proxy前往新的实例进行操作 迁移性能 Codis的迁移其实之前2.x版本的迁移性能并不高,3.x之前性能提升了非常之大,千万级别的zset结构迁移只需要10多秒,而在原来的模式需要50多秒,具体原因在于 迁移性能数据 6.2 迁移异常处理 另外,看到这里,不知道大家有没有什么问题,不过这里我准备了一些问题,来看看codis是如何来处理的,特别在网络环境复杂,不稳定的情况下怎么操作。 问题一,把大key拆分成小批次进行迁移,如果批次迁移失败,超时,怎么做? (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |