分布式系统架构第一原则就是不分布式。
分布式系统的两个关键目标:
- 性能
- 容错性
场景业务不一样,容错性策略也不一样。
设计思路:
-
中心化
- 思想:
分布式集群中节点机器按角色分工,基本上分两种角色:“领导” 和 “干活的”。“领导” 通常负责分派任务并监督“干活的”。 - 问题
- “领导”的单点问题
主备两个“领导”的设计方案,可以是热备或冷备,可以是自动切换或手动切换。 - “领导”的能力问题
- “领导”的单点问题
- 思想:
-
去中心化
- 思想
各节点机器地位平等,不存在角色的分工。 - 问题
脑裂问题。脑裂指单个集群由于网络的故障,被分为至少两个彼此无法通信的单独集群。如果两个集群都单独各自工作,会存在数据冲突或错误。
遇到脑裂问题一般的解决思路是让较小的集群拒绝服务或“自杀”。
完全存在去中心化的架构是很少的,相反,外部看来去中心化但工作机制采用了中心化设计思想的分布式系统正在不断涌出。不需要人为指定机器节点的角色,而是由它们自动通过算法选举出“领导”。如 Zookeeper。
- 思想
一致性问题
N 个节点组成一个分布式集群,要保证所有节点可以执行相同的命令序列,并达到一致的状态。即在所有节点执行了相同的命令序列后,每个节点上的结果都完全相同。实际上,由于分布式系统的不可靠性,通常只要保证集群中超过半数的节点( N/2+1 )正常并达到一致性即可满足要求.这是最终一致性,并不是强一致性。
CAP 理论:
Consistency(一致性)、Available(可用性)和 Partition-tolerance(分区容错性)这三者不能同时都被满足,最多只能满足其中两种。
分区容错性是网络相关的一个属性,常见的几种区分:
- 网络被分区,形成“脑裂”
- 服务器发生网络或死机,导致与其他机器失去联系
它仅适用于原子读写的 NoSQL 场景中,井不适合数据库事务。
BASE 理论
Basically Available(基本可用),Soft-state(软状态),Eventually consistency(最终一致性)。
什么是 soft-state?
Server 承诺会维护 Client 的状态数据,但是仅仅维持一小段时间,过了这个时间段,Server 就会将这些状态信息丢弃,恢复正常行为状态。
针对数据库领域, BASE 思想的主要实现是对业务数据进行拆分,让不同的数据分布在不同的机器上,以提升系统的可用性。常见两种思路是:
- 按功能划分数据库
- 分片