Cloud Computing - The Spring Semester - 2017 (云计算,春季,2017)

Cloud Computing - The Spring Semester - 2017 (云计算,春季,2017)

lblabs
4.96万213

The class, Cloud Computing, for graduate students, Spring 2017


My Blog: https://greatfree.lofter.com

My Email: bing dot li AT asu dot edu

You are welcome to our QQ group: 469024251



为什么不能进行云编程?


李冰


bing.li@asu.edu



在当代云计算被炒得天翻地覆的情况下,一个尴尬的事实是,程序员并不能对云系统进行编程。我这里定义的编程指的是,根据自己对分布式系统的知识,运用一种编程语言或编程环境,开发满足自身独特需求的云计算系统。在这个前提下,当前计算科学领域中,并不存在这样的编程语言或编程环境。当然,GreatFree正在努力打破这个格局。




作为计算机科学主要研究方向之一,软件工程已经走过了近六十年的历程。计算机软件的运行环境也发生了巨大变化。我认为,当前软件工程主要关注的计算环境完全由传统单机系统转变为在互联网支持下的大规模计算系统。当前软件工程技术研究目的在于努力帮助开发人员尽可能便捷地开发出互联网环境下的计算系统。这样的系统一般可以笼统称为云计算系统。这些工作都是建立在这样的认识前提下,即传统计算语言(如C、C++或者Java等)或者软件工程技术在面对互联网计算环境时,开发代价已经不可承受。




为了帮助程序员快速开发云计算系统,当前的软件工程技术产生了三个发展方向。第一,通过为特定计算环境建立基础架构系统,从而大大减轻开发人员的代价。这些基础架构系统力图通过软件工程技术把复杂的计算环境开发细节隐藏起来,即代替用户解决这些庞杂的技术问题;同时,向开发人员提供一套脚本语言或者利用现有面向对象技术,描述具体应用需求。这样,在整个开发过程中,开发人员完全不需要关心互联网计算环境的细节,只要掌握基本单机或者简单网络环境下的逻辑描述方法,就可以完成互联网环境中的软件开发。当前,这种方法被普遍采用;学术界和工业界都有众多上述架构存在;新的架构也在不断被提出。云计算系统作为一个互联网环境中的特殊软件,主要就是通过这种方法来开发的。这种方法的优点很明显,那就是通过软件虚拟方法把复杂计算环境抽象成了简单环境,从而降低开发成本。不过,它的缺点也很明显。在整个开发过程中,开发人员完全依赖于已有架构,他们的主动开发能力完全被束缚,失去对软件系统级别上的控制能力。另外,每一个基础架构通常只能针对一种特殊环境来进行虚拟化,几乎不可能存在把互联网这样复杂系统中所有计算细节都隐藏起来的架构。因此,如果在一个具体计算环境中没有对应架构存在,开发人员开发代价将大大提高,甚至无法进行开发。




根据我前面对云计算编程的定义,由于这个方法开发人员无需了解互联网复杂计算环境知识,并且完全依赖某个特殊环境中的虚拟基础架构,无法自由构造出满足各种特殊需求的云计算系统,这种开发方式不能叫做对云计算系统进行编程。




第二种方法就是提出新的应用程序接口和设计模式,并且以开放代码的方式帮助程序员开发互联网系统。由于互联网系统的复杂性,必然要求软件工程研究人员提出大量新的程序接口以及组合这些接口的设计模式。利用这些接口和设计模式,可以针对不同互联网计算环境灵活开发出各种可能的计算系统。在这个过程中,互联网计算环境中的技术细节对开发人员并不是完全透明的,程序员必须对互联网计算环境有所了解;同时由于应用程序接口和代码级成熟设计模式的使用,开发代价并不高。这种方式克服了利用成熟架构开发时开发人员完全被动的地位,给他们提供了利用自己的能力主动适应各种计算环境的可能性。更进一步,如果采取开放代码的方式,开发人员还可以对具体应用程序接口和设计模式进行修改,从而更加积极灵活地面对各种不同互联网计算环境的要求。这种方式的缺陷是对于开发人员的要求明显高于利用虚拟基础架构的方法。但是,根据我的定义,大家可以看出,这种方法初步为程序员提供了对云计算系统进行编程的能力。我的开发环境GreatFree当前的工作就是沿着这个方向进行的。




第三,为互联网计算系统开发环境提出新的编程语言。这当然是最直接的解决方案。Java在起初被提出时,号称是互联网语言。相对于C或者C++,它确实前进了一大步。但是,互联网计算环境发展速度远远超出当时设计者的认识。当前,几乎没有人敢于用Java标准版(Java SE)来开发互联网系统软件了。换言之,传统程序语言已经难以适应互联网系统开发;这也是大量基础架构产生的直接原因。Java以及其他传统开发环境不得不推出企业版,如Java EE,从而降低程序员开发难度。不过,我认为这些做法都是打补丁,并不想为开发人员互联网或者云计算系统提供通用编程语言。如果说在传统单机或者简单网络环境中,程序员可以通过一个计算语言满足应用开发的要求;为什么在互联网环境中,这种技术就不存在了呢?或者说,现在为什么程序员没有可利用的语言来对云计算系统进行编程了呢?计算机科学家为什么会忽视这个问题呢?针对这个认识,一些号称云计算编程语言或者编程环境被提出。但是至少到目前为止,这些方案还远远没有达到互联网或者云计算系统编程的要求;被广泛接受的新的互联网开发语言更是没有。现有的一些新语言(如Go或者Scala)甚至更多在追求语言语法上的简练或者美感。






演讲幻灯片:https://greatfree.lofter.com/post/1d231e0d_1069dcc5




GreatFree应用程序接口:https://greatfree.0fees.us




书和源代码:https://github.com/greatfree/Programming-Clouds




语音课程:https://www.ximalaya.com/63922737/album/5769771




我的博客:https://greatfree.blog.163.com













用户评论

    还没有评论,快来发表第一个评论!