打造极致性能和可用性的缓存服务 主讲人:唐荣 目录 03 可用性优化 02 性能优化 01 云Redis架构 01云Redis架构 云Redis架构 Client Proxy Master Redis集群 sync Slave Client VPCProxy Master sync Slave Client Proxy Master sync Slave Redis-server集群版 Gossip Proxy功能 Redis服务重点 Sharednothing 基于Slot的分片管理 支持平滑迁移 动态分片(hotsharding) 数据均衡(rebalance) 集群自治 自动发现(autodetect) 自动容灾(autofailover) 屏蔽客户端差异 屏蔽客户端对后端依赖 网络流量隔离 承载更丰富的功能 减少对Redis代码的入侵 监控指标聚合上报 无状态 高性能 高可用 02性能优化 性能优化基础 评价 Redis性能指标 网络时延 时延好越低性能越好 吞吐率 连接数——连接数越多消耗CPU越多 Pipeline——批处理模型 性能优化重点 降低Redis连接数 Pipeline机制 连接网络 优化优化 使用最新网络方案, 降低时延、提升性能 连接优化处理 基于Pipeline合并请求包转发,降低连接数 命令转发连接区分 命令转发顺序保证 降低Redis网络IO开销、批量处理数据提升 Redis性能 区分普通命令与阻塞命令使用连接,避免阻塞命令影响其他客户端正常命令 Proxy转发命令在后端Pipeline连接上顺序执行,不影响执行结果 网络优化 集中式网络解决方案 集中式网络每次访问来回均需经过VPCGW,增加 网络时延 分布式网络只有建连阶段需要访问VPCGW,请求 阶段Client直接请求Proxy 分布式网络相较集中式网路减少大量网络跳数,降低时延 性能对比 读请求,优化后相比优化前性能提升287% 写请求,优化后相比优化前性能提升240% 性能提升百分比计算公式:(优化后QPS-优化前QPS)/优化前QPS*100% 03可用性优化 Redis集群变更 Redis 集群变更 扩分片 扩容 扩副本 缩分片 缩容 缩副本 扩分 片Master syncSlave 缩 分 Client Proxy Mastersync Slave Client Proxy Mastersync Slave 集群3分片扩5分片 集群1副本 Mastersync Slave Mastersync Slave Client Proxy Mastersync Slave Client Proxy Mastersync Slave Mastersync Slave 节点迁移 片Master Master Master 扩2副本 Master Master Master sync sync sync sync sync sync sync sync sync Slave Slave Slave SlaveSlave SlaveSlave SlaveSlave 无损迁移 变配异常 Client Proxy Master Master Master sync sync sync Slave Slave Slave Client Proxy Master Master Master Master Master sync sync sync sync sync Slave Slave Slave Slave Slave 长连接命令报错、异常如subscribe命令——断连 阻塞命令报错如blpop——报错unblock 事务执行失败 解决方案 长连接命令迁移 阻塞命令重定向 事务回放 集群3分片扩5分片 长连接迁移 基于性能考虑,publish消息在Redis集群中不会广播 迁移重点 管控流程通知Proxyslotmigrate迁移的目标节点、源节点 需要同时subscribe新旧Master节点,同时维护两个长连接 迁移过程中保证publish消息不丢失,转发至旧Master的publish消息会模拟SET命令报MOVED,进而Proxy重定向到新Master中。 Proxy在断开旧Master节点之前会校验其角色是否为Slave,角色正常才能断开连接、完成迁移 阻塞命令重定向以及事务回放 阻塞命令重定向 管控通知Proxy启动迁移流程 改造Master节点 Proxy重定向阻塞命令 事务回放 管控通知Proxy启动迁移流程进入事务回放状态 Proxy缓存事务信息 事务执行异常在新Master回放事务 客户收益 客户收益 Redis集群变更 对业务无影响 机器异常节点 迁移无报错 THANKS