程序员理解“云计算”入门:从桌面开发到互联网开发的思维转变

来源:互联网 发布:淘宝p图兼职 编辑:程序博客网 时间:2024/05/01 12:49

当被要求写写“什么是云计算”、“云计算入门介绍”之类的文章时,本来打算写一篇关于亚马逊AWS服务的基础介绍。然后我就发现其实在过去几年内,这样的文章网上已经很多,而且质量也很好(如亚马逊网络服务(AWS)探秘)。我没什么必要再写一遍了。不过看起来还是有很多程序员对云计算概念有些生疏,又或者有“炒作”的误解。当然这种情况一方面是由于“云计算”在中国还没有成长起来,没有多少程序员实际编写过基于云计算的应用程序。亚马逊的AWS还有Google的AppEngine对中国的支持都不到位,而且这两家云计算的思路还不完全一致,AWS偏向于商业思维,而AppEngine偏向于程序开发思维。另外一方面是由于云计算是个多层次的概念,有硬件网络设备制造商说云计算,电信运营商说云计算,数据中心说云计算,互联网公司说云计算,应用开发商(杀毒,输入法)说云计算,连传统大企业也说云计算,……所以程序员理解起云计算难免遇到凭空想象,盲人摸象的难题。

但是大家对云计算的理解的真正难点可能还是在“从桌面开发到互联网开发的思维转变”上。因为云计算是互联网时代的产物,在单机时代是绝对不会有云的概念。所以在理解云计算的时候,首先要进入到互联网程序开发的思维模式中,然后理解它就很顺利了。不过在国内程序员中,有互联网程序开发思维的很少。甚至包括一些网站开发人员,大家仍习惯于用单机环境下的开发思维去学习一项新技术。这不能怪我们,从学校的计算机教育开始,我们接受的思维就是单机开发,从helloworld到数据结构,都是跑在一台机器上。程序处理数据完毕,退出即可。即便在美国,计算机教育也同样存在这个问题,所以比希利亚的“Google 101”计划 (原文) 才会有如此大的影响力。

让我们看看桌面开发和互联网开发有什么不同吧。这里提出的问题,无论哪家的云计算都是在想办法解决这些问题。也许并不全面,只希望能引起大家的思考:

首先是数据问题。单机上的软件将数据放在用户的硬盘里,这里将数据维护的风险完全交给了用户,程序员不用考虑总总可能的错误。如果硬盘损坏了,或者空间满,或者数据被窃取了...,都是由用户自己买单解决,用户在最差情况下,就是重新买台机器安装软件运行,没有程序员的事情。但是一旦编写互联网程序,情况就完全不同了。任何程序,只要将用户的数据写在了服务端的存储空间内,就要对数据负责。数据备份,数据安全,数据恢复,这些都是对用户的承诺。

用户请求并发问题。单机环境下编写一个helloworld程序很容易,如果要放到服务器端呢。可能有人会说这也很容易,无非是把程序放到Web服务器上运行,输出结果是html。但是即便是这么简单的程序在互联网开发模式下,也要问个基本问题,就是每秒请求数是多少,如果这个程序有1亿人在同时使用呢(比如奥运网站上的一段输出)?那么就要用很多服务器来支持,还要做负载均衡。可是访问量往往是变化的,中午有一亿人访问,深夜可能就一两个人访问,服务器的数量要如何确定呢?一直保持最大配置?不是很浪费么?

可靠性的问题。用户在使用单机软件时,每人一个机器,程序和数据放在上面,机器出现故障对于单个用户来说是偶发事件,用户自己处理,自己想办法维修。但是在互联网开发方式下,情况不同了,用户的数据和程序被集中起来,数量如此大,需要的服务器就多。当大量服务器在同时工作时,机器损坏就不是偶发事件,而是必然事件了。机器坏了或者不够用了,怎么办,赶紧再买台机器,重装程序,恢复数据运行起来。请问这个时间能快点么?用户是等不及的,最好只用几分钟或者完全不用等。

还有一个大问题,基本是每个互联网应用都会用到的。当用户数据大量集中存放在服务端的时候,就会考虑进行数据挖掘。尤其有一种数据常被统计,那就是用户行为数据。在单机环境下编写的应用没有搜集分析用户行为的需求,但是当在互联网环境下的应用,这种分析非常有必要。对网站的流量和用户输入的分析,往往能够看出产品需要改进的地方,以及潜在的用户需求。大量的数据分析,用单机是来不及完成,无法想象一天的网站流量统计,或者搜索引擎内容更新周期,用一台服务器用几周甚至更长的时间才能得到结果。所以必须要用多台服务器完成。不仅仅要加服务器,而且编程方法也要改变,程序要能够分布式并行处理数据,最后汇总成结果。Google在这点做出杰出贡献,提出了Map Reduce的编程模型很方便解决类似的问题。

也许有网站开发程序员,看到这里会说,这些问题也遇到过,也用自己的方法在解决。不过普通的解决方法都会花费很多金钱和时间,如果用云计算可以低成本一揽子来解决上面等等问题,可以让程序员更多的关注于业务的实现,而不是在这些共性问题上花费时间,那何乐而不为呢?云计算是如何做到低成本的呢?云计算会建在很大的数据中心群上,里面运行着很多的云计算应用,那么就可以虚拟化的技术和统筹的方法,让繁忙的应用得到更多资源,当应用变得不在繁忙,就可以将资源调配给其它需要的应用。综合起来,提高了资源使用率,降低了每个应用的运行成本。所以亚马逊AWS上,应用使用服务的付费都是采用按实际使用付费,就是应用实际使用了多少资源,就付多少钱。这个计费方式,要比托管主机,主机租用,虚拟主机之类的方式要划算的多。这就是云计算的生命力所在。


相信带着上面的问题去学习亚马逊AWS,或是Google的AppEngine,又或是微软的Azure。就不难理解它们服务的作用。

原创粉丝点击