导航↓ 相册|收藏博客|加入友情链接|给博主留言
畅享博客 > 企业架构的IT与系统 > IT架构 > [原创]云计算时代的软件工程
2010/12/28 22:46:02

[原创]云计算时代的软件工程

云计算时代的软件工程

20101210日,第八届中国软件技术大会,北京国家会议中心

我的报告内容主要分三个部分。第一个部分从我的角度看看云计算怎么理解,第二部分是阐述云计算时代的软件技术与软件工程,第三部分是汇报金蝶在云计算平台的工作和成果。

因为今天是中国软件技术大会,我想更多从技术和软件工程的角度来谈谈云计算,尽量多报告一些干货,少一些大道理。

这几年软件技术在互联网的推动下,中间件、虚拟化、互联网、云计算等等新概念不断涌现,现在每一家软件公司没有不谈云计算的,但是我们仔细分析就可以看到,其实每一家说法并不完全一样。那么,怎样才能,把握云计算的核心和本质,全面理解云计算的创新模式,才能将云计算从一个概念变成可以创新价值的力量?

我想从一个IT从业人员或者软件企业的角度,特别是从一个老程序员的角度,来看看我是怎么理解云计算的。

所有的软件技术从产生到发展,都不是凭空出现的,也不是从地里突然冒出来的。任何新的技术出现,都是两方面的推动力作用的结果,一个是需求的拉动,一个技术的推动。云计算也是来源于社会和产业的需求,没有社会需求,科学家在办公室想出来的东西在产业上一般是有局限性的,譬如,云计算融合的其中一个技术就是网格计算,但网格计算在商业环境中很难发挥它的技术优势,在科学计算中取得不错的表现,但很难成为一项通用的商业技术。计算机发展到今天,其中一个现实需求就是希望解决资源利用率、计算能力不足和成本的问题。这就是云计算产生的需求推动力。互联网、中间件、虚拟化、网格计算等技术推动了IT技术的融合,这种技术的可行性为解决云计算的商业价值提供了技术上的解决方案。

我们怎么理解云计算呢?

第一,从应用角度理解云计算。云计算的一个特点就是用户的公众性,以前网格计算是科学家在做的,现在云计算不仅仅可以为科学家服务,个人、企业和政府等都可以使用云计算,即可以是私有的,它也是非常公众的。第二个就是设备的多样性。云计算某种程度上跟互联网和物联网时联系在一起的,计算机、手机、PDA、智能设备和RFID等都可以成为云计算的终端。第三个就是商业模式的服务性,有的专家说以后的计算机像用电用水一样,当然这是一个理想的状态,但是现在还没有到这个程度。所谓服务性就是简化和标准的服务接口、按需计费的商业模式。第四就是提供方式的灵活性,我们在部署上有公有云和私有云。我们既可以象Google、中国移动一样提供公共的服务,也可以在企业内或者政府内建设私有的云计算中心。

第二,从产业角度理解云计算。云计算产业,无非就是三类,一类是做应用软件的,通过SaaS的方式提供应用服务。著名的salesforce.com我们金蝶的友商网做的就是这种模式。还有一种是把系统软件厂商,为云计算的运营提供技术和产品。云计算就像电信运营商一样,有中国移动、中国联通,但他们并不生产手机、交换机、光纤通信设备等,这些技术和产品是由华为、Cisco这种设备供应商提供的。云计算也是一样,有云计算运营企业就一定有生产云计算平台产品和技术的企业。传统的软件公司包括金蝶中间件、IBM、微软、VmWare其实就是这种模式。还有一种就是提供专业运营商,当然还有把云计算的应用和技术当做商业模式运营服务的这些基础设施厂商,包括以前的IDC发展的互联网计算中心。

第三,从技术角度理解云计算。从技术角度看,我个人理解云计算没有什么新的东西,它的本质来自于融合,主要是三个方面的融合,第一方面是使用方式就是SaaS的方式,这都不是什么新的概念。第二方面是技术基础来自分布式计算和SOA架构,从技术来讲,云计算就是一种分布式技术计算,就是网格计算和SOA,实现分布应用。第三方面即基础设施的虚拟化,现在很多人把云计算当成虚拟化,虚拟化只是基础设施部署方式,虚拟化也不是什么新的东西。虚拟化就是集群计算和分区计算的融合。把多台计算机虚拟成一台计算机,目的是提高计算能力。这种情况就是以前成熟的集群计算。

