哈喽大家好,我是咸鱼
我们知道,随着企业规模或者说业务规模的不断扩大,为了应对不断增长的业务需求和提高系统的可伸缩性、可靠性和性能,计算机系统由一开始的单体系统逐渐发展成分布式系统
那么今天咸鱼给大家介绍一些关于小白在学习分布式系统遇到的一些常见误解
在分布式系统中,任何特定的网络通信都是不可靠的,都可能会失败
比如说服务 A 与服务 B 进行通信,由于网络不稳定,导致它们之间的数据交换有丢失
这时候,我们就需要为系统提供一些解决方法来尽可能地保证服务 A 与服务 B 之间交换的数据不丢失
其中就包括重传机制,当网络通信出现问题时,可以通过重试机制来重新发送数据,直到数据被成功接收。重试机制可以提高数据传输的可靠性,但也会增加网络通信的负担
还有一种比较常见的解决方案就是存储和转发模式——数据并没有直接发送给下游服务器,而是将其存储在处在上下游之间的中间服务器上,下游服务器再去中间服务器上面取
看到这里,是不是觉得这个方案很熟悉
没错,它就是消息队列
在分布式系统中,可以采用消息队列来解决网络通信不可靠导致数据丢失的问题。消息队列可以将数据存储在队列中,等待接收方处理,以保证数据的可靠性
在分布式系统中,服务与服务之间有可能不仅仅是逻辑上的分布,还有可能是地理位置上的分布
那么就会出现服务与服务之间的通信有延迟,而且这种延迟是无法避免的,延迟可以说是任何网络请求的必须开销
通信延迟的主要原因包括数据传输的物理距离、网络拥塞、传输介质的带宽和传输协议等。由于光传播速度的限制,跨越较长距离的数据传输会导致一定的传输延迟
举个例子,假设一个电子商务平台的分布式架构包括前端应用服务器、商品服务和用户服务,它们分别部署在美国和中国两个地区的数据中心
当用户在中国访问该电商平台时,其请求需要经过国际互联网进行跨洲传输,可能会导致通信延迟增加。这种延迟会对用户体验产生影响,例如网页加载速度变慢或交互响应时间延长
现在比较常见的解决方案就是——内容分发网络(Content delivery networks, CDN)
没有绝对安全的网络
在分布式系统中,网络存在不安全的情况是一个重要的问题。由于分布式系统的核心特点是通过网络进行通信和数据传输,网络的不安全性可能导致以下问题:
为了应对分布式系统中网络不安全的情况,可以采取以下安全措施:
分布式系统的架构通常是动态的,不是固定的
在分布式系统中,节点可以随时加入或退出,并且节点之间的连接关系可以发生变化
这样的好处是什么呢?
分布式系统的一个主要优势是能够根据需求进行弹性扩展。当系统负载增加时,可以通过添加更多的节点来分担负载
这种扩展可以是垂直的(增加节点的资源容量)或水平的(增加节点的数量),并且可以根据需要进行动态调整。这种灵活性使得系统能够适应变化的负载需求
在分布式系统中,即使某个节点发生故障或断开连接,系统仍然能够继续运行(避免了单点故障)
其他节点可以接管故障节点的工作,并保持系统的可用性和稳定性。这种容错性使得分布式系统更加健壮和可靠
为了提高系统的性能和可靠性,分布式系统通常会在不同的节点之间复制和存储数据的副本
副本(Replica)是分布式系统最常见的概念之一。当某一个节点上存储的数据丢失时,可以从副本上读取该数据以此来解决数据丢失的问题
虽然分布式系统提供了节点之间的通信和数据交换能力,但实际上,这种信息传输是需要消耗资源和产生成本的
节点之间的信息传输需要利用网络带宽进行数据传输
带宽是有限的资源,因此在分布式系统中进行大量的数据传输会占用网络带宽,从而导致其他数据传输速度的下降或延迟
信息在分布式系统中传输需要经过网络,而网络延迟是不可避免的
这包括了传输时间、传播时间以及在路由器和网络设备上的处理时间等
分布式系统中,节点之间的信息传输可能会受到网络延迟的影响,特别是当节点之间的地理位置较远时,通信延迟可能更高
在分布式系统中,确保信息传输的安全性是至关重要的
为了保护数据的隐私和完整性,可能需要采取加密、认证和访问控制等安全措施,这也会增加信息传输的成本和复杂性