初识分布式

1.区分集群与分布式

分布式:一个业务分拆多个子业务,部署在不同的服务器上

集群:同一个业务,部署在多个服务器上

总结:“分头做事”与“一堆人”的区别

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

集群是个物理形态,分布式是个工作方式。

集群一般是物理集中、统一管理的,而分布式系统则不强调这一点。

所以,集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。

2.分布式系统

  • 《分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。
  • 分布式系统(distributed system)是建立在网络之上的软件系统。

分布式系统是指由多台计算机或服务器组成的系统,这些计算机通过网络连接,协同工作以完成共同的任务。分布式系统的设计目标通常包括高性能、高可用性、可扩展性和容错性。在分布式系统中,任务被分解成多个子任务,并且由不同的计算机节点并行处理这些子任务。各个节点之间通过消息传递或远程过程调用(RPC)来进行通信和协作。这种分布式的处理方式可以提高系统的处理能力和吞吐量。

分布式系统面临一些挑战,例如节点之间的通信延迟、数据的一致性和可靠性、故障处理等。为了解决这些问题,分布式系统通常采用一致性协议,如Raft、Paxos等,来保证数据的一致性和可靠性。同时,分布式系统也需要考虑负载均衡、故障恢复、容错性等方面的设计。

常见的分布式系统应用包括分布式数据库、分布式文件系统、分布式计算等。例如,Google的分布式文件系统(GFS)和分布式计算框架MapReduce,以及Facebook的分布式数据库Apache Cassandra等。

3.分布式理论

3.1 CAP

CAP 理论可以表述为一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三项中的两项。

3.2 Base

Base 是三个短语的简写,即基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)。Base 理论的核心思想是最终一致性,即使无法做到强一致性(Strong Consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual Consistency)。

4.分布式一致性算法

4.1 一致性Hash算法

一致性哈希算法(Consistent Hashing)是一种用于分布式计算的算法。它的主要目标是在动态增加或删除节点时,最小化数据的重新分布。一致性哈希算法通过使用一个哈希函数将数据和节点映射到一个相同的哈希环上,并根据节点在环上的位置来确定数据应该被分配给哪个节点。

具体来说,一致性哈希算法将哈希环分成固定数量的小区间,每个节点负责其中一个或多个小区间。当有新节点加入时,它会通过哈希函数计算出一个位置,并在环上插入一个新的节点。当有数据需要存储时,也会通过哈希函数计算出一个位置,并顺时针寻找第一个节点,将数据存储在该节点上。当有节点离开时,它负责的小区间会被重新分配给其他节点,但是其他节点和数据的映射关系保持不变。

一致性哈希算法的一个主要优势是在节点的增加或删除时,只需要重新映射受影响的数据,而不需要重新映射整个数据集。这样可以减少数据的重新分布,提高系统的稳定性和性能。

一致性哈希算法在分布式缓存、负载均衡和分布式存储等场景中被广泛应用,它可以确保数据分布的均匀性,提高系统的可扩展性和容错性。

4.2 Paxos算法

4.2.1 简介

​ 一种用于分布式系统中实现一致性的算法。它最初由Leslie Lamport提出,并被广泛应用于分布式计算领域。Paxos算法的主要目标是在一个存在故障的分布式系统中,使得一组节点能够就某个值达成一致意见。该算法可以容忍节点故障、网络延迟和消息丢失等问题。在Paxos算法中,存在三种角色:提议者(Proposer)、接受者(Acceptor)和学习者(Learner)。提议者负责提出一个值,并向接受者发送提议请求。接受者会收到提议请求,并根据一定的规则进行投票。当大多数接受者同意一个提议时,该提议就被接受并达成一致。学习者则负责学习已经达成一致的值。Paxos算法的关键是通过多轮的消息交互来达成一致。在每一轮中,提议者会提出一个编号较大的提议,接受者会对比提议的编号,并根据一定的规则决定是否接受该提议。如果接受者发现有更高编号的提议,则会拒绝较低编号的提议,并返回已经达成一致的值。提议者会

4.2.2 Quorum机制

Quorum机制是一种在分布式系统中用于达成一致性的机制。它可以确保在有限数量的节点故障的情况下,系统仍能保持一致。

在Quorum机制中,每个节点都有一个存储状态的副本,并且节点之间通过消息交互来进行状态更新。为了达到一致性,需要在一定数量的节点上达成一致意见。这个数量被称为Quorum。

在一个拥有N个节点的系统中,Quorum的大小一般是N/2+1。这意味着只有当大多数节点达成一致时,系统才能进行状态更新。例如,在一个有5个节点的系统中,Quorum的大小是3。这样,只有当3个或更多节点达成一致时,系统才会进行状态更新。

Quorum机制的主要特性是容错性和可用性。由于Quorum的大小是根据节点数量确定的,所以只要大多数节点正常运行,系统就能保持一致。即使有少数节点故障或无法通信,系统仍然可以继续运行。这使得Quorum机制能够应对节点故障和网络问题。

