[toc]

什么是分布式系统

为了完成共同的任务,通过某种通信方式(一般是网络)使用多个计算机节点。这个由多个计算节点组成的系统就是分布式系统。通俗来说就是使用更多机器来处理问题,其实我们的互联网就是一个分布式系统。

为什么要使用分布式系统

单节点计算、存储能力弱,硬件提升性价比低,应用消耗资源过于高时;要实现高可用、高并发时;可以无限的横向扩展

如何实现分布式

简单来说就是对任务分而治之(贯穿整个计算机上下的底层思想,而且来源于生活),即是分片(partition),把不同分片交给不同节点处理即可,在未来保证可用性与并发性时,我们将分片冗余处理(一个分片交给多个节点处理)

CAP定理

定理指的是一个经过逻辑证明的猜想;2000年布鲁尔提出此猜想2002年MIT的大佬给出证明

描述

CAP定理指出一个分布式系统不能同时满足一下三点

  • 一致性(Consistency)所有节点访问同一份最新的数据副本
  • 可用性(Availability)每次请求都能获取到非错的响应
  • 分区容错性(Partition tolerance)一个分布式系统中出现故障导致分裂成多个计算节点(区);这些区应能使系统正常运行,一般来说P应该一定要满足的,弱不满足那么就违背了分布式系统初衷

策略

CAP只能三选二,那么我们就有三种策略,我们看一下有哪些情况会用到

CA:放弃P,会导致分布式节点无法进行扩展,传统的关系型数据库就是如此,一般P是必选项

CP:牺牲用户体验,常见分布式数据库以及银行系统就是

AP:牺牲一致性,淘宝、12306等就是

BASE理论

为平衡CAP提出,包含

基本可用(Basically Available): 在出现故障时,允许部分可用性(基础可用)

软状态(Soft State):允许出现中间状态,不同节点之间数据不一致

最终一致性(Eventual Consistency):软状态不可持续,在有限期限后应能保证数据的最终一致

一致性算法

后续文章会详细介绍这些算法

强一致性算法

Paxos:我最喜欢的图灵奖获得者Leslie Lamport于90年提出,几乎所有强一致性算法鼻祖,后续文章会详细介绍

Raft(Paxos变种):etcd使用

ZAB(Paxos变种):ZooKeeper使用

最终一致性算法

DNS系统:域名解析,超过TTL逐步向上询问

Gossip算法:逆熵算法,Cassandra中使用

不要做那些假设

还记得我们前几天发的极客法则吗,不要做以下假设,在实际生产上会遇到不同问题需要实际处理

  • 网络可靠
  • 延迟为零
  • 带宽无限
  • 网络安全
  • 拓扑恒定
  • 单一管理员
  • 运输成本为零
  • 网络为同构的