如何设计分布式系统

如何设计分布式系统

目录

一、分布式系统

1.1 简介

1.2 特征

二、设计目标以及事项

2.1 设计目标

2.1.1 CAP理论

2.1.2 BASE理论

2.2 设计事项

2.2.1 通信模型

2.2.2 数据一致性

2.2.3 负载均衡

2.2.4 容错处理

2.2.5 安全性

2.2.6 扩展性

一、分布式系统

1.1 简介

多个计算机节点 -> 通过网络连接 -> 协同工作

1.2 特征

可扩展性、可靠性和性能好,大规模数据处理、高并发访问、

二、设计目标以及事项

2.1 设计目标

2.1.1 CAP理论

CAP理论的核心思想是,一个分布式系统最多只能同时满足上述三个特性中的两个,而无法同时满足所有三个特性。在设计分布式系统时要根据实际情况进行权衡和取舍

一致性(Consistency): 在分布式系统中的所有数据备份,「在同一时刻是否拥有同样的值」。(等同于所有节点访问同一份最新的数据副本)可用性(Availability): 在集群中一部分节点「故障」后,集群整体「是否还能响应」客户端的读写请求。(对数据更新具备高可用性)分区容错性(Partition tolerance): 即使出现「单个组件无法可用,操作依然可以完成」。

例如,当网络分区发生时,节点之间可能无法进行一致性的数据同步,因此在这种情况下,

1)要么保证可用性,允许节点继续处理请求并返回不一致的结果, 2)要么保证一致性,暂停服务直到网络分区恢复。

2.1.2 BASE理论

是用来对CAP定理进行进一步扩充的。BASE理论指的是:

「Basically Available(基本可用)」「Soft state(软状态)」「Eventually consistent(最终一致性)」

BASE理论是对CAP中的一致性和可用性进行权衡的结果,核心思想是:无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

2.2 设计事项

需要考虑以下六方面:通信模型、数据一致性、负载均衡、容错处理、安全性、扩展性

2.2.1 通信模型

指的是节点之间通信和协作的方式和规则。通信模型的选择取决于应用程序的需求和架构。需要考虑多个因素:场景和具体业务逻辑。

RPC远程过程调用:调用远程和本地一样,简单且直接,消息传递模型:通过发送和接收消息进行通信,允许异步方式通信,提高了系统的灵活性和可扩展性

2.2.2 数据一致性

由于多个节点可以同时访问和修改数据,多个节点之间保持数据的正确性和一致性。实现数据一致性通常会导致一些性能上的损失,要进行权衡

2PC(Two-Phase Commit)算法:2PC算法是一种用于在分布式系统中执行事务的算法。在2PC算法中,多个节点通过协调器来达成一致性,确保事务的所有操作要么全部执行,要么全部回滚。

raft算法:一致性分解为多个子问题(如Leader选举、日志同步、安全性等),不断的打补丁,

Paxos算法:目的达成一致性的分布式算法。在Paxos算法中,多个节点通过投票来决定数据的修改或复制。

2.2.3 负载均衡

将请求分配到多个节点上,分摊压力,使系统资源的均衡利用和提高系统的可用性、可扩展性和性能。选择一个合适的负载均衡算法或策略

硬件负载均衡:通过专用的负载均衡设备(如负载均衡器)来分配请求,成本较高。软件负载均衡:通过软件来实现负载均衡。成本较低,但性能和可靠性可能会受到影响。DNS负载均衡:通过DNS服务器来分配请求。根据请求的来源地理位置或负载情况来选择相应的节点。

2.2.4 容错处理

多种手段来保证系统的可靠性和稳定性,以应对节点故障、网络故障、硬件故障等各种意外情况。

备份:将数据、服务或节点复制到多个地方,当一个节点或服务出现故障时,可以从备份节点或服务中恢复。心跳检测:通过定期向节点发送心跳包,来检测节点的状态和可用性。当节点不再响应心跳包时,可以判断节点已经故障,并采取相应的措施。选举算法:在分布式系统中,常常需要选择一个主节点或领导者来协调节点之间的操作。选举算法可以确保当主节点或领导者出现故障时,能够自动选举出新的主节点或领导者。消息确认机制:在分布式系统中,消息传递是常见的通信方式。消息确认机制可以确保消息的可靠传递,当消息未被正确确认时,可以采取相应的措施。分布式锁:当多个节点需要竞争共享资源时,分布式锁可以确保只有一个节点能够访问该资源,从而避免数据的冲突和错误。

2.2.5 安全性

由于需要在公共网络上传输并处理数据,保障系统和数据的保密性、完整性、可用性和认证性的能力,需要定期评估和更新安全策略。

认证和授权:认证是指确定用户或进程的身份,授权是是否有权限访问资源或执行操作。以确保只有授权的用户或进程能够访问资源和执行操作。加密和解密:保护数据,防止数据被其他无关用户访问。安全传输协议:使用安全传输协议确保在网络上传输的数据是加密的。防火墙和入侵检测系统:防火墙可以限制网络上的流量和连接,保护系统免受网络攻击。入侵检测系统可以监测系统中的异常行为和攻击,以及及时采取相应的措施。

2.2.6 扩展性

增加节点或增加节点的资源来扩展系统的容量和性能,通常需要处理大量的数据和请求,需要具备可扩展性来应对不断增长的负载。扩展性不仅仅是增加节点或资源,还需要考虑设计和实现是否合理。

横向扩展:横向扩展是指通过增加节点来扩展系统的容量和性能。横向扩展可以通过添加新的节点来分担负载,从而提高系统的容量和性能。纵向扩展:纵向扩展是指通过增加单个节点的资源(如CPU、内存、存储等)来扩展系统的容量和性能。纵向扩展可以通过增加节点的硬件规格来提高节点的处理能力,从而提高系统的性能。负载均衡:负载均衡可以通过将请求分配到多个节点上来实现系统资源的均衡利用和提高系统的性能。负载均衡可以避免单个节点负载过重,从而提高系统的可用性和性能。数据分片:将数据分散到多个节点上,数据的分布式存储和查询,来扩展存储容量和提升查询性能。异步处理:将请求分发到多个节点上并异步处理,提高并发。可以避免单个节点因为处理请求而被阻塞。

参考文献:

【系统架构】分布式系统架构设计_分布式系统设计-CSDN博客

相关推荐