唯品会架构部门高级工程师陈群-唯品会大规模Redis集群存储架构演进

2020-02-27 234浏览

  • 1.
  • 2.唯品会大规模Redis存储架构演进 陈群 唯品会 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 3.个人简介 • 2014.3加入唯品会DBA团队,资深数据库工程师 • 主要负责Redis/Hbase/Kafka集群运维和开发支持 • 关注MySQL、NoSQL、大数据以及分布式存储等技术 • 个人博客:DBA的罗浮宫(www.mdba.cn) G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 4.目录 1 应用场景 2 架构演进 3 运维实践 4 服务治理 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 5.Redis KV存储 数据结构 全内存 持久化 主从复制 集群模式 G O P S 2016 全 球 运 维 大 会 · 上 海 站http://redis.io
  • 6.redis在线应用 缓存 队列 存储 专题 活动 风控 运营 商品 红包 营销 报表 档期 会员 客服 模型 收藏 订单 物流 分流 评论 支付 仓储 推荐 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 7.挑战 成本 稳定性 吞吐量 高可用 G O P S 2016 全 球 运 维 大 会 · 上 海 站 扩展性
  • 8.目录 1 应用场景 2 架构演进 3 运维实践 4 服务治理 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 9.演进之路 Client Sharding Twemproxy -- 2014.7 G O P S 2016 全 球 运 维 大 会 · 上 海 站 2014.7 -- 2015.12 Redis Cluster 2015.6 --
  • 10.Client Sharding Client Master Master Master Slave Slave Slave G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 11.Client Sharding • 自定义数据分布规则 • 无在线扩容能力 • 扩容过程对应用不透明 • 需要开发高可用方案 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 12.Twemproxy lvs(active) twemproxy client keepalive master master slave slave G O P S 2016 全 球 运 维 大 会 · 上 海 站 lvs(backup) twemproxy master slave HA sentinel-1 sentinel-2 sentinel-3
  • 13.Twemproxy • 提供数据分片算法,包括一致性哈希 • 兼容redis/mc协议和大部分redis命令 • 支持pipeline • 支持mset/mget操作 • 架构复杂,成本较高 • Redis层无法在线扩容 • twemproxy缺陷 • lvs层瓶颈,改用ospf模式? G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 14.三层架构 1、为什么使用LB/LVS? • 方便管理,部署和监控 • 依赖lvs做健康检查,剔除问题节点 • 权重调整,用于压测 2、如何解决Twemproxy的扩容能力不足? • 预分配充足的节点 • 改造Twemproxy,支持节点替换 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 15.去三层架构 • 主推redis cluster架构 • 架构简化 • 节约大量机器成本 • 运维管理简单化 • 系统瓶颈更少 • 大幅度性能提升 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 16.Tips • 注意twemproxy不支持redis操作 • 合理设置twemproxy请求redis的timeout参数 • 正对缓存和存储服务,分别设置redis eject策略 • 根据数据大小设置mbuf的大小 • pipeline请求不宜过大,过大导致twemproxy申请大量的内存空间 • 本地化部署策略,和应用部署在一起 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 17.二次开发 • 支持在线替换redis节点,完成redis迁移。 • 增加连接keepalived,解决tcp连接不释放问题。 • 多线程版本twemproxy,节约了千万的机器成本。 • 开源:https://github.com/vipshop/twemproxy-vip• Twemproxy与异构集群之间的数据迁移。 •https://github.com/vipshop/redis-migrate-toolG O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 18.为什么不实用Codis? 来源:https://github.com/CodisLabs/codisG O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 19.Redis Cluster M2 client M1 S1 M3 failover S3 G O P S 2016 全 球 运 维 大 会 · 上 海 站 S2
  • 20.Redis Cluster • 无中心架构 • 数据按照slot存储分布在多个redis实例上 • 增加slave做standby数据副本,用于failover,集群快速恢复 • 实现故障auto failover • 亦可manual failover,为升级和迁移提供可操作方案 • 降低硬件成本和运维成本,提高系统的扩展性和可用性 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 21.架构对比 架构 兼容性 成本 扩展性 Client Sharding • 多个独立的实例 • 主从复制 • 客户端实现分片 Twemproxy • twemroxy完成分片 • twemroxy仅转发请求和处理响应 • 可以部署在应用服务器,或者dns轮询 • 或者Twemproxy上加负载均衡,简化开发 • 层次多 • 依赖具体客户端实现 •低 • 增加开发复杂度 • 兼容大部分redis命令 • 支持mget/mset • 支持pipeline • 机器数量多 • 管理和维护成本高 • 扩展性差 • 修改配置和代码,发布变更 • 简单扩容方式:倍增节点 • redis层扩容能力弱 Redis Cluster • 无中心架构 • server端实现分片(crc32) • 主从复制 • 强依赖smart client • 依赖具体客户端实现 •低 • 扩展能力强 • 可以在线增加/缩容节点 HA • 需要自己开发HA模块 • Sentinel+Zookeeper/DNS • 需要自己开发HA模块 • Sentinel+Zookeeper/DNS • slave 热备 • auto-failover/switchover G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 22.目录 1 应用场景 2 架构演进 3 运维实践 4 服务治理 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 23.Redis监控 • 进程cpu利用率,why? 单进程 • QPS、命中率 • 内存 • 复制状态 • 客户端连接数 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 24.参数优化 • timeout 180 • tcp-keepalive 300 • repl-backlog-size 32M #默认1M,导致无法pysnc • client-output-buffer-limit normal 512mb 256mb 60 • client-output-buffer-limit slave 1024mb 256mb 120 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 25.数据持久化 • rdb 还是aof? • 主库持久化还是从库? • Fork子线程时,前端出现请求超时。 • 磁盘配置 • 缓存是否需要持久化数据? G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 26.高性能 • slow query严重影响服务的稳定性。 • 单个请求执行很长时间,其他客户端大量请求超时 • 比如常见的O(N)操作,hmget/lrang/keys等 • 管理操作命令,bgrewriteaof/bgsave时fork子线程时造成短暂的写入阻塞 • 隐藏的操作,big-key expired G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 27.Redis Cluster • cluster-node-timeout,默认15s,过小造成集群不稳定 • cluster-require-full-coverage,集群是否可以部分可用? • 建议使用成熟稳定的redis-3.0.7版本,3.2.x新增代码较多 • 3.0.x后期版本数据迁移更快,migrate操作实现单次迁移多个key • 提醒开发注意客户端驱动参数默认值,比如JedisCluster里面 DEFAULT_MAX_REDIRECTIONS = 5 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 28.目录 1 应用场景 2 架构演进 3 运维实践 4 服务治理 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 29.Cache和Storage 不同地方: • 使用场景和目的 • 数据读写逻辑和异常处理策略 • 数据一致性和安全性 • 数据持久化、备份、恢复需求 混用或者误用带来的问题: 1)数据异常或者丢失 2)资源管理复杂,缓存和存储对硬件配置需求不同 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 30.请求回源 常见问题: 1)数据miss或者异常求处理无后续处理逻辑 2)db同步cache数据更新策略 3)重试机制 4)回源惊群问题和过载保护机制 G O P S 2016 全 球 运 维 大 会 · 上 海 站 应用程序 缓存 数据存储
  • 31.多级缓存与数据一致性问题 目的: • 缓存热点数据 • 减少穿透到DB的请求 • 数据闭环 常见问题: • 数据不一致 • 数据生命周期 • 数据更新策略 • JVM GC问题 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 32.探索 • 探索内存+磁盘存储模式,降低生产成本 G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 33.Thanks! G O P S 2016 全 球 运 维 大 会 · 上 海 站
  • 34.GOPS2016 全球运维大会更多精彩 G O P S 2016 全 球 运 维 大 会 · 上 海 站