分布式与集中式

W_法 4月前 ⋅ 580 阅读

        在学习分布式前,首先想到的一个问题就是“是什么促使了分布式的产生”。分布式来源于集中式,却又不同于集中式。注意,这里的分布式和集中式均表示系统或架构。

集中式

       集中式系统是指由一台多台主计算机组成中心节点,数据集中存储于这个中心节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统的所有功能均由其集中处理。https://juejin.im/post/5a5cc9f5f265da3e58595611

       集中式系统存在“中心节点”的概念。集中式系统因“大型机”的出现及发展而成为20世纪60年代到80年代的主流系统架构。

集中式优势

        集中式系统具有如下优势:

      (1)安全、高可靠、一致性。集中式系统的计算、存储都在一套硬件体系内,无需面对网络分区(网络无法连接)问题,能很容易实现高一致性,并通过存储的冗余和软硬件结合的高度优化,实现高可靠性。

     (2)集中式架构部署结构简单,设备数量少,运维复杂度低。(由于大型机结构复杂,其人才培养门槛较高)。

     (3)集中式系统稳定、且发布部署简单。集中式系统一般只需应对百台内规模的代码/配置更新,通过简单的脚本或者平台就可以自动化完成,发布时间一般也能控制在小时级别。而且采用集中式架构的系统一般比较稳定,发布周期也不会太频繁。

     (4)集中式系统发展成熟,技术体系完善。经过几十年的发展,集中式系统无论是硬件、软件、运维、容灾和故障恢复都建立了完备的技术体系。

http://t.cj.sina.com.cn/articles/view/6450971579/1808203bb001004ws9?cre=tianyi&mod=pcpager_fintoutiao&loc=1&r=9&doct=0&rfunc=100&tj=none&tr=9

集中式不足

        但是,伴随着计算机系统的“网络化”和“微型化”,集中式系统渐渐暴露出一些不足:

      (1)大型机造价昂贵,人才培养成功极高。使用基于大型机的集中式系统成本代价过大。通常一台IBM大型机,其售价可达到百万甚至更高。而一台大型主机汇集了大量精密的计算机组件,操作非常复杂,因此一台大型机的人才培养成本非常高。

       而“小型机”、“普通PC”(x86服务器)出现及性能的不断提供提升,极大降低前期投入成本。

      (2)集中式系统存在单点问题,如果集中式系统依赖的大型主机出现故障,将导致整个系统处于不可用的状态,后果相当严重。尽管可以使用“双机热备”、“主从复制”等技术,但这无疑提高了整个系统的成本。

      (3)集中式系统伸缩性较差。伴随互联网的发展,集中式系统为应对访问量的增加,只能升级到更高配置的机器(Scale Up),如升级更强的 CPU,升级多核,升级内存,升级存储等。但单机性能瓶颈不能无限依赖Scale Up。随着业务量的进一步增长,只能通过增加同样架构的服务器(Scale Out)的方式。由于集中式系统使用服务器造价昂贵,所以 Scale Out 的方式成本非常高,无法做到按需扩展。

https://blog.csdn.net/u012785382/article/details/70762240

分布式

        在计算机系统“网络化”、“微型化”背景下,为迎接Web2.0、Web3.0、“大数据”,分布式系统越发体现其价值。简言之,“集中式系统”不能很好的适应新时代的新需要,“分布式系统”则可以很好的应对这些问题

       Distributed Systems Concepts and Design一书对分布式的定义如下:"A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages"。其中文翻译是:“分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。”

https://blog.csdn.net/u012785382/article/details/70762240

       相比集中式系统,分布式系统没有“中心节点”的概念,强调分布在不同位置的机器间的通信及协调操作。

分布式优势

       分布式系统技术优势:

     (1)价格成本低。分布式系统可依赖普通PC服务器构建,随着PC服务器性价比不断提升,分布式系统的搭建成本要远低于集中式系统。

      (2)灵活性高、可扩展性高。分布式系统通过动态调整PC服务器数量,可以很好的应对大请求量,大数据量的互联网应用,以及特定时段的高于日常流量数倍的业务高峰场景。

      (3)可协调的一致性和可用性。根据CAP理论,在P(网络分区)不可避免的前提下,一致性和可用性不可两者兼得。为应对互联网应用的“高可用性”和“高性能”需求,分布系统对“一致性”进一步区分,引入“一致性级别”概念,提供多种粒度的一致性。

     (4)技术日趋成熟。经过十几年的发展,分布式系统已经日渐完善,分布式领域的应用日渐增多。