还有一种是把一台机器虚拟成多台,目的是提供设备的利用率,这在十几年前就有了就是分区计算。虚拟化无非就是就把这两个合在一起。计算机可以变成小数位,虚拟化就是把原来整数位的计算机变成小数位了。

所以我认为云计算本身是利用互联网远程管理数据应用和IT资源的技术。它是多种应用的整合或者融合。它在软件技术和软件工程方面我认为它的影响还是体现在融合上。

云计算既然如此红火,是否也会象几年前流行的网格计算一样,很快就变成一个流行的时髦呢?其内在的逻辑在哪里?

从软件的角度看云计算,结合软件科技的发展规律,我们就可以发现一些内在的逻辑。从软件工程角度看,我一直讲任何一种软件技术从软件发展到今天,软件技术很多,涌现了很多新的技术,有些技术很快昙花一现,有些技术影响非常深远。什么技术会影响深远呢?我想一种软件技术有两点是非常重要的,第一它是否促进了软件工程的发展,它是否影响了商业模式?比如说网格计算是一个很好的技术,科学家们搞出来的,但是它对软件工程和商业模式带来的影响并不大,所以它并没有产生很大的社会影响。

从最早的高级语言,它的软件工程上有很大的意义,使得软件脱离了硬件,同时使得软件工程成为可能,它在商业模式上形成了独立软件开发商的存在。在这之前没有软件公司,只有硬件公司生产硬件的同时附带上面有一些软件。因为高级语言的发明使得软件脱离了硬件。所有高级语言到现在都还是软件技术的基础。

我认为在软件技术发展历史中,影响第二个深远的就是面向对象的技术。这个技术产生了面向对象的工程,包括面向对象的分析和设计,形成了到现在为止的软件工程主体。它在商业模式上使得软件和信息服务相互结合,成为我们现在的软件产业基本形态。

云计算软件基础就是面向服务的架构,虚拟化的系统部署。在软件工程上,产生了面向服务的建模和基于组件的工程,在商业模式上云计算使得软件的服务和软件脱离了出来,服务从软件产业之中独立出来。

软件技术的工程化的影响可以分成三个时代。

软件的“石器时代”,软件是一种技术,也是一种艺术,我们编程的对象是代码(Code),编程是一种个体的脑力创造。

软件业的工程时代,把个体的编程活动变成一个产业,团队化和工程化得到实现,我们编程对象主要也从代码发展到对象,对象是组件(Object)在工程上,就是面向构件的工程,包括系统分析、设计、开发。

在云计算时代,有几个特征会发生变化:

第一,软件研发的团队化变成社会化。编程不再是一个开发团队,可能很多组件、很多服务来自互联网,来自你不认识的人,来自于你看不见的地方。

第二,软件对象,从组件到服务化。所有的系统都是服务的,编程的对象、系统的对象不仅仅是一个对象而是一个服务。

第三,软件过程也改变了,软件开发方法是通过建模、封装、编排而成,更多的是所有业务流程业务对象都是装配而成的,不是开发而成。

另一方面,软件技术发展历程就是不断解耦的历程。以我对软件的理解,软件工程发展跟硬件是走相反的路,原来所有软件都是在一个程序内,软件技术的发展就是不断的把它的组成不部分分拆出来。比如说70年代、80年代的子程序就是把业务逻辑分离出来,八十年代出现的远程过程调用就是把用户交互解耦出来。九十年代出现的消息队列,就是把同步连接的变成异步连接的,进一步解耦。21世纪出的消息代理,就是将数据转换解耦出来。今天,SOA架构就是将用户交互、数据转换、业务逻辑、业务实现等等都解耦出来,并且以开放和标准的接口进行服务封装。

云计算是在SOA基础上进一把软件的环境进一步解耦,将计算环境进行虚拟化,与IT物理资源进行解耦。

软件架构一直在不断的解耦,为什么这么做呢?解耦的核心就是要解决一个更大的灵活性、更快速的变化来满足IT业务的创新。如果软件不变化的话,实际上装在一个黑箱子里面是最好的,效率也是最高的。但是软件最大的特点,包括软件工程、软件技术发展几十年来的成就,一个核心问题就是解决变化的问题,需求的变化、架构的变化、部署的变化、用户负荷的变化,从设计到最终使用到产品生命周期,它一直在变化。软件所有的技术架构都是解决一个变化的问题。为了不让它牵一发而动全身,所以我们要解耦。在这个过程中我们逐渐分化软件体系架构。这恰恰和硬件的发展完全相反,硬件一开始是各种功能的器件,通过电路板进行组合。硬件技术的发展就是将不同的器件,集成到一个芯片之中,集成度是越来越高。而软件是将“芯片”内的各种功能和组成部分,不断地分拆出来,我们叫解耦。

