分布式基础理论
分布式系统特点:
并发性
共享资源,采取ACID或Base原则,见:CAP定理。分布式系统设计遵循CAP定理, CAP是:Consistency(一致性), Availability(可用性), 和 Partition tolerance(分区容错性) 可靠性 简称,CAP定理认为,CAP三种之中,只能同时满足其中两种。
可扩展性Scalable是重要特点,
通过扩展能够获得高性能 高吞吐量 低延迟Latency。
可靠性/可用性
故障发现和处理以及恢复 容错处理。在一个正常运作系统中存在一个时间比例的条件。 如果一个用户不能访问系统比例增大,它被认为是不可用。可用性公式: Availability = uptime / (uptime + downtime) 容错failover是指一个系统在错误发生的情况下,仍然一切运行正常。表示这个系统是宽容错误的。
消息处理
具体产品有:RabbitMQ ZeroMQ Netty等等。
异构性
不同操作系统 硬件 程序语言 开发者,中间件是一种解决方案。
安全性
授权认证 SSO单点登录 Oauth等等。
定位命令:
- 标识资源 URLs
- 命名服务Naming services
- 定位寻找Lookup
- 主要见SOA中的服务查找。如Zookeeper实现服务查找。
透明性
- 访问透明度: 使用相同的操作本地和远程资源
- 位置透明:访问资源无需知道其物理或网络位置
- 并发透明度:多个进程可以同时运行访问使用共享资源,当不能干扰堵塞 它们的处理进程
- 复制透明性: 资源的多个实例可以被用来复制以提高可靠性和性能,但无需由用户编制专门的应用程序来实现。
- 故障透明度:出现软件硬件故障时,使用户和应用方案能继续完成他们的任务不受影响。
- 移动透明度:允许在系统存在移动的资源和客户。
- 性能透明度:允许系统重新配置以 提高性能负荷变化
- 缩放透明度:在应用程序结构没有变化的情况下能够在规模上扩展或伸缩系统,以提高吞吐量处理能力。
cap理论
定理:任何分布式架构都只能同时满足两点,无法三者兼顾。
- Consistency(一致性),数据一致更新,所有的数据变动都是同步的。
- 对某个指定的客户端来说,读操作能返回最新的写操作。对于数据分布在不同节点上的数据上来说,如果在某个节点更新了数据,那么在其他节点如果都能读取到这个最新的数据,那么就称为强一致,如果有某个节点没有读取到,那就是分布式不一致。
- Availability(可用性),好的响应性能。
- 非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。可用性的两个关键一个是合理的时间,一个是合理的响应。合理的时间指的是请求不能无限被阻塞,应该在合理的时间给出返回。合理的响应指的是系统应该明确返回结果并且结果是正确的,这里的正确指的是比如应该返回50,而不是返回40。
- Partition tolerance(分区容忍性),可靠性,机器宕机是否影响使用。
- 当出现网络分区后,系统能够继续工作。打个比方,这里个集群有多台机器,有台机器网络出现了问题,但是这个集群仍然可以正常工作。
选择 | 说明 |
---|---|
CA | 放弃分区容错性,保证一致性和可用性,其实就是传统的单机数据库的选择。 |
AP | 放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多 NoSQL 系统就是如此。 |
CP | 放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用。 |
base理论
BASE理论是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。BASE理论是对CAP理论中的一致性和可用性权衡的结果,通过对互联网系统分布式实践的总结,其核心思想是在分布式系统中,即使无法做到强一致,但每个服务可以结合自身的业务特点,采用适合自己的方式使系统达到最终一致性。BASE理论中的三要素描述如下:
1、基本可用(Basically Available)
基本可用是指分布式系统在出现故障后,允许部分可用性损失,即是保证核心服务或链路是可用的。 比如:电商大促,当出现访问量陡增,为了保证系统的可用性,部分商户可能被引导到降级页面,保证大部分商家的一个可用性。
2、软状态 (Soft state)
软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体。比如电商网站上看到的商品剩余数量,评论数据,点赞数等;
3、最终一致性(Eventually consistent)
最终一致性强调的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。
总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物 ACID 特性是相反的,它完全不同于 ACID 的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但是在分布式系统的场景中,不同的业务单元对数据的一致性要求是不同的,因此在架构设计中,ACID与BASE理论往往是结合一起考虑的。
paxos协议
它允许一组不一定可靠的处理器(服务器)在某些条件得到满足情况下就能达成确定的安全的共识,如果条件不能满足也确保这组处理器(服务器)保持一致。
实现
集群有leader节点和follow节点组成,所有的事务操作必须有leader发起,如果请求在follow节点则转发到leader节点。leader对于所有的事务操作,会发起事务提议,必须半数以上节点同意,此事务才能提交,保证数据一致性。不满足条件,事务会被丢弃。
zab协议
zab协议其实是zookeeper根据paxos的自行实现,大同小异。
raft协议
Paxos和Raft都是为了实现Consensus一致性这个目标,这个过程如同选举一样,参选者需要说服大多数选民(服务器)投票给他,一旦选定后就跟随其操作。Paxos和Raft的区别在于选举的具体过程不同。
在Raft中,任何时候一个服务器可以扮演下面角色之一:
- Leader: 处理所有客户端交互,日志复制等,一般一次只有一个Leader.
- Follower: 类似选民,完全被动
- Candidate候选人: 类似Proposer律师,可以被选为一个新的领导人。
Gossip协议
《大型网站系统与Java中间件实践》《分布式服务框架原理与实践》,