三分钟入门分布式系统
什么是分布式系统
为了完成共同的任务,通过某种通信方式(一般是网络)使用多个计算机节点。这个由多个计算节点组成的系统就是分布式系统。通俗来说就是使用更多机器来处理问题,其实我们的互联网就是一个分布式系统。
为什么要使用分布式系统
单节点计算、存储能力弱,硬件提升性价比低,应用消耗资源过于高时;要实现高可用、高并发时;可以无限的横向扩展
如何实现分布式
简单来说就是对任务分而治之(贯穿整个计算机上下的底层思想,而且来源于生活),即是分片(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中使用
不要做那些假设
还记得我们前几天发的极客法则吗,不要做以下假设,在实际生产上会遇到不同问题需要实际处理
- 网络可靠
- 延迟为零
- 带宽无限
- 网络安全
- 拓扑恒定
- 单一管理员
- 运输成本为零
网络为同构的