软件工程过程里面我们感觉到最大的问题就是没有统一的语言,业务人员和编程人员使用的不是同一个语言。我认为云计算特别是SOA架构,把所有的业务进行建模,然后模型的开发,系统的开发是由模型组装而成。这就解决了统一语言的问题,这也是我们软件工程面临的一个非常重要的新的课题。

为应对云计算的发展,我们金蝶也做了一些工作,我现在给各位汇报一下。

我们现在对云计算基本的策略是,希望自主创新,打造一个自主知识产权云计算的平台和产品。因为我觉得云计算发展,在中国必须要解决两个问题。第一个应用问题的,第二个核心技术问题。

我们目前主要是聚焦于为大型企业提供私有云的解决方案。我个人认为公有云在国内大规模应用还为时尚早。我们采取的策略是跟国内主要的高校和国际厂商合作,采取开放的标准。包括跟北京大学在“核高基”重大科技专项中的合作,在英特尔芯片上,希望把我们的云计算平台直接做到与芯片结合,这样可以摆脱异构操作系统对我们的影响。针对行业我们重点解决电子商务行业应用云计算的应用问题。

金蝶云计算平台的技术特征,或者核心研发内容,主要解决三个方面云计算的问题。

第一个解决运行期的问题,第二解决开发期的问题,第三解决系统管理问题。

在运行平台上,核心解决资源虚拟化平台和计算服务化的问题,开发的组件和服务化、管理的智能化。

我们构建一个完整的云计算开发方案,是基于金蝶虚拟化中间件平台和在上面的构件化的交互,模型驱动的业务流程管理,服务化的业务对象封装。在开发期,基于Apusic云解决方案的SaaS应用开发,完全实现了平台化、服务化和虚拟化。使得我们的云计算,是可以很快速的开发和构建出来的。

金蝶中间件实现了基于SOA+虚拟化的云计算软件工程。这个工程包括五个核心过程。

第一,服务建模:服务建模是方法论的第一步,服务建模的主要任务,是确定在一定范围内(通常是企业范围,或若干业务场景范围内)可能成为服务的候选者列表。

第二,服务开发与封装。服务封装阶段的主要任务是对服务进行规范性地描述,其中包括输入/输出消息等功能性属性,以及服务在业务层面的诸多属性。并决定服务以何种形式向外提供服务。

第三,服务注册与管理。服务注册阶段的主要任务是将服务注册到服务库。此时需要决定服务的命名、安全、性能、时间特性。

第四,服务组装与编排。服务组装是以实现业务流程为目的,通过对业务服务的组合和组装,实现更粗粒度的业务服务。

第五,虚拟化部署与与服务治理。服务交付阶段主要任务是完成业务系统服务化组装和服务部署,实现业务按需交付。

从建模开始,到软件开发和封装,到服务的开发和封装以及到虚拟化部署和管理,这和传统的软件分析、设计、开发、调试是有一些区别的。包括服务组件,我们通过企业的业务标准把数据、业务流程、业务对象、服务的组件,以及传统的应用怎么通过封装来加入到这样的一个标准体系里面。我们建立了一个服务和封装方案的设计,在具体过程里面怎么解决一个服务封装的颗粒度问题,这也是SOA在实际应用中需要解决的问题。

基于SOA的新的软件开发方法,将界面、流程和业务逻辑解耦,界面的布局和关联、流程的路由和规则在运行期组装,解决业务层面的个性化和灵活性的问题。也就是说,我们软件开发不再是开发一个整体的软件,而是开发一个通过服务解耦的部件。这些部件是服务化进行封装。比如说所有的服务最后都通过SOA这个技术注册在服务总线上。通过企业服务总线来实现应用和数据之间的统一管理、标准封装和松耦合,解决路由――服务之间的信息交换;协调――各种应用和数据之间的服务传输协议;转换――数据和服务之间的消息和数据格式;处理――来自不同业务源的事件信息和业务应用。

