Week 6 学习总结
分布式数据库
Mysql复制
主从复制
一主多复制
主主复制
主主失效恢复
主主失效的维护过程
注意事项
主主复制的两个数据库不能并发写入
复制只是增加了数据的读并发处理能力,没有增加写并发能力和存储能力。• 更新表结构会导致巨大的同步延迟。
更新表结构会导致巨大的同步延迟
CAP原理(见作业)
分布式一致Zookeeper
分布式脑裂
在一个分布式系统中,不同服务器获得了互相冲突的数据信息或者执行指令,导致整个集群陷入混乱,数据损坏,本称作分布式系统脑裂。
分布式一致性算法Paxos
Proposer,Acceptor,Learner
第一阶段:Prepare 阶段。Proposer 向 Acceptors 发出 Prepare 请求,Acceptors 针对收到的 Prepare 请求进行 Promise 承诺。
第二阶段:Accept 阶段。Proposer 收到多数 Acceptors 承诺的 Promise 后,向Acceptors 发出 Propose 请求,Acceptors 针对收到的 Propose 请求进行 Accept 处理。
第三阶段:Learn 阶段。Proposer 在收到多数 Acceptors 的 Accept 之后,标志着本次Accept 成功,决议形成,将形成的决议发送给所有 Learners。
Proposer 生成全局唯一且递增的 Proposal ID (可使用时间戳加Server ID),向所有Acceptors 发送 Prepare 请求,这里无需携带提案内容,只携带 Proposal ID 即可。
Acceptors 收到 Prepare 和 Propose:
不再接受 Proposal ID 小于等于当前请求的 Prepare 请求。
不再接受 Proposal ID 小于当前请求的 Propose 请求。
Zookeeper 使用
配置管理
集群管理(负载均衡与失效转移)
互联网
互联网搜索引擎架构技术
爬虫
文档矩阵与倒排索引
Lucene
架构
索引文件准实时更新
索引有更新,就需要重新全量创建一个索引来替换原来的索引。这种方式在数据量很大时效率很低,并且由于创建一次索引的成本很高,性能也很差。
Lucene 中引入了段的概念,将一个索引文件拆分为多个子文件,每个子文件叫做段,每个段都是一个独立的可被搜索的数据集,索引的修改针对段进行操作。
新增:当有新的数据需要创建索引时,原来的段不变,选择新建一个段来存储新增的数据。
删除:当需要删除数据时,在索引文件新增一个 .del 的文件,用来专门存储被删除的数据ID。当查询时,被删除的数据还是可以被查到的,只是在进行文档链表合并时,才把已经删除的数据过滤掉。被删除的数据在进行段合并时才会被真正被移除。
更新:更新的操作其实就是删除和新增的组合,先在 .del 文件中记录旧数据,再在新段中添加一条更新后的数据。
为了控制索引里段的数量,我们必须定期进行段合并操作
Elastic Search
索引分片,实现分布式
索引备份,实现高可用
API 更简单、更高级
实例: Doris 海量kv engine
产品目标
功能目标:
KV 存储 Engine
逻辑管理:Namespace
二级索引
非功能性目标:
海量存储:透明集群管理,存储可替换
伸缩性:线性伸缩,平滑扩容
高可用:自动容错和故障转移
高性能:低响应时间,高并发
扩展性:
灵活扩展新功能
低运维成本
易管理
可监控
约束:
一致性:最终一致性
逻辑架构
二层架构 – Client、Data Server + Store
四个核心组件 – Client、DataServer、Store、Administration
kv storage 概念模型
Machine:物理机
Node:分区单元,一台 Machine 可运行多个 Node。
Namespace:数据的逻辑划分 Tag,Client 可识别。数据管理无需识别。
关键技术点
数据分区
解决海量数据存储
客户端计算分区
分区算法(Partition Policy):虚拟节点
可用性关键场景
瞬时失效
临时失效
服务器升级或者网络不可用
失效机器在短时内可恢复(例如:2小时内)
恢复后数据和失效前一致
永久失效
机器下线
临时失效Failover
物理节点2临时失效,并在可接受时间内恢复物理节点x:备用节点,临时存放失效的物理节点2的数据,物理节点2恢复后迁移回物理
节点2物理节点2临时失效及恢复期间物理节点1承担所有read操作
永久失效Failover
每份 Data 写两份保证高可用:Copy 1, Copy2
一致性处理:version(timestamp),Conflict Check & Merge
扩容实施数据迁移:
基本原理
集群扩容,新增NodeX
旧路由算法:Route1( key1) = { pn1, pn2 }
新路由算法:Route2( key1) = { pn1, pnx }
新旧算法有一个Node相同,因此只需要迁移一个Node
Pn2 数据迁移到pnx,client 不再对pn2数据操作
R 操作只在pn1上
W/R 操作指向 {pn1, pnx }
Client对等节点中的一个pn1不变(路由算法保证)
迁移过程
基本原理:基于遍历的路由对比迁移
迁移时,计算两个 Route 算法。不相同则迁移。
采用改进的分区路由算法,减少迁移量: X(M+X )
版权声明: 本文为 InfoQ 作者【evildracula】的原创文章。
原文链接:【http://xie.infoq.cn/article/ff306e26578f11b968e01354a】。文章转载请联系作者。
评论