分布式的理解,有哪些优缺点

分布式系统解决了什么问题?

分布式系统的搭建并不简单,要涉及理论、实践、工程等领域的众多知识。然而,它仍然得到了极为广泛的应用,是因为它有着下面的优势。

降低应用成本

能够降低应用的实施成本是分布式系统产生和发展的最初动力。

对于单体应用而言,当应用负担的功能、承载的并发量和数据量逐渐提升时,应用对硬件的要求也逐步提高。这时只能升级应用的硬件设施,采用运算能力、存储能力、IO能力更高的计算机,这类计算机通常被称为大型机。然而,大型机的购买和维护费用十分高昂。

分布式系统的出现使得单体应用可以被拆分为小应用部署到小型服务器集群上,以此来实现高并发、大数据、多功能。这大大降低了应用的实施成本。

增强应用可用性

单体应用存在单点故障风险。应用节点运行出现异常意味着整个应用不可用。而分布式系统则避免了这一问题。

分布式系统在工作时由众多节点共同对外提供服务,其中的一个节点出现故障后,其请求会被其他节点分摊。同时,应用可以在运行过程中根据负载情况动态增删节点,极大地提升了应用的可用性。

提升应用性能

单体应用所能承载的容量、并发数是有限的,当数据量过大时则会产生性能瓶颈。分布式系统可以通过众多节点来分担容量压力和并发压力,有利于提升了整个应用的性能。

降低了开发与维护难度

单体应用中糅合了众多功能模块,这些功能模块互相调用,交织耦合在一起,共同组成了一个庞大复杂的整体。任何一个功能模块的升级改造都可能会对其他模块造成影响。这增加了开发和维护的难度。

在分布式系统中,所有的功能模块都分离开来作为独立的应用节点存在,实现了模块化。这降低了功能模块之间的耦合,只要我们维持应用节点的原有对外接口不变,便可以安全地增加新接口或者优化内部实现。

模块化的实现也增加了模块复用的可能性。并且,各个模块可以采用并行的方式进行开发,提升了开发的效率。

在升级部署时,单体应用需要对整个应用进行重新发布,而分布式系统则只需要重新发布发生变化的模块化应用,降低了升级部署失败的风险,提升了应用升级部署的速度。

分布式系统的问题

当然,实施分布式系统也要面临很多的问题。下面是一些非常典型的问题。

一致性问题

分布式一致性问题是分布式系统面临的最为突出的问题。

在单体应用中,应用本身只有一个节点,外部的任何变更请求都由该节点直接处理,并在接下来向外给出最新的结果。

在分布式系统中,应用包括多个节点。外部的变更请求会落到应用的任意一个节点上,随后,外部的读取请求可能会落到其他的节点上。这样,外部可能读取到一个变更前的结果。即出现了读写不一致。

为了避免读写不一致,分布式系统需要及时地将一个节点上的变更反映到所有节点上,即实现分布式系统的一致性。然而实现分布式系统的一致性是一个涉及理论、实践的十分复杂的过程,稍有不慎便会对应用的性能造成影响。

节点发现问题

单体应用只有一个节点,这个节点的地址便是整个应用对外提供的服务地址。因此,提供服务的地址是静态的。

分布式系统包含众多节点,每一个节点都可以对外提供服务。而且应用集群中会发生节点的增删,这导致能够提供服务的节点是一个动态变化的集合。这使得我们需要设计一种机制来帮助调用方发现分布式系统中的可用节点,即解决节点发现问题。

节点调用问题

单体应用内部存在模块间的调用,这种调用发生在应用内,是高频的,但同时也是低成本的、高效的。

应用之间也会存在调用,常基于接口实现。这种调用是相对低频的,同时也是高成本的、低效的。

分布式系统内部的节点之间也会存在调用。这种调用由单体应用的模块间调用演化而来,其调用频率是相对较高的。但是,他们之间的调用已经无法通过应用的内部调用来实现,基于接口的调用则成本太高、效率太低。这时需要一种能够跨节点的、相对低成本和高效的方式来解决节点间的调用问题,这个问题如下图所示。

节点协作问题

单体应用的所有资源均由单一节点调用,不需要协作。但在分布式系统中,情况变得复杂起来。

例如,在一个同质节点组成的分布式系统中,一个定时汇总任务只需要应用中的某一个节点执行。但如果不采取特殊的机制进行约束,分布式系统中的各个节点会在指定时间同时执行任务,进而产生多份汇总结果。

异质节点组成的分布式系统中也会面临类似的问题。例如,分布式系统中的部分节点作为生产者,另外部分节点作为消费者。只有两类节点互相协作才能保证应用的生产、消费过程顺利展开。

网络和通信故障

网络的不可靠,消息可能丢失、早到、迟到、Hang住,这给机器间的协调带来了极大的复杂度。像TCP等网络基础协议,能解决部分问题,但更多的需要系统层面自己处理。更不用说,开放式网络上可能存在的消息伪造。

管理复杂度

机器数量到达一定数量级时,如何对他们进行有效监控、收集日志、负载均衡,都是很大挑战。

延迟

网络通信延迟要比机器内通信高出几个数量级,而组件越多、网络跳数越多,延迟便会更高,这些最终都会作用于系统对外服务质量上。

如何让分布式系统中的各个节点进行协作,就是分布式系统面临的节点协作问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值