http://t.cj.sina.com.cn/articles/view/6450971579/1808203bb001004ws9?cre=tianyi&mod=pcpager_fintoutiao&loc=1&r=9&doct=0&rfunc=100&tj=none&tr=9

分布式技术难点

       由于分布式系统将空间随意分布的计算机,通过消息传递来协调行动,所以分布式系统面临的技术要更复杂:

    (1)分布性

     采用何种技术保证空间上任意分布的计算机能够获知彼此的存在。

    (2)对等性

     分布式系统中的计算机没有主/从之分,既没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有节点都是对等的。

    (3)并发性

      在一个计算机网络中,程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储等,如何准确并高效地协调分布式并发操作也成为了分布式系统架构与设计中最大的挑战之一。

    (4)缺乏全局时钟

      一个典型的分布式系统是由一系列空间上随意分布的多个进程组成的,具有明显的分布性,这些进程之间通过交换消息来进行相互通信。因此,在分布式系统中,很难定义两个事件究竟谁先谁后,原因就是因为分布式系统缺乏一个全局的时钟控制序列。

    (5)故障不可避免

      分布式系统基于多台计算机构建,整个系统中计算机故障更高。除非需求指标允许,在设计分布式时必须考虑节点故障。节点故障指的是组成分布式系统的服务器节点出现的宕机或“僵死”现象。

       在整个分布式系统中,如果某个角色或者功能只有某台单机在支撑,那么这个节点称为单点,其发生的故障称为单点故障,也就是通常说的SPoF(Single Point of Failure)。

http://www.cnblogs.com/xrq730/p/4944818.html

     (6)通信异常

      分布式系统需要在各个节点之间进行网络通信,因此网络通信都会伴随着网络不可用的风险或是系统不可用都会导致最终分布式系统无法顺利完成一次网络通信。另外,即使分布式系统各节点之间的网络通信能够正常进行,其延时也会远大于单机操作,会影响消息的收发的过程,因此消息丢失和消息延迟变得非常普遍。

      分布式系统的每一次请求与响应,存在特有的“三态”概念,即成功、失败与超时。当出现超时现象时,网络通信的发起方是无法确定当前请求是否被成功处理的。

     (7)网络分区

     当网络由于发生异常情况,导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式系统的所有节点中,只有部分节点之间能够进行正常通信,而另一些节点则不能——我们将这个现象称为网络分区,就是俗称的“脑裂”。当网络分区出现时,分布式系统会出现局部小集群,在极端情况下,这些局部小集群会独立完成原本需要整个分布式才能完成的功能,这就对分布式一致性提出类非常大的挑战。

https://juejin.im/post/5a5cc9f5f265da3e58595611

理解误区

Centralized、Decentralized、Distributed

      在集中式和分布式间,还有一类特殊的架构:Decentralized(去中心化)。三类拓扑结构对比图如下:

https://www.quora.com/What-are-the-fundamental-differences-between-distributed-system-and-centralized-system

分布式与集群

      在学习分布式过程中,发现很多人容易对“分布式”和“集群”混淆区分,同时有些将“集中式”和“集群”进行混淆,这里将以“分布式与集群”的区别为切入点,介绍这些概念之间的差异性。

集群

         什么是集群呢?网络上一篇英文博客对这个概念介绍的很详细:

https://www.supinfo.com/articles/single/6495-the-difference-between-cluster-and-distributed,对应的中文翻译是:https://blog.csdn.net/bluishglc/article/details/5483162

        集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就像一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:

     (1)可扩展性。集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。

    (2)高可用性。集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。

         通过了解集群的概念可以发现,无论“分布式”还是“集中式”都可构建“集群”,但是“集群”的实现形式却不仅限于“分布式”和“集中式”。

         网络上对“分布式”和“集群”的区别中,常见的一种观点是:分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

http://uule.iteye.com/blog/1423556

         显然,这种观点对“集群”的认知等同于多台机器构建的“集中式”架构,是错误的。

         总结如下:分布式一定是集群,集群不一定是分布式;集中式不一定是集群,集群不一定是集中式。


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: