Week 6 学习总结

用户头像
evildracula
关注
发布于: 2020 年 11 月 29 日

分布式数据库

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:



  1. 不再接受 Proposal ID 小于等于当前请求的 Prepare 请求。

  2. 不再接受 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 )



发布于: 2020 年 11 月 29 日阅读数: 18
用户头像

evildracula

关注

还未添加个人签名 2019.07.29 加入

还未添加个人简介

评论

发布
暂无评论
Week 6 学习总结