Distributed Systems for Fun and Profit 笔记(二)

2. 抽象的上下不同层次 系统模型 分布式系统中的程序: 在独立节点上同时运行 通过可能引入不确定性和消息丢失的网络连接 并且没有共享内存或共享时钟 系统模型列举了与特定系统设计相关的许多假设,实现分布式系统的环境和设施的假设: 节点具有什么功能以及它们如何失败 通信连接如何运行以及它们如何可能失败 整个系统的属性,例如关于时间和顺序的假设 健壮的系统模型做出最弱假设,强有力的假设创建易于推理的系统模型 此模型中的节点 作为计算和存储的主机: 执行程序的能力 能够将数据存储到内存和稳定持久状态的能力 时钟 节点执行确定性算法 故障模型:崩溃恢复而非拜占庭容错(任意错误) 此模型中的通信连接 通信连接将各个节点相互连接,并任一方向发送消息 网络不可靠,消息易延迟丢失 网络分区:网络断开但节点存活 时间和顺序的假设 信息最多以光速传播 如果距离不同,节点间消息的到达时间、顺序可能不同 同步系统模型 进程以锁定步骤执行;消息传输延迟有已知上限;每个进程都有准确的时钟 异步系统模型 没有时间假设,进程以独立的速率执行;消息传输延迟没有限制;有用的时钟不存在 共识问题 多个节点都同意一些值时达成共识 一致:每个正确节点都同意相同的值 完整:每个正确的进程最多只能决定一个值,如果决定某个值,那么一定是某些进程提议的 终止:所有进程最终达成决定 有效:如果所有正确进程提议相同的值 V,那么所有正确进程决定值 V 两种不可能的结果 FLP 不可能 假定节点只能因崩溃而失效;网络可靠,并且异步系统模型的典型时序假设成立:例如,消息延迟没有限制, 在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法 CAP 定理 三个属性: (强)一致性:所有节点同时看到相同的数据 可用性:节点故障不会阻止幸存者继续运行 分区容错:网络或节点故障导致消息丢失时,系统仍可继续运行 同时具备这三种属性的系统无法实现: 三种不同的系统类型: CA(一致性+可用性):完全严格的仲裁协议,例如两阶段提交 CP(一致性+分区容错):多数仲裁协议,其中少数分区不可用,例如Paxos AP(可用性+分区容错):使用冲突解决方案的协议,例如Dynamo 一致性模型:程序员与系统之间的合同,其中系统保证,如果程序员遵循某些特定规则,则对数据存储区的操作结果将是可预测的 强一致性模型(能够维护单个副本) Linearizable consistency (可线性化一致性) Sequential consistency (顺序一致性) 弱一致性 Client-centric consistency models (客户端为中心一致性) Causal consistency: strongest model available (因果一致性) Eventual consistency models (最终一致性) 线性化一致性要求操作生效的顺序等于操作的实际实时顺序,顺序一致性允许对操作进行重新排序,只要在每个节点上观察到的顺序保持一致

2020年9月15日 · zhoukuncheng

Distributed Systems for Fun and Profit 笔记 (一)

0. 前言 “Distributed Systems for Fun and Profit” 是 mixu 2013 年在 网络上 免费发布的一本介绍分布式系统的小册子。 分布式的两种结果: 信息以光速传播 独立节点独自失败 分布式系统处理距离和多个节点的问题 1. 从高层次角度看分布式系统 计算机的基本任务 存储 计算 分布式编程就是用多机解决在单机上的相同问题,通常此问题单机已经不能满足要求。 小规模时,单个节点上升级硬件可以解决问题,但随着问题规模增大,单节点升级硬件无法解决或者成本过高时就需要分布式系统。当前最值得的是中档的商业硬件,通过容错软件降低成本。 增加新机器不会像理想情况一样线性增加性能和容量。 本文重点是讨论数据中心上的分布式编程。 实现目标:可扩展性等优点 可扩展性 可扩展性(Scalability):系统、网络或进程有能力处理不断增长的工作量的能力,或者为了适应这种增长而进行扩展的能力 大小可扩展 地理可扩展 管理可扩展 性能与延迟 性能(Performance):参照资源和时间,系统完成的有效工作量 延迟(Latency):重要是的新数据在系统中出现的时间,分布式系统中受制于光速和硬盘速度等 可用性(容错) 可用性(Availability):系统处于正常运行状态的时间比例, Availability = uptime / (uptime + downtime) 分布式系统可以通过冗余实现容忍部分故障 容错(Fault tolerance):故障发生后系统以明确定义的方式运行的能力 制约 分布式系统受两个物理因素的约束: 节点数(随所需的存储和计算能力而增加) 节点之间的距离(信息最多以光速传播) 性能和可用性由外部定义,通常表述为SLA(服务级别协议) 抽象和模型 抽象使事情变得更易于管理,模型精确描述分布式系统的关键特性。 如: 系统模型(异步/同步) 失败模型(崩溃失败,分区,拜占庭) 一致性模型(强一致,最终一致) 设计技巧:分区和复制 分区(Partition) 将大数据集划分为小的独立集 分区通过限制要检查的数据量并在同一分区中定位相关数据来提高性能 分区通过允许分区独立发生故障来提高可用性 复制(Replication) 在多机上复制相同的数据,是对抗延迟的主要办法 通过增加新数据副本上的计算能力和带宽来提高性能 通过创建数据的其他副本来提高可用性 复制需要遵循一致性模型

2020年9月11日 · zhoukuncheng