当前物理CPU正遵循摩尔定律在稳定的高速发展,然而人类对计算能力的要求更高,一方面应用对计算能力要求超过摩尔定律的速度,另外一方面要求提高计算能力的使用效率,这都离不开软件的协助。虚拟化和分布式都是现在流行的架构,他们代表着两个不同的发展方向:虚拟化--一台机器分成多台机器用;分布式--多台机器合成一台机器用。正可谓"天下大势,分久必合,合久必分"。
一、分布式架构发展和现状
1. 从SMP到MPP
从系统架构来看,目前的商用服务器主要分为三类,对称多处理器结构SMP,非一致存储访问结构NUMA以及海量并行处理结构MPP。
● SMP(Symmetric Multi-Processor)
所谓对称多处理器结构,是指服务器中多个CPU对称工作,无主次或从属关系。各CPU共享相同的物理内存,每个CPU访问内存中的任何地址所需时间是相同的,因此SMP也被称为一致存储器访问结构(UMA:Uniform Memory Access)。
SMP服务器的主要特征是共享,系统中所有资源(CPU、内存、I/O等)都是共享的。也正是由于这种特征,导致了SMP服务器的主要问题,那就是它的扩展能力非常有限。
● NUMA(Non-Uniform Memory Access)
由于SMP在扩展能力上的限制,人们开始探究如何进行有效地扩展从而构建大型系统的技术,NUMA就是这种努力下的结果之一。利用NUMA技术,可以把几十个CPU(甚至上百个CPU)组合在一个服务器内。
NUMA服务器的基本特征是具有多个CPU模块,每个CPU模块由多个CPU(如4个)组成,并且具有独立的本地内存、I/O槽口等。由于其节点之间可以通过互联模块(如称为Crossbar Switch)进行连接和信息交互,因此每个CPU可以访问整个系统的内存。显然,访问本地内存的速度将远远高于访问远地内存(系统内其它节点的内存)的速度,这也是非一致存储访问NUMA的由来。由于这个特点,为了更好地发挥系统性能,开发应用程序时需要尽量减少不同CPU模块之间的信息交互。利用NUMA技术,可以较好地解决原来SMP系统的扩展问题,在一个物理服务器内可以支持上百个CPU。比较典型的NUMA服务器的例子即我们常说的小机例如HP的Supterdome和IBM的Power服务器。
但NUMA的节点互联机制是在同一个物理服务器内部实现的,当某个CPU需要进行远地内存访问时,它必须等待,这也是NUMA服务器无法实现CPU增加时性能线性扩展的主要原因。2013年年度备受瞩目的"淘宝去IOE"的原因也在此。在IBM的小机和Oracle数据库的组合下,淘宝通过硬件升级获得的性能增长达到了瓶颈,无法满足客户的爆发性增长。
● MPP(Massive Parallel Processing)
和NUMA不同,MPP提供了另外一种进行系统扩展的方式,它由多个SMP服务器通过一定的节点互联网络进行连接,协同工作,完成相同的任务,从用户的角度来看是一个服务器系统。其基本特征是由多个SMP服务器(每个SMP服务器称节点)通过节点互联网络连接而成,每个节点只访问自己的本地资源(内存、存储等),是一种完全无共享(Share Nothing)结构,因而扩展能力最好,理论上其扩展无限制(如图1所示)。目前的技术可实现512个节点互联,数千个CPU。目前业界对节点互联网络暂无标准,如 NCR的Bynet,IBM的SPSwitch,它们都采用了不同的内部实现机制。但节点互联网仅供MPP服务器内部使用,对用户而言是透明的。
在MPP系统中,每个SMP节点也可以运行自己的操作系统、数据库等。但和NUMA不同的是,它不存在异地内存访问的问题。换言之,每个节点内的CPU不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为数据重分配(Data Redistribution)。
但是MPP服务器需要一种复杂的机制来调度和平衡各个节点的负载和并行处理过程。目前一些基于MPP技术的服务器往往通过系统级软件(如数据库)来屏蔽这种复杂性。例如NCR的Teradata就是基于MPP技术的一个关系数据库软件,基于此数据库来开发应用时,不管后台服务器由多少个节点组成,开发人员所面对的都是同一个数据库系统,而不需要考虑如何调度其中某几个节点的负载。
MPP以其优良的扩展架构成为了分布式架构的基础。
图1.MPP服务器架构图
2.分布式架构应用现状
当前主流的分布式应用有两种:分布式数据库和Hadoop分布式系统。两种解决方案对比如表1所示。
表1. 分布式数据库和Hadoop分布式系统的对比
MPP分布式数据库较Hadoop分布式系统,在复杂逻辑的结构化数据处理上具有一定的优势,且可基于SQL开发,对于有较丰富SQL经验的系统开发者,开发与运维更容易。当然,业界MPP分布式数据库产品价格也要高于Hadoop这个源于开源社区的产品。
这是否意味着MPP分布式数据库就是大数据处理的最佳解决方案呢?我们以银行系统数据的价值密度和数据特征为例来考虑这个问题。对于银行系统数据,我们基本可以达成这样一个共识:银行系统数据中,结构化数据价值密度通常高于非结构化或半结构化数据,而在银行数据中非结构化数据占用了大量的存储资源。这是因为银行系统中结构化数据以账务数据为主,而非结构化数据则主要集中在凭证影像等数据。当然结构化数据中也包括部分日志信息等价值密度不高的数据。
数据存储与处理技术在由"一种架构支持所有应用"向"多种架构支持多类应用"转变。同样对于数据消费层数据处理技术,也应根据数据价值密度及数据特征等因素采用与之相匹配的架构来支持。对于数据消费层数据中那些价值密度高的交易及账务数据可采用MPP分布式数据库构建数据处理平台,而对于那些价值密度不高的结构化数据和非(半)结构化数据则可以采用Hadoop分布式系统作为处理平台。
3.分布式局限性:CAP理论
如图2所示,CAP原理中有三个要素:一致性(Consistency),可用性(Availability)和分区容忍性(Partition tolerance)
图2.CAP原理示意图
CAP原理指的是在分布式系统中这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数Web应用,其实并不需要强一致性, 因此牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。
从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
但Web应用也有例外,比如支付宝系统,就要求数据(银行账户)的强一致性,而且面对大量淘宝用户,可用性要求很高,因此只能牺牲数据的分区冗余。
对于MPP DB而言,虽说是宣称Scale out(横向扩展),但是这种out一般到100,而Hadoop一般可以到1000+。在我们的测试中,也发现线性扩展性一项即使是在较小的节点数方面,也并未达到绝对的直线的性能。
这是为什么呢?我们大致可以从CAP理论上来找到一些理由。因为MPP DB始终还是DB,一定要考虑C(Consistency),其次考虑A(Availability),最后才在可能的情况下尽量做好P(Partition-tolerance)。而Hadoop就是为了并行处理和存储设计的,所以优先考虑的是P,然后是A,最后再考虑C。所以后者的可扩展性当然好于前者。
二、虚拟化架构发展和现状
目前,虚拟化的价值已经被广泛认可,虚拟化架构也已经为大家所熟知,本文不在这里赘述,仅探讨一些关键的更新。
1.全融合虚拟化架构
全融合虚拟化架构,也就是我们常说的软件定义数据中心。从最直观的定义来看,就是虚拟化、软件化数据中心的一切资源。虚拟化是从服务器虚拟化开始的,虚拟机带来的好处很多客户都已经非常了解。但是网络、存储是物理性很强的资源,虚拟机虽然带来了一些灵活性,没有办法在其他资源上体现。只做计算虚拟化相当于仅完成了整个工作的30%。软件定义的数据中心就是把数据中心所有的传统物理硬件的资源进行虚拟化、软件化,从而实现了资源的抽象和与硬件的解耦和,是实现云计算的基础。
● 计算存储融合
HDFS是Google公司的GFS的开源实现,GFS是大数据的基础。HDFS是分布式的文件系统,即每台服务器在只使用内置硬盘的情况下,通过网络互连,组建了一个由多个节点组成的,每个节点都同时使用并行文件系统。分布式文件系统是先进支撑互联网应用的基础,无论是淘宝还是腾讯,都有一个基于开源,自己研发的,名叫TFS(巧合,都叫TFS)的分布式文件系统。TFS是支撑其海量数据的基础。
Ceph是OpenStack中最流行的存储管理模块,同时支持文件体统,块设备和对象存储。Ceph像一批黑马,大有取代swift(对象存储)和cinder(块设备)的趋势。
存储产品本身也处在变革的过程中,SSD的出现彻底改变了传统存储。SSD作为缓存能够极大的提升分布式文件系统的性能,通过互联网已经证明自己实力的文件系统必将在企业市场激起新的浪潮。
● 计算网络融合
* SDN和VXLAN
SDN提出了采用软件定义网络的思路,具有转发和控制分离、控制逻辑集中、网络虚拟化、网络能力开放化等特点。SDN实现的核心控制器,即可以是普通的物理服务器也可以是虚拟机
VXLAN技术是为了解决数据中心虚拟多租户和虚拟机迁移的问题而设计的。VXLAN技术采用了L2 over L3技术,在原有的数据报文封装中增加了VXLAN封装,并增加了IP封装,使得原有的L2报文可以穿越L3网络,扩大了二层网络的范围,使得虚拟机迁移 可以灵活跨越三层部署。同时,VXLAN封装大大扩展了租户ID字段,避免了采用VLAN方式受到4K容量的限制。
VXLAN与SDN,前者解决虚拟迁移,后者关注控制,将支撑未来云计算网络的搭建。
* NFV
NFV即网络功能虚拟化,传统网络设备是由专门的硬件芯片和定制软件平台组成的。NFV指把定制软件平台安装在通用硬件平台,即x86服务器上。其本质在于解决电信运营商多年来高昂的网络成本和封闭的网络功能。
* SDN与NFV
SDN是一种跨设备级的技术,不仅只体现在企业网中的某一台设备上,其通过改变网络控制层与转发层的逻辑关系,将为下一代网络带来更多、更新的功能,比如针对不同的业务客户群,通过改变节点设备的转发流表,优化不同的业务流。而NFV则属于产品级的技术,通过改变单台设备功能的承载形态进而影响整个网络架构,比如在城域网中,将原本存在于统一集成网关设备中的路由、多媒体以及安全等网络功能转移到通用服务器上运行,以便降低成本、更好地响应用户的需求。例如,H3C的VSR,就是一款运行在标准服务器虚拟机上的纯软件路由器产品,实现了计算平台和网络平台的融合。
2.公有云服务
无论公有云还是私有云,云服务管理平台经过多年的发展已经落地,其功能模块已经确定。云管理平台由门户应用、服务运营、资源管理、运维管理、系统管理以及接口等组成。用户能够通过自服务门户Portal进行用户登录登录、服务订购、服务变更、服务退订、资源使用等服务操作。运营人员能够通过运营管理门户Portal进行用户管理、资源模板管理以及系统管理等运营操作。大家可以看到,融合后虚拟化架构作为一部分包含在资源管理中(如图3所示)。
图3. 云服务管理平台的主要功能
三、结束语
随着业务的不断发展,传统企业用户会发现特定应用,通过传统的硬件升级也无法满足其需求,即遇到了性能或者容量的天花板。因此,传统企业反而转向互联网行业学习分布式架构来解决他们遇到的问题。"棱镜门"事件的主角--美国国家安全局之所以选中Amazon来提供其基础设施而没有选中IBM也是基于其海量数据(世界范围内监听电话,监控电邮)过滤分析的需求。
但是分布式架构也不是万能的。传统行业的IT强调数据一致性,而分布式系统强调线性扩展,只保证最终一致,这两者不可兼得。大家可以参考前文的CAP理论,数据一致性,可用性,分区耐受性这三者在任一时刻,任何系统只有两项能同时成立。
除此以外,传统行业和互联网企业的建设模式也是不同的,传统行业倾向于购买定制硬件(Unix服务器,FC存储)和商业软件(Oracle数据库,Weblogic中间件)和商业的解决方案。由于不掌握核心技术,企业IT管理人员遇到问题会直接咨询厂商,专业厂商为企业义务连续性背书。而互联网企业由于可以看到源代码并且具备操作系统内核级修改的能力,倾向于使用开源软件,x86架构廉价硬件配合大量工程师定制开发;企业遇到问题只有依靠自己解决。这两种方式没有孰优孰劣,适合的就是最好的,而且从成本上其实讲差不多。