什么是云计算?技术的观点

今天,和一个未谋面的朋友聊起了什么是云计算。按照他的说法,关于云计算的说法五花八门,每一个公司,每一个产品似乎都想吧与计算的标签贴在自己的身上。从技术人员的角度看,什么是云计算呢?

 

这个问题其实非常好,尽管一直从事云计算的基础架构方面的开发工作,但是认真叙述什么的云计算也是个有挑战性的事情。我记得当时的评论是:云计算本质上不是新的东西,先前的分布式计算,网格计算,已经基本具备了云计算的所有的核心要素;虚拟化技术也不是新的。但是虚拟化技术的成熟以及并行计算的普及导致了云计算的广泛使用等等。

 

这些论述其他太过简单化了。就虚拟化技术而言,宽泛地讲,每一层成功的抽象都引出一个虚拟化层,比如虚拟内容对存储的虚拟化,多道程序交替执行对计算资源的虚拟化,java/c#语言执行环境对运行是环境的虚拟化,甚至任何一门语言建立起的基于语法和语义的完整抽象也是对计算资源和存储资源的抽象,如lisp和C的抽象差别等等。我们现在所说的虚拟化仅仅指的是对硬件(包括存储,网络和计算)的抽象,这些技术的雏形在上世纪60年代也已基本确立。之所以虚拟化技术似乎突然普及起来,多半是拜摩尔定律所赐,而另一半的原因,则是真正并行时代的来临。

 

当计算资源越来越丰富的时候,虚拟化导致的开销已经逐渐显得微不足道,但是虚拟化技术提供商仍然想要榨净硬件的每一点潜能。通用操作系统之所以可行是因为其底层的HAL(硬件抽象层)提供了一致而有效的抽象。但是每一中操作系统的HAL多半不一样,所谓的云操作系同,如VMWare的vSphere,Microsoft的Azure等,则为所有支持的操作系统提供了一致的抽象硬件接口。可以想象,完全依赖于云操作系统的实际操作系统将会变得更加简单;由于新加一层的保护,也会更加健壮。

 

但是,和由于硬件进步和虚拟化技术的成熟导致的极大可能性相比,我觉得新的抽象会带给人们更加直观地理解程序和数据,而提供事实上无穷的可能性。截至目前,我们建立的行之有效的概念,直觉,方法都是依赖于已经存在的成功抽象,比如,进程,地址空间,中断,节点,本地和远程文件系统,高可用,网络模型,套接字等完全依赖于我们日常生活可见的单独的机器。对于云计算而言,进程不是单独机器上的应用了,它可能随时分布到不同的计算节点上,甚至一个进程在多个节点并发运行;地址空间可能是全局分区的,而不仅仅局限于单一的机器;异步操作成为常态从而中断可能来自任何地方;节点仅仅有字面的含义;本地文件系统和远程文件系统的差别越来越为不足都,本地可能仅仅是同一文件系统的缓存;基于拓扑的网络模型慢慢转变成基于较大的基于farm的网络簇;基于文本的消息机制成为跨越簇边界的基本协议等等等等。所有这些,都把我们习以为常的概念提升到一个新的层次,这无疑会大大扩展我们的眼界。当一切新的概念已经变得直观,新的应用就会蓬勃出现。

 

对技术人员,特别是编程人员来讲,有最直接的联系就是并行时代的真正来临。一个芯片上集成的CPU数目已极快的速度在增加,如果程序你能充分利用这一特性的话,用户在硬件上的投资就毫无价值。克服这一障碍的工具,以本人看来,就是lock-free的设计模型以及类函数式编程模型的使用。前者通过消除严格的锁而使得模块的线性组合成为可能,而后者这是通过减少副作用而提升代码的并行性。有了这些倚天屠龙,程序员才能真正触摸到云计算蓬勃发展下面的跳动着的强劲脉搏。

 

关于lockfree的设计模型,请参看STM的相关介绍。Tim Harris等的经典论文更是必须的参考。关于函数是编程,特别是是命令是语言中如何发现函数编程模式或者应用函数是编程,Bartosz Milewski的博客覆盖了相关的内容,而且非常易于阅读!本人还特意把关于单子(Monad)的两篇极好的博文翻译为中文,可以在本文的前面找到。另一个是Guy Steele的一个视频,里面提到了编程概念的变化,非常有启发性。

 

欢迎方家的批评和指教。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值