- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 吴斌炜@Ucloud 构建高可用和弹性伸缩的KV系统 Agenda 常见KV存储系统 如何构建高可用可伸缩KV存储系统 演讲流程 演讲大纲 NoSQL(Not only SQL) 3 易扩展 高性能 数据结构灵活 SQL类DB如何提升性能 3 DB1 DB2 主 从 写 读 SQL类DB如何提升性能 3 DB1 主 从 写 读 DB2 从 写 读 主 KV存储系统使用场景 —— 缓存 3 MYSQL Memcache/Redis 写 cache失效 MYSQL Memcache/Redis 读 Cache未命中 用作缓存只能提升读性能,不能提升写性能 KV存储系统常用场景 —— 持久化DB 3 Redis 读 写 用作持久库可以同时提升读写性能 Memcache 3 动态网页中间结果 更新较少的热点数据 Session等临时数据 不足 使用场景 适用场景较 机器重启后热点数据丢失 Redis 取最新N个数据的操作 排行榜应用,取TOP N操作 需要精准设定过期时间的应用 计数器应用 消息队列 缓存 使用场景 不足 单进程 容量受单机限制 传统解决Redis问题的方案 Sharding 读写分离 单机redis 性能 主从如何复制? 自动容错? 在线扩容? 高可用可伸缩KV存储系统 3 兼容Memcache/Redis协议 路由节点 存储节点2 存储节点1 高可用可伸缩KV存储系统 3 兼容Memcache/Redis协议 路由节点1 存储节点1(主) 存储节点1(备) 存储节点2(主) 存储节点2(备) 高可用可伸缩KV存储系统 3 兼容Memcache/Redis协议 管理节点 路由节点1 路由表 存储节点1(主) 存储节点1(备) 存储节点2(主) 存储节点2(备) 高可用可伸缩KV存储系统 3 兼容Memcache/Redis协议 管理节点 路由节点1 路由表 存储节点1(主) 存储节点1(备) 存储节点2(主) 存储节点2(备) 搬迁节点 存储节点3 高可用可伸缩KV存储系统 3 兼容Memcache/Redis协议 管理节点 路由节点1 路由表 存储节点1(主) 存储节点1(备) 存储节点2(主) 存储节点2(备) 搬迁节点 存储节点3 请求 获取路由 心跳 迁移 复制 如何构建高可用可伸缩KV存储系统 3 数据分布 复制和读写 自动容错 在线扩缩容和负载均衡 一致性hash算法 Ketama算法 将每个节点分为若干个虚节点(100-200) 使用md5做为hash函数 每4个虚拟节点为一组 每个虚拟节点对应16字节的md5值中的4个字节 数据分布 —— 同构系统 A B C A’ B’ C’ D E F D’ E’ F’ 数据分布 —— 异构系统 A E F’ D’ B’ C E’ A’ B C’ E F 异构系统在一台机器故障后多台机器能够同时恢复,不过架构较为复杂 复制和读写流程 W1 W1 W4 异步复制 保证可用性牺牲一致性 同步复制 保证一致性牺牲可用性 W2 W3 W4 W3 W2 主 从 主 从 路由节点 路由节点 自动容错 3 管理节点 路由节点1 路由表 存储节点1(主) 存储节点1(备) 存储节点2(主) 存储节点2(备) HASH(KEY) 路由节点2 请求 获取路由 心跳 迁移 复制 LVS 请求 DB 磁盘 弹性伸缩和负载均衡 0 N 新增node3 需要迁移的key node1 virtual node node2 virtual node node3 virtual node key 目的节点 源节点 在线迁移数据 3 迁移完成的数据转发给目的端 迁移中的数据锁定写,迁移完成后转发给目的端 未迁移的数据直接在源端读写 分布式KV系统的不足 3 分布式事务较难支持 冷备文件存在一致性问题 实现多个key的操作较为复杂 QA * * * * 使用redis不仅可以提升读写性能,也可以减少应用程序的逻辑 * * 图重画 * * 异构系统上的分片数据是随机分布的,任何两个存储节点的数据可能都不一样,相比同构系统,它的架构更加复杂 * * * * * * 使用redis不仅可以提升读写性能,也可以减少应用程序的逻辑 * * 图重画 * * 异构系统上的分片数据是随机分布的,任何两个存储节点的数据可能都不一样,相比同构系统,它的架构更加复杂 * * * *
文档评论(0)