界面也是通过组装而成。软件开发和软件的使用进行了结耦,开发的时候,有很多不同的服务和界面和不同的分工。但是使用的时候,布局、风格以及界面之间的相互关系,它们之间的连接都是通过运行期、通过最终用户组装编排而成,不是开发人员去定的。界面个性化,开发期设计与运行期布局和风格定义进行解耦,解决展现层的个性化和灵活性的问题。通过Mashup 实现信息和内容的聚合,实时感知互动。

业务流程也是组装而成。这样的话有一个好处,通过流程和组件服务的封装可以现有的不管是什么平台,不管是哪个开发商开发的,不管部署在哪个服务器都可以组合成企业新的业务体系。我们不用管服务提供者后台的架构和技术实现的方式,企业的业务流程也是这样。甚至包括数据也是这样。数据的交换、数据的管理、都是可以通过规则通过定义,通过自动化的过程可以解决异构,不同平台上不同企业之间数据之间的交换问题。

这种服务编排思想是无论是云计算还是SOA,它都是一个核心的理念,

金蝶云计算平台的运行期平台分了四个层次:

第一个是硬件层面,包括各种服务器,多CPU和多核的处理器,组成了物理的IT资源池。

第二个是虚拟化的平台,这个平台包括虚拟化操作系统,虚拟化应用服务的计算平台和虚拟化应用。我们部署所有的应用和系统都可以通过虚拟化的平台进行部署。我们通过一个一个的虚拟结点组成一个虚拟机的资源池,通过平台的虚拟化的集群可以组成一个一个的计算单元,这就是我们最终用户的计算环境,每一个计算环境上可以部署一个应用或者多个应用,变成一个应用的虚拟环境。

我们从硬件开始到最终的SaaS应用完全虚拟化。计算结点可以通过动态分配,实现弹性的计算技术。这样的话,可以根据应用来管理虚拟化资源,而且这个管理的过程是根据我们的用户数, CPU负荷和IT资源的使用状况进行动态分配。

云计算平台运行的话必须要有一个非常智能化的管理工具,包括我们虚拟化的资源配置、安全的隔离、负载的均衡以及自我恢复的功能。这也是我们跟传统应用软件IT系统管理有很大的不同。

因为我们在云计算中心里,同一个应用可能有多个实例,可能不同的应用提供不同的服务。虚拟化做好以后如果不能实现动态和系统的管理的话,那么这个动态和原有的静态配置是没有区别的。所以我们实现统一管理和IT间状况的实时监控。云中资源使用监测、节点运行状况监测;自动获取JVM资源数据,包括内存、CPU、线程等资源;监测http请求,方法调用等,分析业务功能执行效率;监控系统异常产生情况,分析业务系统健康状态;深入代码级别的监测分析,直接定位到应用代码。

根据应用的特点,经过服务组件的情况自动进行调整自我进行优化。应用资源动态分配;自动分析线程死锁情况,杀死死锁线程,提供应用优化方案;运行情况数据积累和统计,基于事件的优化方案触发机制;线程池大小动态调整;根据GC(垃圾回收器)及内存池使用,优化JVM启动参数。

对发现问题的这些系统进行自动的恢复。包括应用的崩溃、中间件的崩溃的问题、操作系统崩溃自我恢复等等。对死锁或者其他原因崩溃的应用,根据定制策略,自动重启恢复;对死锁或者其他原因崩溃的应用服务器实例(节点),根据定制策略,自动重启恢复;对死锁或者其他原因崩溃的操作系统虚拟机(节点),根据定制策略,自动重启恢复;对自我恢复的虚拟平台,系统自动快照,提供系统优化建议。

这样一个大型的云计算无论是私有云还是公有云都可以进行自我的管理和自我的恢复。

总结一下:云计算概念众所纷纭,云计算是一个新的模式,我认为在中国大规模应用主要是要解决SaaS应用的问题。目前企业计算还很不成熟,目前中小企业云计算服务取得一点成绩,但是解决SaaS应用问题必须解决运行环境和开发工具的问题,也就是软件工程的问题,这是我们基础的工作。现在和未来企业计算都是基于中间件平台,它将有效屏蔽操作系统和软件的差异性。中国用户有自己的特点和需求,目前全球都是趋于同一个起跑线上,我们通过技术创新可以寻求一个中国特色云计算的商业模式。我们金蝶的目标是希望能够通过这几年的积累打造一个自主知识产权云计算平台的技术解决方案。包为中国的云计算和软件技术发展做一份我们的力量。

我的报告到这里,谢谢大家!

 



查阅更多相关主题的帖子: 云计算 软件工程

评论

您还未登录,不能对文章发表评论!请先登录