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