另外,Quorum机制还可以提供读写操作的一致性。当进行写操作时,需要在Quorum中的节点上达成一致,以确保状态更新的一致性。而对于读操作,只需要在任意一个节点上读取即可,不需要等待Quorum。这样可以提高系统的可用性和性能,保证了系统的容错性和可用性。

4.3 Raft算法

Raft算法是一种用于分布式一致性的算法,它的设计目标是提供一种易于理解和实现的一致性算法。Raft算法通过将一致性问题分解为几个相对较小且易于理解的组件,来实现一致性。这些组件包括领导选举、日志复制和安全性等。

在Raft算法中,系统中的节点被分为三种角色:领导者、跟随者和候选人。领导者负责接收客户端请求并将其复制到其他节点,跟随者负责接收并复制领导者的日志,候选人用于选举新的领导者。

Raft算法的核心是日志复制。当客户端发送一条请求给领导者时,领导者将该请求追加到自己的日志中,并将其复制到其他节点。一旦多数节点确认了该日志条目,领导者将该日志条目应用到状态机并通知客户端。

领导选举是Raft算法的另一个重要组成部分。如果跟随者长时间没有收到来自领导者的消息,它们将成为候选人并发起选举。候选人将发送选举请求给其他节点,并等待多数节点的投票。如果候选人获得多数选票,它将成为新的领导者,并开始进行日志复制。

Raft算法通过领导者选举和日志复制机制,保证了分布式系统的一致性和可用性。相对于其他一致性算法,如Paxos算法,Raft算法更易于理解和实现,并且具有较好的可读性和可调试性。

4.4 ZAB算法

ZAB(ZooKeeper Atomic Broadcast)算法是一种用于分布式一致性的算法,它是ZooKeeper分布式协调服务中的核心算法。ZooKeeper是一个高性能的分布式协调服务,用于维护和管理分布式系统中的元数据信息。

ZAB算法的设计目标是提供高可用性和一致性。它通过将一致性问题分解为两个阶段来实现:崩溃恢复和消息广播。

崩溃恢复阶段,ZAB算法通过选举一个Leader来处理客户端请求。所有的服务器节点都可以成为Leader候选人,它们会相互竞争,最终选出一个Leader。选举过程中,ZAB算法使用了类似于Paxos算法的机制,通过多数票来决定选举结果。一旦选出Leader,它将负责处理客户端的请求。

消息广播阶段,Leader将客户端请求转化为一个序列化的消息并广播给其他节点。其他节点收到消息后,会将其应用到自己的状态机上。这样,整个集群中的节点就达到了一致的状态。

ZAB算法还具有一些优化措施,例如快速选主和递增的事务ID。快速选主是为了减少选举时间,当Leader宕机时,集群能快速选出新的Leader。递增的事务ID用于保证消息的严格顺序性,这对于一些需要严格顺序处理的应用场景非常重要。

ZAB算法通过崩溃恢复和消息广播两个阶段,实现了分布式系统的一致性和可用性。它在ZooKeeper等分布式协调服务中发挥着重要的作用。

5. 微服务网关

5.1 工作原理

微服务网关的工作原理通常包括以下几个步骤:

  1. 接收请求:微服务网关接收来自客户端的请求。
  2. 路由和负载均衡:微服务网关根据请求的URL路径和其他条件,将请求路由到相应的微服务实例。它可以使用负载均衡算法将请求分发到多个实例。
  3. 认证和授权:微服务网关对请求进行身份验证,并根据访问权限决定是否允许请求进入微服务。它可以使用认证和授权服务来完成这个过程。
  4. 安全防护:微服务网关可以对请求进行一些安全措施,如防止恶意请求的攻击、防止DDoS攻击等。
  5. 缓存和请求聚合:微服务网关可以缓存一些静态资源,减少对后端服务的请求。同时,它还可以聚合多个后端服务的请求,将多个请求合并为一个请求发送给后端服务,减少网络带宽和请求延迟。
  6. 返回响应:微服务网关将后端服务返回的响应返回给客户端

5.2 常见网关

常见的网关系统包括:

  1. Nginx:Nginx是一个高性能的开源Web服务器和反向代理服务器,可以用作网关系统来进行请求路由和负载均衡。

  2. Apache HTTP Server:Apache是一个广泛使用的开源Web服务器,也可以作为网关系统来进行请求的转发和代理。

  3. Kong:Kong是一个基于Nginx的开源API网关和微服务管理平台,提供了丰富的插件和可扩展性。

  4. Tyk:Tyk是一个开源的API网关和管理平台,支持高性能和可扩展的API代理和认证授权功能。

  5. Spring Cloud Gateway:Spring Cloud Gateway是Spring Cloud生态系统中的一个组件,提供了基于Java的网关解决方案,支持动态路由和过滤器等功能。

  6. Istio:Istio是一个开源的服务网格框架,可以提供流量管理、安全性、可观测性等功能,也可以作为网关系统来处理请求。