集中式架构与分布式架构
什么是集中式
集中式架构就是将项目集中存储在中央服务器中,在工作的时候,大家只要自己电脑上操作,从同一个地方下载最新版本,然后开始工作,做完的工作再提交给中央服务器保存。这种方式需要联网,典型的例子就是SVN。
图1 集中式架构示意图
缺点:
1.如果网络出现问题或者网速慢的时候,直接影响工作效率。如果是中央服务器挂了,那就集体喝茶去了不用工作。
2.还有一种情况,各自电脑中操作的所有软件工具,都存放在一个中央服务器上(现在流行叫云服务器),只需要用各自电脑登陆连接到云服务器上,(一般服务器都是用linux),比如用ps工具,大家其实用的是云服务器中的同一个ps 软件,在使用率高的情况下,ps会出现异常,当用ps筛选颜色的时候,已经混乱,无法正常选择颜色,这个情况是我在开发中遇到的。以前我们是每个人用各自安装的ps,但是在这样的环境下用的是同一个ps软件的时候就会bug。
3.安全度不高,重要的东西都放在一个中央服务器中,如果被黑,那损失就大了。
优点:
1.减少了硬件和软件成本,硬件不用说了,现在流行盒子,一个小盒子只要连上中央服务器即可,以前都是一个个的主机箱,那成本大多了。如果用到工具软件需要收费,只需买一套正版就OK了。
什么是分布式
分布式架构:只要提供一台电脑作为版本集中存的服务器放就够了,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它也一样干活,只是交换修改不方便而已。而每一台电脑有各自独立的开发环境,不需要联网,本地直接运行,相对集中式安全系数高很多。经典的列子就是GIT。
图2 分布式架构示意图
核心要素对比
以下是两种架构的核心要素的对比分析:
业务支撑能力比较
客观讲,分布式架构在价格成本、自主研发、灵活兼容、伸缩扩展方面有比较显著的优势。互联网行业具有请求量大,数据量大的特点,业务上又可能在集中的时间段出现高于日常流量数倍的业务高峰,这些特征对架构的可扩展性提出了极高的要求。
在集中式架构下,为了应对更高的性能,更大的数据量,往往只能向上升级到更高配置的机器,如升级更强的CPU,升级多核,升级内存,升级存储等,一般这种方式被称为Scale Up,但单机的性能永远都有瓶颈,随着业务量的增长,只能通过 Scale Out的方式来支持,即横向扩展出同样架构的服务器。在集中式架构下,由于单个服务器的造价昂贵,所以 Scale Out的方式成本非常高,无法做到按需扩展。而分布式架构的解决方案是基于廉价的PC Server 来做 Scale Out,,借助高速网络组建的PC集群在整体上提供的计算能力已大幅高于传统主机,并且成本很低,横向的扩展性还可带来系统良好的成长性。
在分布式架构下,可支持按需扩展,唯一的要求是在设计上保持每个应用节点不保存状态信息。随着业务量从几百笔/秒到几万笔/秒级别时,需要更多的服务器来支撑,数据库单表的性能会成为瓶颈。数据量也会从GB迅速飙升到 TB、PB,单数据库实例的容量也会成为瓶颈。数据层会采用分库分表的策略来支持业务量的增长,具体策略根据业务场景可分为垂直拆分(按业务)、水平拆分(按请求/用户做哈希,或者做区间拆分)、读写拆分等。最后会通过统一分布式数据访问组件来屏蔽数据扩展的复杂性。下图简单描绘了服务器扩展性(应用层)和数据层可扩展(持久层)的形态:
图3 应用层和数据层弹性伸缩架构示意图
随着业务的发展,应用和数据层弹性伸缩也会受限于到单个机房的电力、面积、散热等物理条件的制约而无法Scale Out,同城的机房个数也是有限的,所以势必要从机房层面支持弹性的可伸缩。蚂蚁的业务规模早在两年前就已突破这个规模,因此进行了机房单元化改造,其架构核心思想是把数据水平拆分的思路向上提升到接入层、终端层。从接入层开始,把原来部署在一个IDC 中的系统集群,进一步分成多个更细粒度的部署单元,从而达到机房级别的扩展。下面为这种架构的示意图:
图4 单元化架构示意图
下表总结了两种架构模式在业务支撑的几个方面的比较:
总结
说到这里,相信大家都明白了什么是分布式架构和集中式结构,还有它们的差异性,我们通过对集中式和分布式架构几个方面来比较,分布式架构在安全自主、灵活性、经济性、可伸缩性等方面有明显优势,随着当今社会系统需要处理的数据量越来越大,分布式架构在这方面的优势也会越来越明显。集中式系统在可一致性、维护性方面有优势,数据只有单一来源,不会出现数据的不一致性,而分布式系统需要达到同等或更高的可维护性与高一致性,需要通过先进的分布式中间件与大规模运维平台来支持。如何选择使用分布式架构和集中式架构,不是通过简单对比就能得出结论,还需要考虑自身的经济条件,使用场景。