写点什么

架构师训练营第 6 周学习总结

用户头像
netspecial
关注
发布于: 2020 年 11 月 01 日

6.1 分布式关系数据库(上)

  • MySQL复制

  • MySQL主从复制

  • MySQL一主多从复制

  • 分摊负载

  • 专机专用

  • 便于冷备

  • 高可用 - 部分高可用,读数据高可用

  • MySQL的主主复制

  • 主主复制的两个数据库不能并发写入。

  • 复制只是增加了数据的读并发处理能力,没有增加写并发能力和存储能力。

  • 更新表结构会导致巨大的同步延迟。

  • MySQL的主主失效恢复

  • MySQL主主失效的维护过程

  • 数据分片

  • 分片目标 - 分布式数据库通过增加服务器,提高处理能力

  • 分片特点

  • 分片原理

  • 硬编码实现数据分片

  • 映射表外部存储

  • 数据分片的挑战

  • 需要额外代码

  • 无法执行多分片的联合查询。

  • 无法使用数据库的事务。

  • 随着数据的增长,如何增加更多的服务器。

6.2 分布式关系数据库(下)

  • 分布式数据库中间件 - 中间件实现分片逻辑

  • Cobar架构

  • 路由配置 - 如何做集群的伸缩

  • 一开始就取一个模比较大的值,将来再做数据迁移(主从复制)。

  • 数据库部署方案

  • 单一服务与单一数据库

  • 两个Web服务及两个数据库

  • 综合部署

6.3 CAP原理与NoSQL数据库架构

  • CAP原理

  • 一致性 Consistency

  • 一致性是说,每次读取的数据都应该是最近写入的数据或者返回一个错误(Every read receives the most recent write or an error),而不是过期数据,也就是说,数据是一致的。

  • 访问一个系统,要么返回一个正确的数据,要么返回一个错误或者不返回,而不是一个过期的数据。

  • 可用性 Availability

  • 可用性是说,每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的(Every request receives a (non-error) response, without the guarantee that it contains the most recent write),也就是说系统需要一直都是可以正常使用的,不会引起调用者的异常,但是并不保证响应的数据是最新的。

  • 分区耐受性 Partition tolerance

  • 分区耐受性说,即使因为网络原因,部分服务器节点之间消息丢失或者延迟了,系统依然应该是可以操作的(The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes)。

对于一个分布式系统而言,网络失效一定会发生,也就是说,分区耐受性是必须要保证的,那么在可用性和一致性上就必须二选一。

所以,关于CAP 原理,更准确的说法是,在分布式系统必须要满足分区耐受性的前提下,可用性和一致性无法同时满足。

  • 最终一致性

  • 所谓的最终一致性是说,在一段时间范围之内数据是不一致的。但是当网络延迟恢复,数据同步完成的时候,最终是一致的。

  • 最终一致写冲突

  • 简单冲突处理策略:根据时间戳,最后写入覆盖。

  • 客户端冲突解决

  • 客户端合并数据

  • 投票解决冲突(Cassandra)

  • HBase

  • Log Structed Merge Tree (LSM 树)

  • ACID与BASE

  • 传统关系型数据库ACID - 原子性 (Atomicity), 隔离性(Isolation), 持久性(Durability), 一致性(Consistency)

  • NoSQL BASE - 基本可用(Basically Available), 软状态,弱状态(Soft state),最终一致性(Eventually consistent)

6.4 ZooKeeper与分布式一致性架构

  • 分布式系统脑裂 - 在一个分布式系统中,不同服务器获得了互相冲突的数据信息或者执行指令,导致整个集群陷入混乱,数据损坏,本称作分布式系统脑裂。

  • ZooKeeper需要多个服务器,保证高可用。

  • 分布式一致性算法Paxos

  • 三个角色

  • Proposer

  • Acceptor

  • Learner

  • 三个阶段

  • Prepare阶段

  • Accept阶段

  • Learn阶段

  • Proposer 生成全局唯一且递增的Proposal ID (可使用时间戳加Server ID),向所有Acceptors 发送Prepare 请求,这里无需携带提案内容,只携带Proposal ID 即可。

  • 相对比较复杂

  • Zab协议

  • Leader, Follower

  • ZooKeeper

  • Zookeeper的架构

  • 树状记录结构

  • API

  • 应用场景

  • 配置管理

  • 选Master

  • 集群管理(负载均衡与失效转移)

  • 性能

  • 读的性能要远超过写的性能

  • 服务器数目越多,读的性能越高。服务器数目越多,写的性能越差。

6.5 搜索引擎的基本架构

  • 互联网搜索引擎整体架构

  • 爬虫系统架构

  • 爬虫禁爬协议

  • 文档矩阵与倒排索引

  • 倒排索引 - 哪些文档里包含了特定的词

  • 带词频的倒排索引

  • 带词频与位置的倒排索引

  • Lucene架构

  • Lucene索引文件准实时更新 - Lucene 中引入了段的概念,将一个索引文件拆分为多个子文件,每个子文件叫做段,每个段都是一个独立的可被搜索的数据集,索引的修改针对段进行操作。

  • 不支持分布式集群

  • ElasticSearch架构

  • 索引分片,实现分布式

  • 索引备份,实现高可用

  • API更简单,更高级

  • ES分片预分配与集群扩容

6.6 NoSQL案例:Doris分析案例(一)

  • 当前现状

  • 当前存在的问题

  • 开源解决方案为什么不行

  • 产品需求

  • 产品定位

  • 解决问题

  • 产品目标

  • 功能目标

  • 非功能目标

  • 约束

  • 逻辑架构

  • 两层架构 - Client, Data Server + Store

  • 四个核心组件 - Client, Data Server, Store, Adminstration

  • KV Storage 概念模型

  • Logical Layer - Namespace

  • 关键技术点

  • 数据分区

  • 基于虚拟节点的分区算法

  • 均衡性

  • 波动性

6.7 Doris分析案例(二):高可用与集群扩容如何设计?

  • 基本访问架构

  • 对等Node 访问

  • 双写保证可用性(W=2, R=1)

  • 基于分区算法查找两个Node

  • 数据恢复和数据同步

  • 集群管理– 健康检查和配置抓取

  • 检查1:ConfigServer 对 DataServer心跳检查

  • 检查2:Client 访问时Fail 报告

  • 其他Client 定时配置抓取

  • 关键技术点- 可用性关键场景

  • 瞬时失效

  • 临时失效

  • 永久失效

  • 关键技术点-临时失效的fail over

  • 备用节点(日志节点)

  • 关键技术点– 永久失效failover

  • 每份Data 写两份保证高可用:Copy 1, Copy2

  • 一致性处理:version(timestamp)

6.8 Doris分析案例(三):扩容伸缩是如何设计的?

  • 关键技术点- 扩容实施数据迁移: 基本原理

  • 数据可识别功能- 逻辑数据结构

  • Namespace:一个业务实体数据的集合



用户头像

netspecial

关注

还未添加个人签名 2011.07.20 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 6 周学习总结