架构师第六周
Doris
核心点: 数据扩容 -> 支持透明化的扩容迁移
路由选择是分布式的核心
有状态的数据, 路由选择还需想到数据迁移
基于虚拟节点的分区算法
虚拟节点固定, 同一份数据只会hash到一个固定的虚拟节点
虚拟节点会绑定到物理节点上, 虚拟节点为10000个, 物理节点不超过100, 因为超过了会造成负载不均衡
集群扩容时, 仅需调整虚拟节点与物理节点的映射关系
扩容时的负载均衡平衡
保证扩容服务器时, 均衡分配
轮询, 先算出一个节点需要多少虚拟节点, 再轮询超过的, 划分给新增的服务器
集群管理
ConfigServer 的心跳检测 (几秒一次, 太慢)
KV Client 写DataServer 失败, 请求ConfigServer去写数据, ConfigServer写失败, 通知所有集群
瞬时失效 (秒级, 可恢复)
KVClient 重试3次 (中间会sleep)
3次失败则升级到"仲裁临时失效"
临时失效 (不能由KVClient客户端决定)
KVClient判断为临时失效, 提交给 ConfigServer仲裁
ConfigServer重试3次
ConfigServer失败后, 通知所有服务器
临时失效后的恢复
短时间内可恢复
恢复后数据和失效前一致
不能恢复则升级到永久失效
临时失效的fail over
原本是数据双写, 现在一个节点失效, 另一个节点正常读写
启用一个临时物理节点, 用于备份写
若临时失效的节点又恢复了, 将临时节点的备份数据写回恢复节点
此时恢复节点也接收写请求, 数据仍是双写, 但由于恢复节点数据不正确, 所以不能读
恢复节点的写入来源有请求写入, 备份写入, 需要根据时间戳来保证不冲突(冲突则丢弃旧的)
永久失效的fail over
若挂掉的节点起不来, 则备份节点丢弃, 使用空白的新节点
一直没问题的正常节点全拷贝到新节点
拷贝时的新节点其实也是临时失效状态, 需等待拷贝完成, 流程和临时失效failover一致
评论