本文阐述了并行计算和云计算的关系,简要回顾并行计算的历史,分析了并行计算的重要技术OpenMP、MPI和Erlang,研究了这些技术在中国电信的应用方法,并介绍了中国电信实施云计算、并行计算的指导思想、原则和策略。
计算是一个含义丰富的概念,包括了服务、市场、技术等诸多方面。通常提到的IaaS、PaaS和SaaS,严格地说是基于服务的术语,并不是对技术的描述。从技术上看,云计算是对主机、存储、网络资源分配、使用、管理的技术。其核心是对主机资源分配、使用、管理的技术,主机资源也可称为计算资源。云计算技术包括两个似乎对立的技术,这两个技术都是用于对资源进行分配、使用和管理。
一个技术是对资源进行分割,将资源的分配、使用的粒度变细,主机的虚拟化就是这样的技术。通过引入虚拟主机,将物理主机的能力进行分割,使主机计算能力的分配、使用不是基于单台物理主机,而是基于细分的虚拟主机。简单地说,虚拟化技术就是对资源进行拆分的技术。
另一个技术是利用多个物理主机的能力完成一个任务。分布式并行计算就是这样的技术。分布式并行计算将任务分解为多个子任务分派给主机集群中的各个主机,子任务在多个主机上协调并行运行。简单地说,分布式并行计算技术就是对资源进行聚合的技术。事实上,分布式并行计算才更加体现出云计算的本质。云计算的名称和分布式并行计算、网格计算是一脉相承的。不过,分布式并行计算应该只是并行计算的一种,从下文的分析可以看出,对于云计算除了分布式并行计算这个主要的并行模式外,还有其他的并行模式。本文不仅分析分布式并行计算,还分析了非分布式的并行计算。
并行计算出现在20世纪60年代初期,这个时期晶体以及磁芯存储器开始出现,处理单元变得越来越小,存储器也更加小巧和廉价。这些技术的发展结果导致并行计算机的出现,这一时期的并行计算机大多是规模不大的共享存储多处理器系统,即所谓大型主机。IBM360是这一时期的典型代表。
长久以来,并行计算在高性能计算领域发展得如火如荼,并行计算的体系结构也在不断地变化。并行计算所依赖的平台称为并行机,并行机由多个节点组成,任务被分解到各个节点,在各个节点并行运行。早期的并行节点,并不是互相完全独立的主机,更像1台主机的各个模块。到了20世纪90年代,随着网络设备的发展以及MPI/PVM等并行编程标准的发布,集群架构的并行计算机开始出现。此时的并行计算硬件平台的节点就是彼此独立的主机了。
现代的并行机体系结构有对称多处理共享存储并行机(symmetricmultiprocesser,SMP)、分布共享存储(distributedsharedmemory,DSM)并行机、大规模并行机(massivelyparallelprocessor,MPP)、并行向量多处理机(parallelvectorprocessor,PVP)。所有这些体系结构的并行机都是高高在上位于“云”端的,但和云计算没有直接的关系。所幸的是,另外一种体系结构的并行机出现了,这就是工作站(PC)机群(clusterofworkstation(beowulfPC-cluster),COW)。PC机群的诞生背景是微处理器性能和网络带宽的飞速发展。PC机群的诞生中止了并行计算和并行机的贵族身份,让并行飞入到“寻常百姓家”。PC机群的性能绝不容轻视,如早期128台Pentium3800MHz处理器的PC通过个24端口100Mbit/s的交换机互联,其浮点峰值性能达1000亿,当时的成本不过200万亿元人民币,性价比比当时最好的大型主机并行机还要高30倍。
PC机群为云计算的诞生奠定了基础。Google的云计算就是在PC机群的基础上发展起来的。Google的机群由遍布全球的PC通过广域网连接而成。
行计算的实现层次有两个。
单机(单个节点)内部的多个CPU、多个核并行计算,虽然单节点内部的并行计算不是实施云计算的主流,但由于目前多CPU、多核已经成为主机提高性能的一个非常重要的方面。
集群内部节点间的并行计算。对于云计算来说,更加强调的是集群节点间的并行。目前,集群中的节点一般是通过IP网络连接,在带宽足够的前提下,各节点不受地域、空间限制。所以,云计算中的并行计算在很多时候被称作分布式并行计算。不过,多CPU、多核是主机的发展趋势,所以在一个集群内,一般2个级别的并行都要求存在,集群内多节点之间并行,节点内部多处理器、多核并行。节点间的并行计算,和虚拟化成熟的产品不同,并行计算没有成熟的产品,只有相对成熟的工具。并行计算的实现,依赖于开发者和用户对业务的熟悉,对并行工具正确、熟练的使用。
并行应用软件从需求分析到设计再到部署,可以分为3个步骤。
(1)在需求分析阶段,根据业务特点,将任务尽可能地分为可以并行执行的多个任务。这是实现并行计算最基础的、往往也是最有效的阶段。
(2)在设计、编码阶段,采用并行工具进行程序设计。这个阶段所应用的并行技术是最核心的并行技术,难度最大,技术也不成熟,而且目前大部分技术人员对这个阶段所应用的技术还没有足够程度的掌握。
(3)在应用部署阶段,采用并行部署架构和工具部署应用。这个阶段就是通过部署,使应用所占用的设备能够实现负载均衡。负载均衡本质上也属于并行计算。常用的方法为采用负载均衡设备,如F5交换机、ESB等。这个阶段所涉及的技术比较成熟,已为业界广泛采用。第二阶段的并行计算就是狭义的并行计算,本文主要分析这个阶段的并行计算技术。
并行计算编程模型一直是并行计算研究领域中的重点内容,它和并行计算机体系结构紧密相关。共享存储体系结构下的并行编程模型主要是共享变量编程模型,它具有单地址空间、编程容易、可移植性差等特点,其实现有OpenMP和POSIX等。分布式存储体系结构下的并行编程模型主要有消息传递编程模型和分布式共享编程模型两种。消息传递编程模型的特点是多地址空间、编程困难、可移植性好,其实现有MPI、PVM等;分布式共享编程模型是指有硬件或软件的支持,在分布式体系结构下实现的具有共享变量编程模型特点的编程模型。后者可以按照硬件或软件的实现分为DSM和SVM,其实现有TreadMark和JiaJia等,目前研究热点的分割全局地址空间(PGAS)模型的研究有UPC等代表,具有很强的发展潜力。
并行计算编程模型一般包括两类:一类是在原有串行编程语言基础上,引入并行控制机制,提供并行API、运行库或者并行编译指令,这类模型包括OpenMP、MPI以及大家广为熟悉的MapReduce;另一类则是并行编程语言,其语言本身就是基于并行算法的,相对影响比较大的主要有Erlang。前面说过,并行计算的实现有两个层次,一个是集群节点间的并行,另一个节点内的并行。OpenMP一般用于实现节点内并行,MPI一般用于实现节点间的并行;而Erlang既可以实现节点间的并行,也可以实现节点内的并行。对于大家已经比较熟悉MapReduce,本文就不再做分析。本文重点分析OpenMP、MPI和Erlang这3个并行计算编程技术。
目前从x86到小型机,多核是CPU的主流,对于单线程(singlethread)的程序,多核的处理器并没有办法提升它的处理效能;对于多线程(multithread)的程序,就可以通过不同的核同时计算来达到提高性能的目的。当然,多线程程序的执行性能依赖于对任务的分解。多线程程序的编写、维护,比单线程的程序要复杂不少。一般而言,采用了多线程编程技术,只要主机是多处理器、多核或者拥有同时执行多个线程的能力,那么多线程程序的执行性能还是远远高于单线程的。
传统的多线程程序编写一般有两种方法:
1、通过调用操作系统功能、开发工具自己的多线程控制语句或控制函数来实现;
2、采用POSIX标准和方法,利用POSIX的线程控制库函数来实现。
这些方法都是通过主thread去产生多个thread,由主要的thread把工作拆开,分给各thread去运算,最后再由主thread回收、整合结果。使用这两种方法存在以下问题。
1、程序的开发复杂性较单线程程序增加很多。
2、第一种方法的移植性还存在问题。
3、若要具有好的扩展性,则更加复杂。多线程应该不只是创建固定数量的线程,而应该随着CPU核数的增加而增加线程。如果用上述方法,虽然可以实现良好的扩展性,但控制十分复杂。
4、多线程对多核处理器的负载均衡调度需要开发者自己实现,十分复杂。使用OpenMP则解决了上述问题。
OpenMP是多线程的一种编程方法,它的并行粒度是线程级别的。它的适用范围是单机内的并行计算,可以很好地利用单机内多CPU或者多核。OpenMP就是一套API和运行库,可以简化单机内的多线程开发,让设计人员和开发人员的主要精力集中到对任务的理解和拆分上,而具体的细节交给OpenMP去完成,用OpenMP的编程效率要远远高于使用一般函数库或者操作系统自带函数库的多线程编程,也大大优于POSIX标准和方法。OpenMP是作为共享存储标准而问世的。它是为在多处理机上编写并行程序而设计的一个应用编程接口,包括一套编译指导语句和一个用来支持它的函数库。
OpenMP能通过伪指令,很简单地将程序多线程化。最简单的情形,甚至可以只加一行指导编译程序的编译伪指令,就可以将循环内的语句并行处理了。
OpenMP起源于C/C++,但目前已经有OpenMP的Java开发包,使其可以用于Java编程。
OpenMP虽然很优秀,但只是单机内的并行计算技术。无论是并行计算还是云计算,其并行计算的主流是主机之间的并行而并非单机内的并行。因此,MPI(messagepassinginterface)才是并行计算的代表性技术。
1994年5月1.0版的MPI标准诞生,该标准提出了一种基于消息传递的函数接口描述。目前,MPI已发展到2.0版,成为高性能计算的一种公认标准。MPI本身并不是一个具体的实现,而只是一种标准描述。MPI最为著名且被广泛使用的一个具体实现是由美国Argoone国家实验室
(argonnenationallaboratory)开发小组完成的MPICH,MPICH是一个免费软件,它提供对Fortran和C语言等的绑定支持,以函数库的形式提供给开发者使用。
采用MPI在程序设计上有较大的自由度,甚至可以用它实现Hadoop中的MapReduce功能。
消息传递方式是广泛应用于并行机的一种模式,特别是分布存储并行机。10多年来,这种模式在重要的计算应用中已取得了实质进步。
在设计MPI时,目标不是选择采用现存消息传递系统中的某一个,而是充分利用这些系统的最抽象特点。
建立消息传递标准的主要优点是可移植性和易于使用。以低级消息传递程序为基础的较高级和(或)抽象程序所构成的分布存储通信环境中,标准化的效益特别明显。消息传递标准的定义能提供给生产商清晰定义的程序库,以便他们能有效地实现这些库或在某些情况下为库程序
提供硬件支持,因此加强了可扩展性。
简单地说,MPI是为编写消息传递程序而开发的广泛使用的标准。像这个接口一样,应为消息传递建立一个实际的、可移植的、有效的和灵活的标准。全部目标如下:
设计一个应用编程接口(不必为编译器或系统实现库);
1、允许有效的通信,避免存储器到存储器的拷贝,而允许计算和通信的重叠,尽可能给通信协同处理器卸载;
2、对于接口,允许方便的C语言和Fortran77联接;
3、设定一个可靠的通信接口,用户不必处理通信失败,这些失败由基本的通信子系统处理;
4、定义一个接口,提供更大灵活性的扩展;
5、定义一个接口,它能在基本的通信和系统软件无重大改变时,在许多生产商的平台上实现,接口的语义是独立于语言的;
6、接口应设计成允许线索-安全(thread-safety)。MPI的一个非常大的优势是大范围的可移植性,在标准Unix处理器间通信协议的上层实现的MPI将给工作站群机系统和不同种类的工作站网络提供可移植性。
这个标准包括点对点通信、集合操作、进程组、通信上下文、进程拓扑结构、与Fortran77和C语言绑定、环境管理和查询、描述接口。
Erlang首先是一种类似于函数的编程语言,这种语言天生就是为并行计算而设计的。本来这种比Java还古老的语言,一直无人问津,但是主机的多处理器、多核的发展趋势,特别是云计算的兴起,给Erlang又带来了生机。
业界对于并行计算的探索一直没有停止,尤其是云计算的发展促进了并行计算各种方法、模式的发展,如Java的Concurrency库、Intel推出的ThreadingBuildingBlocks库、微软为RoboticsStudio提供的CCR库等。但这些措施只是为先天串行的程序设计语言提供了后天的并行能力,属于亡羊补牢。而Erlang则是先天并行的,在单台主机上,利用多处理器和多核的优势,Erlang将传统编程方法远远甩在后面。据说使用Erlang编写的YawsWeb服务器,其并发性能是使用C编程的apache的15倍!根据实测,apache在并发4000连接时就已经崩溃,而YawsWeb服务器可实现并发8万连接。
Erlang不仅是程序设计语言,还是包括一个类似于Java的虚拟机在内的一个完整的平台。通过虚拟机,Erlang独立于硬件平台和操作系统,在这个平台上实现了网络通信、内存管理、进程调度、并发机制和分布式计算等功能。
Erlang最初是由爱立信专门为通信应用设计的,因此非常适合于构建分布式、实时软并行计算系统。
Erlang具有以下特点。
(1)并发性
Erlang的轻量级进程可以支持极高的并发性,而且在高并发的情况下内存使用相当少。Erlang的并发性并不会受到宿主操作系统并发性的限制。(2)分布式
最开始Erlang的设计目标就是实现分布式环境,Erlang的一个虚拟机就是Erlang网络上的一个节点。一个Erlang节点可以在另一个Erlang节点上创建自己的并发进程,而子进程所在的节点可能是运行其他操作系统的服务器。不同节点之间可以进行极为高效而又精确的通信,就像这些通信运行在同一个节点一样。(3)健壮性
Erlang内部建设有多种错误检测原语,可以通过这些原语来架设高容错性的系统。在分布式状态下,可以把系统配置成具有Fail-over功能的分布式系统。当有其他节点出错的时候,系统会把它的运行场景自动快速地切换到备份节点上。Erlang支持9个9级别的故障率,一年只有几分钟的故障时间。(4)软实时
它可以提供毫秒级别的响应。(5)热代码升级
对于不能中断运行的系统,Erlang允许程序代码在运行系统中被修改。旧代码被逐步淘汰后能被新代码替换。在此过渡期间,新旧代码是共存的。这也使得安装bug补丁在运行系统上升级而不干扰系统操作成为了可能。(6)递增式代码装载
用户能够控制代码被装载的细节。在嵌入式系统中,所有代码通常是在启动时就被完全装载。在开发系统中,代码是按需装载的,甚至在系统运行时被装载的。如果测试到了未覆盖的bug,那么需替换有bug的代码。(7)外部接口
Erlang进程与外部世界之间的通信使用和在Erlang进程之间通信相同的消息传送机制。这种机制被用于和操作系统通信、与其他语言编写的程序交互。
使用Erlang编写出的应用程序运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通信。进程间上下文切换对于Erlang来说仅仅只是一两个环节,比起C程序的线程切换要高效得多了。
使用Erlang来编写分布式应用要简单得多,因为它的分布式机制是透明的,对于程序来说并不知道自己是在分布式运行。
Erlang运行时的环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它运行时的系统甚至允许代码在不被中断的情况下更新。另外,如果需要更高效的话,字节代码也可以编译成本地代码运行。
Erlang能够创建和管理大量的进程(不是操作系统级别的)。那些进程在不同的操作系统上有同样的行为,可以被垃圾回收,对运行地点透明(locationtransparent),不会破坏其他进程的运行。任意两个进程间完全独立,不共享任何状态,一切交流通过消息来传递,当然也就无需上锁。这样的设计思想造就了适合解决如下问题的Erlang。
(1)系统高度并发
Erlang具有优秀的并行性能,特别适合高度并发操作。
(2)实时处理
在并行情况下,Erlang响应迅速,性能优良。
(3)计算高度分布
Erlang适合集群节点间的并行,也就是基于网络的分
布式并行。
(4)系统要求高度可靠
每年的脱机时间以分钟算,甚至永不宕机。
(5)可靠性高
Erlang内容的检测原语,极大地提高了系统的容错
性,进而提高了系统的可靠性。
对于经常需要更新、升级的系统,Erlang能够在线更新,无需中断系统运行,新旧代码可以同时运行。可以看出,Erlang非常适合于电信领域的应用,只是它是个小众产品和方案,熟悉它的人太少。其实,应该高度重视Erlang,并进行深入研究,根据研究结果引入到支撑系统的开发当中。
随着云计算不断向广度和深度发展,中国电信对于云计算的探索和研究投入很大,但在应用上比较谨慎。
按照中国电信企业信息化战略规划的要求,根据其内部IT支撑系统的特点,密切跟踪云计算技术的演进趋势,充分利用云计算技术带来的优势,积极、务实、稳妥地探索企业内部MBOSS云计算技术的应用;有效降低IT系统总体拥有成本,同时规避云计算应用过程中存在的各种风险,保证MBOSS稳定、可靠、安全运营,确保有效支撑企业业务经营、网络运营和内部管理的各项需求。
(1)降低IT系统总体拥有成本(TCO)
重点基于PC服务器构建IaaS云计算平台,实现多应用基于IaaS平台的共享部署,提高基础设施资源利用率,降低硬件成本占比,实现IT投资结构的优化及IT总体拥有成本的降低,并做到系统的稳定、可靠运行。(2)更快、更好地满足业务需要
在云计算适用的应用范围内,积极推进云计算的实施,利用IaaS云计算平台能根据业务需要快速分配资源并能够弹性扩展的特点,实现应用快速部署及处理资源动态伸缩,更好地满足业务需要。(3)提升云计算平台的管理和运营能力
积极推进云计算应用的同时,加强云计算平台管理系统建设,提高平台的自动化配置及管理能力,加强IT人员云计算技术培训,提高云计算平台管理及运营能力。
目前的指导思想是云计算在技术上分为两类:一类为以虚拟化为代表的资源分割技术,另一类则为以并行计算为代表的资源聚合技术。
IT支撑系统的云计算实施是中国电信整个云计算实施的一个非常重要的组成部分。中国电信IT支撑云的实施核心在于提高支撑系统的运行效率,提高运行的可靠性,降低系统的运行成本。随着电信用户数量的不断攀升、业务种类迅速增加、业务规模不断扩大,支撑系统软件的规模和复杂性也在快速增加,超过了硬件性能的提升速度,用于购置、维护硬件的费用也在不断增加。实施基于集群架构的并行计算,则是满足IT支撑云核心需求的基本策略。原因如下:
1、实施并行计算的集群总体性能,其性能提升可以随集群节点的增加而近似线性提升,目前业界的集群节点已经达到数千个,集群的总体性能远远超过单台高性能主机;
2、集群内节点互相冗余,整个集群的可靠性远远超过单台主机;
3、集群的节点可以采用廉价主机,未来的方向是使用x86主机集群代替高性能Unix主机。
电信支撑系统大多属于高负载应用,这些长期以来需要运行在高性能的小型机上。近年来,逐渐引入并行计算已摆脱对高性能小型机的依赖,解决了硬件成本过高、性能提升有限的问题,主要包括以下两类。
(1)对数据库进行分库是实现数据的分布存储和并行操作对于计费、账务这类海量数据的存储和操作规模比较大的省公司,一般是根据地域对数据进行分割,不同地域的数据存放到不同的位置,由不同的节点处理。这种并行比较原始,各节点之间耦合度很小,不需要复杂的协同。其优点是对应用无需进行改变即可利用多节点的优势。但并行度较低,资源利用率不高。
(2)利用负载均衡工具实现并行计算
对于应用层面,目前已经较普遍地利用负载均衡工具实现一定程度的并行计算。4层交换机是较为常见的工具,此外还有中间件服务器的负载均衡功能也得到较为普遍的应用。近几年,企业服务总线(ESB)也逐步被引入。
除此以外,近年也在开发阶段引入并行计算。在CRM中部分采用SOA架构,模块可以由ESB等工具进行调度,实现一定程度的并行。
中国电信MBOSS系统的支撑云建设重点在于并行计算。支撑系统云计算的实施主要不是对资源进行分割,而是对资源进行聚合。因为支撑系统大都属于“重型”应用,占用计算和存储资源较多,一般单节点资源已经难以满足需求,再对单节点实施分割意义不大。
对于电信应用的并行化,首先需要对应用特点进行分类,根据不同的特点采用不同的并行策略。并行策略,也要充分考虑到当前的运行状况,在可靠性、成本等限制条件下,逐步实施。其中,可靠性是需要特别注意的。
对电信应用的划分,可以有多个维度。这里根据计算量、并发性和数据量的大小属性进行分类。具体说,这3个属性为任务执行时间、任务的并发量、单个任务输入(即处理)的数据量。可以只对每个特点分为2个等级:大和小,至于介于大和小之间的,则呈不典型特征,可以根据偏大还是偏小而决定,具体有待进一步研究。目前,对属性值大小的判断,主要还是定性的判断,定量的判断有待进一步深入研究。下面对属性值的分类进行示例,仅供参考。
应用3个特点的2个等级,可以有8个组合,但有些组合在实际中不可能存在,或者在电信行业不存在。具体见表1。
根据上面的分析,在电信的实际应用场景中,需要实施并行计算的有以下2类应用:
1、大任务小并发大数据;
2、小任务大并发小数据。
下面针对具备这两个典型特点的应用,探讨并行化策略。
这类应用一般为批处理应用。这类应用可以按功能耦合度和数据耦合度划分。功能耦合度指的是模块之间的功能耦合度,数据耦合度指的是各部分数据之间的耦合度。每个维度取“强”和“弱”2个值,则有表2所列4个组合。
需要指出的是,就总体而言,电信应用属于数据密集型应用,在应用逻辑上并不十分复杂。
(1)现状
目前,这类应用也做了不少集群部署,能够进行一定程度的负载均衡。其方法如下:是多实力部署,每台服务器上部署相同的应用,服务器环境配置也大致相同,实现方法不对应用逻辑进行分割,只是做多实例部署,对数据进行静态分割,具体如以下2个分布式实现方法。1、服务器在负载均衡器调度下形成集群,达到负载均衡。
2、对数据进行分片,片与片之间数据基本没有关联,不同的实例处理不同片的数据。这种情况下,只是实施了负载分担,没有形成一个统一的集群,因为实例之间没有任何关系,也没有统一的管理平台进行管理,不能达到真正的负载均衡。
(2)并行化策略
应用并行化的策略,首先是总体架构实施SOA,对于大任务的应用更是如此。在功能上拆分的方法常常是根据任务处理的流程,将相对独立的流程处理模块独立出来,进行解耦、封装。不过,电信处理逻辑属于商业处理逻辑,总体来说并不复杂,从逻辑功能上对应用进行拆分,由于这些逻辑大多是流程性的,即使经过解耦,在技术上可以实施并行,但由于其对应的实际业务是流程性的,执行必须有先后顺序,所以事实上这些服务只能是分布式部署,并不一定能并行执行。
但是,这类应用数据量的特点提供了根据数据对应用进行拆分的可能性。从前面的现状分析可以看出,目前事实上的分布式多实例部署,很多就是根据数据进行的。电信数据有一个很重要的特点,就是数据的地域独立性,同一个业务,不同地区的数据是彼此独立的。如计费数据,广州的数据和珠海的数据是彼此独立的,虽然广州的计费应用和珠海的计费应用是相同的。对同一个本地网来说,不同区的数据也是彼此独立的,如广州花都区的计费数据和广州番禺区的计费数据是彼此独立的。根据这个特点,就可以进行任务拆分,实施集群并行计算。可以选择的方法有MPI和MapReduce,但是MapReduce方法目前的实现是基于Hadoop的开源,并非是Google公开的其本身所采用的,所以其具体效果有待验证,目前中国移动已经使用MapReduce进行了较大规模的试验,中国电信股份有限公司广东研究院(简称广东电信研究院)也进行了这方面的大量研究和测试,就广东电信研究院的测试情况来看,基于Hadoop的>MapReduce实现,在处理大任务大数据方面效果明显。MPI的方法经过多年充分的实践,应该可以认为非常可靠,但是MPI模式处理失效节点方面需要设计人员予以更多的关注,因为它本身不能直接处理节点失效的情况,但由于电信应用逻辑的并发特别复杂,并发属于计算密集型,所以由应用逻辑实现节点的管理也是可以接受的。
这类应用一般都是实时在线处理,对相应速度要求很高。一般应用中的Web层以及OCS、ABM都属于这类。这类应用有以下特点:
1、实时性强,用户在线等待任务处理结果,任务处理时间短暂,响应速度必须快速;
2、并发性高,短时间内,一般会有大量请求发生;
3、稳定性高,这也是实时性的要求,如果服务出现不稳定(指软件故障而不是硬件故障,硬件故障有集群保证其可用性),将严重影响应用的响应速度。
(1)现状
目前的解决方案也是借助负载均衡器实施集群部署,按照一定的策略,根据请求的特点,将请求发送到集群中不同的节点进行处理。(2)并行化策略
虽然这类任务往往是Web服务,已经表现为SOA架构,但并行化还是首先按照统一标准化的SOA架构对其进行封装。一般而言,这类应用无需再进行拆分,可以将整个应用封装为统一的、标准的SOA服务。在算法上有2种实现方法:一种为依然借助负载均衡设备实现集群节点间的负载均衡,在节点内部采用OpenMP实现节点内部的并行运行;另一种为采用Erlang实现全面、高效率的并行,集群节点间和节点内部的并行计算都由Erlang及其运行环境实现。
(3)并行化策略总结
根据上面的分析,应用的并行化按照以下两个步骤实施:对应用实施SOA服务化封装;根据特点,在算法模式
上按照表3所列实施。
并行计算和虚拟化一起构成了云计算技术的骨干。对于大型应用系统实施云计算的主要内容就是实施并行计算。并行计算技术除了目前炙手可热的MapReduce以外,值得推荐的还有OpenMP、MPI和Erlang。这3个技术主要应用于并行程序的开发,和其他并行策略(如SOA)一起,用于从根本上实现应用的并行化。中国电信在支撑云的研究、建设中,计划在多个层面实施并行计算,以提高应用运行效率和可靠性,降低采购和运营成本。对于条件成熟的应用,拟从业务并行开始,在开发层面即实现并行计算。目前,经过研究分析和测试,针对不同的应用,初步制定出不同的并行化解决方案,采用合适的并行计算技术实现不同层次的并行计算。