京东科技Redis跨数据中心双向同步优化实践( 四 )


我们数据迁移的策略依然是 , 各个数据中心独立的完成扩容与数据迁移工作 , 迁移过程产生的del和restore命令不进行跨数据中心同步;把替换后的del命令和发送给目标节点的restore命令都分配小于0的id , 于是同步过程中会由同步工具进行过滤掉 。
 
六、redis性能经测试 , redis多活实例(默认开启rlog日志) , 相对于原生redis实例(开启aof持久化)性能基本一致;如下图所示:

京东科技Redis跨数据中心双向同步优化实践

文章插图
 
注:以上图表使用redis benchmark进行压测 , 压测时 , 客户端和服务端在同一个机器上
 
七、待优化项1、多写冲突多个数据中心同时写 , key冲突问题暂未解决 。
后续解决方案为使用CRDT协议;CRDT(Conflict-Free Replicated Data Type)是各种基础数据结构最终一致算法的理论总结 , 能根据一定的规则自动合并 , 解决冲突 , 达到强最终一致的效果 。
目前解决方案为业务对写入不同机房的数据进行拆分 , 以保证不会出现冲突 。
2、list类型幂等性五种基本类型里面 , list类型大部分操作都是非幂等的 , 暂时未做幂等性改造优化 。不建议使用或者业务自身保证使用list的数据操作幂等 。
3、过期与淘汰数据一致性问题正如前文所述 , 淘汰数据不进行跨数据中心同步会导致数据不一致 , 如果同步数据可能会出现同一个Key多写冲突 , 也可能出现数据不一致情况 。
目前解决方案为业务尽量合理提前预估所需内存容量、充足预分配、及时关注内存使用率告警 , 来规避淘汰数据现象发生 。
 
作者:罗明




推荐阅读