当单体应用的性能不能满足逐渐增长的业务需求时,就出现了分布式系统。接下来的文章中就让我们看下分布式系统的相关概念。

什么是分布式系统_数据库

什么是分布式系统

看了很多文章,感觉很少有文章能把这个概念解释的既简单,又清楚的。结合这自己的理解,我对分布式系统的概念做了下面的总结。

关于分布式系统的定义问题,我倾向从字面上来解释:分开部署的系统就可以称为分布式系统。

比如,一个系统原本由前端页面、后台服务和后端数据库组成,将这些服务全都部署在一台机器上,这种应用叫单体应用。现在我们将数据库拿出来,单独部署到另外一台机器上,后端服务和数据库之间通过网络通信,这种部署方式就是一种最简单的分布式系统。

再比如说,原本有一个后端服务,能支持500QPS的并发请求。现在业务量上升,需要能支持1000QPS的并发量。此时你有两个方案。第一种就是增加系统的硬件性能,进行垂直扩展,此时系统还是单体应用;第二种方案就是再部署另外一台机器,同样也支持500QPS,这样总体就能达到1000QPS的性能需求了。方案二的系统也是一种分布式系统,将本来可以部署一台机器的应用原样复制一份到另外的机器上再部署一份。方案二中,部署的多台应用被也被称为一个集群,可以说集群是分布式系统的一种。

再比如说,原本有一个系统中包含订单服务、产品服务和支付等服务。现在随着业务的不断复杂化,将订单服务、产品服务和支付服务单独分拆出来形成订单系统、产品系统和支付系统,交由专人负责。这种系统将原本的单体应用分拆成多个系统部署到不同的机器上,也是分布式系统,而且我们平时开发中所指的分布式系统大多是指这种系统。其实稍微有点分布式系统知识的同学可以看出来,这种系统就是最简单的微服务系统。所以微服务也是分布式系统的一种。

分布式系统的优势

单体应用的优势在于它的简单,但是其劣势也相当明显。一个就是容易出现单点故障,还有一个就是容易达到性能瓶颈。分布式系统很大程度上就是为了解决单体应用上面的问题而出现的。

分布式系统将一些廉价的 PC 机通过网络连接起来,共同完成工作,并且在系统中提供冗余来解决高可用的问题。分布式系统通过廉价的 PC 机减轻了企业购买大型机的高昂费用,通过系统冗余又解决了HA的问题。

虽然分布式系统通过多工作节点解决了单体应用面临的高成本和可用性问题,但是它引入了对分布式系统内部工作节点的协调问题。

分布式系统的挑战

分布式系统的核心就是解决一个问题:对分布式系统内部工作节点的协调问题。

看似简单的问题会因网络丢包、节点宕机恢复等场景变得异常复杂。由此才衍生出很多概念、协议和理论。为探究共识问题最大能解决的程度,于是有了CAP边界理论;为在特定条件和范围内解决该问题,于是有一致性协议Paxos、Raft、Zab和Viewstamped Replication;为构建这些协议,于是有多数派、Leader选举、租约、逻辑时钟等概念和方法。

又因为分布式系统分开部署的特点,在具体实施开发过程中,我们又要解决

  • 分布式事务问题;
  • session共享问题;
  • 分布式锁问题;
  • 全局时钟问题;

还有一些列其他问题。虽然分布式系统解决了单体系统的单点故障和性能瓶颈问题,但同时也带来了一系列“弊端”。但是技术就是这样,没有一个技术是完美的。我一直有个观点就是:假如在一个领域中出现了一个完美的解决方案,那么在这个领域,人就不再有价值。分布式系统的复杂性给我们带来了更多学习的空间,让善于学习的程序员有更多发挥自身价值的机会。


人生的主旋律其实是苦难,快乐才是稀缺资源。在困难中寻找快乐,才显得珍贵~