大型系统演进缩影(一)

来源:互联网 发布:dw软件图标 编辑:程序博客网 时间:2024/05/18 02:36
                                             

大系统演进缩影

系统是在进化的

系统不是生来就庞大无比的,而是随着访问、数据的增多不断地演进。因此系统,是随着需求的驱动,在不断

地演进。

            早期由于用户访问量少、数据量少且简单,因此系统也比较简单。图一代表着这个时候的典型系统架构。


 

   图一 系统架构

           

             随着用户数据由非结构化到结构化的发展,于是出现了关系型的数据库。结构化数据是指可以用二维表结构来逻辑表达实现的数据,即行数据。行数据,一般存储在数据库里。反之不方便用数据库二维逻辑表来表现的数据,则称为非结构化数据。显然,数据库存储的数据,就是结构化数据。而音频文件、视频文件、图片这些就归类为非结构化数据。图二代表着这个时期的典型系统架构。 



      图二 系统架构

        不过这种数据与应用耦合的系统,存在扩展的隐患。单节点系统的存储空间、CPU、内存是有限的。随着应用的增多、数据的增长,必然会面临挑战。

        解决这些挑战的,有两种方式:scale up (纵向扩展) 和 scale out(横向扩展)。如果采用scale up 的方式,则增加内存、CPU、存储空间。但是单节点毕竟这样扩展是有限的,而且成本会偏贵。因此单节点扩展,往往是提高单机性能、充分利用单机CPU、存储空间,往往是在系统设计方面下功夫。在充分提高单节点的性能、CPU利用率、存储空间利用率的情况下,如果还不能满足需求,则要进行scale out。

       但是如果在系统动力特性提升上挑战较大,则可以先选择scale out。其实一个系统不仅要满足用户的功能需求,还要满足用户其他的非功能需求。非功能需求包含:性能、安全、可靠、数据安全、可用等特性。

      在未来潜在的挑战、需求,必然面临着对系统进行扩展。但是如何进行系统扩展呢?数据和存储要分离,还是继续耦合一块。这里涉及了一个理念问题,或是一个系统架构问题。

        系统架构从应用和数据关系来看,有两种特性:share nothing 和 share disk(share data)。share nothing 是指各个处理单元都有自己私有的CPU/内存/硬盘等,不存在共享资源,类似于MPP(大规模并行处理)模式,各处理单元之间通过协议通信,并行处理和扩展能力更好。典型代表DB2 DPF和hadoop ,各节点相互独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转。我们常说的 Sharding 其实就是Share Nothing架构,它是把数据从物理存储上被水平分割,并分配给多台服务器(或多个实例),每台服务器可以独立工作,具备共同的schema,比如MySQL Proxy和Google的各种架构,只需增加服务器数就可以增加处理能力和容量。share disk 是指各个处理单元使用自己的私有 CPU和Memory,共享磁盘系统。典型的代表Oracle Rac, 它是数据共享,可通过增加节点来提高并行处理的能力,扩展能力较好。其类似于SMP(对称多处理)模式,但是当存储器接口达到饱和的时候,增加节点并不能获得更高的性能 。

      图一、图二的系统,往往采用share disk 的方式来解决问题。因为数据和应用解耦,各自灵活扩展,看似很美好。share disk的典型架构如图三所示:

 

               


    图三 share disk。

    但是数据服务器如何为应用服务器提供数据服务呢?数据服务器可以对应用服务器提供块设备服务(图四)、也可以提供文件系统服务(图五、图六)。



                                 图四 通过FC 或者IP 协议提供SAN存储网络(存储厂商)


  

     

                              图五  通过NAS网络提供存储(存储厂商) 


    

      

        


                           图六 通过分布式文件系统提供存储服务

  图四、图五这两种架构需要依赖于存储厂商提供的存储解决方案,好处可以通过本地文件系统来访问这些访问,从而跟应用可以很好地融合。图六分布式文件系统对应用可以呈现本地文件系统(NFS,lustre,CIFS),也可以通过提供客户端API来提供存储服务(Hadop、GFS、KFS)。


       share nothing 架构,则在单机系统的基础上,对数据进行水平分割,然后进行拆分。然后数据和应用耦合在同一台机器上,每台机器上的应用处理各自独立、完备的数据,无需或较少依赖其他节点的数据,这种架构适合海量数据处理,优点是应用在处理数据时,不用进行大量机器间数据传输,从而提高性能。

大型系统演进未完,待续。

         图片看不清晰,可以通过传送门:http://share.csdn.net/slides/8224


        

        

        

       







    








   




0 0
原创粉丝点击