分布式原则
分布式的定义
分布式就是利用软件,通过线性扩展的方式解决单一计算节点上的计算能力(CPU)和存储能力(磁盘)无法从硬件上无限突破的瓶颈。解决CPU的问题就是分布式计算,解决磁盘的问题就是分布式存储。
分布式计算
分布式计算的目的就是提升参与计算的节点个数以提高计算能力。同一类的任务由超过一个CPU完成的系统都算是分布式。计算节点并不一定是一台独立的计算机,它可以是线程、进程、机器、集群等,分布式应用也不一定必须是多机应用,多进程、多线程一样是分布式。
分布式存储
分布式存储是在维持单位存储容量的成本不变的前提下,提升参与存储的节点数以提升存储容量和存储访问能力。
- 分布式与集群
- 分布式:一个业务分拆多个子业务,部署在不同的服务器上;分布式是以缩短单个任务(原始任务)的执行时间来提升效率的
- 集群:同一个业务,部署在多个服务器上。而集群则是通过提高单位时间内执行的任务数来提升效率。
分布式系统
- 分布式系统定义 分布式系统是一个硬件或软件分布在网络计算机上,通过消息传递进行通信和动作协调的系统。
- 分布式系统特点
- 并发性
- 程序并发、资源共享、线性扩展
- 缺乏全局时钟
- 时间、全局状态、一致性状态
- 故障独立性
- 故障隔离、故障感知
- 并发性
分布式系统挑战
- 异构性
- 开放性
- 主要接口对外发布
- 一致的通讯机制
- 可以采用不同的供应商的异构软硬件产品
- 安全性
- 类型
- 机密性,防止泄露给未授权的人
- 完整性,防止改变和讹误
- 可用性,防止对访问资源的干扰
- 挑战
- 拒绝服务攻击
- 移动代码安全
- 类型
可伸缩性
- 如果用户梳理和资源梳理激增,系统仍能保持有效,则此系统具备伸缩性
- 伸缩性的边界,当前支撑用户量为n的系统
- 物理资源应成正比扩展,上线是O(n)
- 性能损失下线是O(log n),数据量增加会导致一些性能丢失,最大丢失值不应比O(log n)差。
- 避免性能瓶颈
故障处理
- 容错
- 冗余
- 故障恢复
- 并发性
- 透明性:对用户和应用程序屏蔽分布式组件的分散性,系统被认为是一个整体,而不是独立组件的集合。[ANSA 1989]和ISO的开放分布式处理参考模型(RM-ODP)标识了8种透明性的分类。其中访问透明性、位置透明性最重要
- 访问透明性,用相同的操作访问本地和远程资源
- 位置透明性,不需要知道资源的位置就可以访问到
- 并发透明性,进程并发对共享资源进行操作而互不干扰
- 复制透明性,用户和应用对被访问资源的副本数无需关心,底层资源可以任意增减副本
- 故障透明性,屏蔽错误,不论软件还是硬件故障,运行用户或应用完成他们的任务
- 移动透明性,资源在系统内部迁移不影响用户和应用的感知
- 性能透明性,负载变化后系统能提升性能
- 伸缩透明性,系统架构不变,系统和应用可以扩展
分布式需求
- 本质需求,构造和使用分布式系统的本质动力是对资源共享的需求。
- 现实需求
- Data Scalability: 单台机器的容量不足以(经济的) 承载所有资料,所以需要分散。如: NoSQL
- Computing Scalability: 单台机器的运算能力不足以(经济的) 及时完成运算,所以需 要分散。如:科学运算。
CAP原理
CAP定义
- C: Consistency 一致性,服务原子操作,多点数据一致。
- A: Availability 可用性,每个请求都要被执行,有返回信息。
P: Tolerance of network Partition 分区容忍性(分布式),系统可以水平切分扩展
CAP理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。 对大型分布式系统,可用性(A)与分区容忍性(P)优先级要高于数据一致性,应尽量朝着 A、P 的方向设计,然后通过其它手段保证对于一致性需求。
最终一致性
一致性问题有2个视角,客户端视角和服务端视角。客户端视角,要求数据访问如何保障一致性;客户端观察到的一致性指的是,何时以及如何能观察到对存储系统中数据对象所做的更新。服务端视角,关注数据如何在多节点实现一致性。
- 一致性的分类
- 强一致性:所有节点数据必须同时一致,A节点写入数据,其他节点也写入更新。
- 弱一致性:A节点写入数据,其他节点不能获得A节点写入的数据,而保持写入前的数据。A节点和其他节点数据不一致的这一段时间,为“不一致性窗口”。
- 最终一致性:若一致性的特例;