Sunday, April 24, 2011

“拨云探月”——云计算话题浅析(一)

【本文面向读者无需有专业知识。读过本文后可以茶余饭后与人神侃,忽悠“专家学者”问题不大】
时下,云计算是个热门话题,无论学术界、工业界还是商业界,凡是跟云计算扯上点关系的就能吸引人的眼球;反之就觉得“科技”含量不够。无数沾边或者不沾边的企业、专家都纷纷叫嚷云计算,却少见有人静下心来具体分析分析云计算到底是怎么回事。
本文试图通过云计算的起因、关键技术点和未来发展趋势这三个方面对云计算进行浅析,剥去那层“神秘”的面纱。

云计算起源

首先为什么会有云计算?
常识告诉我们,这个世界上没有无缘无故,如果一件事情违背了常理而找不到原因,那么一定是有人在背后捣鬼。
那么云计算的出现究竟是时代发展的自然趋势还是人为的巧合呢?
实际上,计算机的出现也不过几十年而已,在这短暂的几十年里计算模式发生过数次变化。
在巨型机/大型机时代,计算机只能在政府部门或者企业等中才能享有的。一方面造价昂贵、体积巨大、维护成本高,另一方面只有政府部门或者企业等大规模组织才有快速计算的需要。后来虽然有了早期的互联网,但使用计算机仍然是少数人圈子内的权利。这个时代的特色是昂贵集中的计算机+低速的网络+个人用户。
随着技术的成熟和生产工艺的提高,计算机的体积缩小、性能提高、配套的软件系统成熟,微型机(PC)终于慢慢普及开来。个人对于计算机的需求一下子发展起来。很难说是计算机推动了个人生活方式的改变,还是个人生活方式的改变增加了对于计算机的需求。总而言之不光企业,普通生活中也越来越离不开计算机了。这一阶段的计算模型是低速的网络+强大的个人终端。
从巨型机时代到微型机时代的转变有几个关键因素。一是集中式的高性能计算机造价太昂贵,个人用户人手一台不现实。那么能否大家一起share?早期低速几十k的互联网根本无法提供足够的分布能力。这两个关键的因素决定了用户个人终端的出现。可以说,计算由中心转移到终端是用户对于计算的急速增长的需求和脆弱的联网能力之间矛盾无法调和的必然结果。
而到了网络技术成熟的21世纪,解决这一矛盾有了新的可能方案。那就是将计算放到远端(云端),用户减少客户端的成本。这一看似复古的模式实在有着巨大的优势。于是乎,云计算的概念一经提出,就迅速红遍全球,当然这里面也有名字起得好的因素在。
从前面的分析我们可以看出,计算模式的改变并不是某几个人或企业能决定的,根本上说还是技术水平来决定的。是的,一点都不夸张。抽象的看确实就是生产力水平决定了上层的使用模式,即生产关系

云计算与经济

天下熙熙,皆为利来,天下攘攘,皆为利往。
就在写作本文的时候,全球最大的云计算供应商amazon的数据中心出现了严重的故障,造成多家互联网客户服务受到影响,为全球云计算市场增添了一丝阴影。
确然,如果将来大家都绑到云计算上,一旦发生故障将是十分可怕的。这听起来远没有将数据放到自己本地的机器上更为安全。那么为什么云计算的发展还是喷薄如斯呢?
如果从“利”,即经济的角度去看待这一问题,会发现一些有意思的结果。
大家都知道在经济史上,货币的出现是一个经济体系进入较高阶段的重要标志。为什么货币的出现如此重要?其实不在于说减少运输成本啊,市场调控啊等等因素。这些因素也很重要,但是更为关键的在于,货币这一体系极大的解放了生产力!
是的,听起来很夸张,但事实就是如此。在货币作为物品的代替物的时候,在稳定的金融社会,货币自身实际上就代表了生产力的成果。我们运用货币,实际上就是将生产力重新整理,投入新的生产的大循环过程。虽然说,在出现货币之前,我们干的也是这件事情。但这一过程从来没有如此的方便和有效率过。离开了货币,就相当于在生产大循环的某个环节掐住了喉咙。试想,如果一个人要吃饭,就必须自己种地,一个人要吃肉,就必须自己打猎,这一的社会生产力怎么能提高?而方便交换过程的重要手段,就是货币。
更为拔高一些,就是生产关系解放生产力
对于云计算模式同样是如此,在计算能力被集中管理的情况下,资源可以更为有效的投入到需要的地方去。用户获取计算资源更为便捷和便宜,也更加有效率。因此,云计算的出现,在经济上是一种必然。也因为如此,不同于当年的网站或现在的广告模式,云计算在网络泡沫后必然会存活下来。
当然,更深入一些,在现代金融体制里,形成垄断后的金融大鳄们利用货币的手段可以巧取豪夺,对于未来云计算的发展,是否也会有类似的事情出现呢?

云计算与数据中心

那么云计算与数据中心又有什么关系呢?
在云计算时代,用户只要通过客户端告诉云端自己的需求,云端完成之后就可以将结果push给用户。这里客户端起到了简单的信息解释的作用,并没有太多技术含量,而真正的快速解决问题需要一个强大的云端。
这个云端就是数据中心。
前面说到云计算模式是看似复古的模式。很重要的一个区别就在于提供计算服务的方式。在巨型机时代一台多用户的巨型机在机房里,各个用户登录上去,自己安排好任务然后让机器执行计算。而在云计算时代,则是几十万台计算机构建的数据中心共同为用户提供服务。而且数据中心内对用户是透明的,用户甚至根本不知道也无需知道自己的任务在哪几台机器上完成。
那么,为什么要用数据中心替代大型机呢?
这个问题在网格计算发展起来的时候曾经有过一个答案——成本。巨型机的成本实在是太高了,以至于只要拿出一部分钱购买大量廉价的PC来搭建网格就能提供接近的计算能力。看起来从成本上考虑,云计算是有太大的优势。但,这并不是最根本的原因,需知为了连接这些PC,数据中心中大量的昂贵的高性能交换机占据了大部分的成本。
那么根本的原因是什么?
说到这里,我们提下著名的摩尔定律。这一定律预测了几十年的芯片产业发展,到了近些年终于不怎么灵了。单块芯片的频率已经接近制造工艺的极限,进一步提高意义不大且成本惊人。Intel等企业早早就看到了这一点,这才提出多核的概念。可以说,多核不仅仅是用户体验改善,根本上是生产工艺局限的必然。看到这里,相信不少人已经明白了。
在信息时代的今天,要成为一朵拥有大量用户的云,所提供的计算资源(和存储资源)是惊人的,这根本不是几台巨型机就能提供的,服务所需要的稳定性也不是巨型机能保障的。没有办法了只好退而求其次,用廉价的机器搭建数据中心。也正是这一模式,成就了Google、Amazon、Facebook等新兴企业。
一个关键的问题是,这一模式是否必然成立呢?
这一问题的核心在于大量低性能节点构建的数据中心能否满足我们的庞大计算需求。
大家都知道蚂蚁搬家,有的蚂蚁搬运树叶,有的蚂蚁搬运粮食,每个蚂蚁搬动的东西有限,大量的蚂蚁一起工作就能产生惊人的搬运能力。这跟云计算的模式十分相似。但是我们知道,蚂蚁搬家再厉害也很难搬动大的石块。为什么?因为石块不能被分解开,成为一只蚂蚁可以搬动的单元。
同样,云计算模式也无法解决“石块”问题。如果一个任务根本无法分解并行进行,云计算的数据中心再庞大也只有仰天长叹了。幸运的是,我们现在碰到的大部分计算问题都可以采用这样或那样的方法来分解,然后并行进行,也正是这一巧合,让云计算在我们的世界上成为了可行。
ps, 本系列的下一篇将侧重分析数据中心中的核心技术和问题,希望关注技术的同仁不要错过。

Wednesday, April 20, 2011

NSDI 2011论文选读

1、ServerSwitch: A Programmable and High Performance Platform for Data Center Networks

作者:MSRA

概述:用通用芯片为未来DCN平台提供更灵活、可编程且快速的交换,并支持流控等功能;

目前问题:软件交换仍然不够快,且延迟大;fpga-based编程复杂度高,且昂贵;

基础:通用交换芯片已经支持编程;PCI-E接口提供CPU和IO子系统之间微秒级延迟

架构image

 

2、Efficiently Measuring Bandwidth at All Time Scales

作者:UCSD和Cisco

概述:解决细粒度的(高速)带宽抖动的测量问题;

目前方案问题:要么内存占用太多,要么是为某个粒度或目的设计,不能在全尺度上测量;

思路:提出两个算法,一是在不同尺度(指数比例)上用计数器统计,一是根据带宽动态分块,速率越高,自然需要分的块越多,在统一时间单元上块就越窄。

3、ETTM: A Scalable Fault Tolerant Network Manager

作者:University of Washington

概述:提出一种scale、fault tolerant、包粒度上的网络管理机制

目前方案问题:middle box功能单一、位置局限在网络边缘;of不支持复杂的包处理,依赖支持of的交换机

基础:交换机可控性增强、终端支持安全控件等

思路:终端安装软件,利用分布式的交互来实现逻辑上的集中控制

架构:

image

4、Design, Implementation and Evaluation of Congestion Control for Multipath TCP

作者:University College London

概述:为Multipath TCP提出一种流控机制

设计原则:公平性、跟目前的TCP的合作性

实验:在multihomed servers、DCN 和mobile clients中进行实验验证

5、SliceTime: A Platform for Scalable and Accurate Network Emulation

作者:RWTH Aachen University,Germany

概述:提出一套可扩展、准确的网络模拟平台,支持超过10K的节点实时模拟

目前方案问题:实时性很重要,但现有方案计算复杂性太高

设计:

image

Monday, April 11, 2011

从不确定原理到存在性假设

不确定原理

海森堡不确定性原理英语Heisenberg Uncertainty Principle,有時也被譯成海森堡測不準原理)是由德国物理学家海森堡于1927年提出的量子力学中的不确定性,具体指在一个量子力学系统中,一个粒子位置和它的动量不可被同时确定。

位置的不确定性 \Delta x\,\! 和动量的不确定性 \Delta p\,\! 是不可避免的:

\Delta x \Delta p \ge \frac{\hbar}{2}\,\! 

其中 \hbar\,\! 約化普朗克常数

类似的不确定性也存在于能量时间角动量角度等許多物理量之间”

-----摘自维基百科

这一原理一开始是数学推理上的产物,并在相当长的时间里无法得到一个合理的物理解释,一度被视为一种观察者效应。

实际上,不确定性原理确实很容易被理解为一种观察上局限。现有的观测技术存在着物理意义上的精度下限。例如要观测一个粒子,我们至少要依赖有其它粒子(常见的如光子)与其相互作用。对于宏观物体来说,光子不会对其产生显著可见的影响,但是到了微观粒子尺度,这一影响就不可忽视了。入射光子会明显干扰到被观测对象的行为。

这一理解往往导致一种错觉,就是真实世界其实并不存在这一局限,而只是因为我们观察手段的有限。换句话说,虽然我们无法确定它,但它在想象中应该确定的存在在那里。然而,随着量子力学的相关进展,人们越来越意识到,这种不确定性竟然跟量子力学是相容的,或者说,甚至是一个必须成立的基本假设。那么,这是否意味着我们的世界在真实意义上本身就存在某种不确定性?这一问题现在尚无人能给出一个明确可信的答案。

数十年后,其他的学者在其他一些新兴领域也发现了类似的不确定性原理,包括信息论、控制论。种种迹象似乎也都暗示着同一个假设。

系统的演化法则

我们的世界,大到宇宙,小到生物体,都是无比精密和复杂的系统。

作为新兴的21世纪的科学,系统科学的着眼点在于整体。任何系统无非包括两大因素,一是组成单元,一是组织结构。通过在不同层次上去分解,同一个系统可以被不同角度的理解和分析。而通过不同的组织原则,同样的单元可以构建不同功能的系统。

一个典型的大系统就是地球生态圈。在经历了几十亿年的演化后,地球从荒凉的无机世界逐步演变成繁荣的今日世界。而从物理角度去看,地球自身这个大实验瓶,在几十亿年里几乎是完全独立的,输入的无非是各类辐射(包括阳光)或者星尘。一个几乎封闭的系统,自身演化能到今天这个样子,不得不说是个奇迹。

达尔文说生物进化是自然选择的结果,而提供自然选择样本的根源则是各类变异。那么自然选择的法则是什么呢?变异的动力来源又是什么呢?

第一个问题达尔文曾试图利用基本的淘汰说来解释,第二个问题则没有能给出回答。

实际上,用控制论的角度去看,任何系统都动态的处在一个个状态的演变中,这些状态有些是不稳定的,在随机扰动下很快就偏离出去;有一些是相对稳定的,能够抵抗住一般的小扰动的干扰。给定足够精确的系统模型,给定足够准确的干扰序列,我们就可以预知其任何时刻所处在的状态。

利用这个观点去看生物的进化,也无非是个类似的过程。生态圈作为一个完整的系统,存在着自身的基本单元(风雷水火。。。)和组织法则(各种物理定律),在各种扰动的影响下,不断从一个稳态变化到另一个稳态。系统偏离稳态所需要的扰动往往是剧烈的,可想而知,每一次的演变引起的可能都是天翻地覆的变化,例如恐龙时代的结束。

用控制论的观点很完美的解释了生物进化的过程。然而接着来谈第二个问题,变异的动力来源(扰动)是什么?不可否认,来自地外的影响占据了一部分,但毕竟有限。更主要的扰动应该是来自内部……

是的,不要惊讶,很可能不确定性原理所表述的,正是这个世界演化到今天的根本源动力。

存在性假设

现在,我们要继续探讨的,是哲学上一个绕不开的话题。

世界是确定的还是非确定的?

这不仅仅是个饭后无聊用来消遣的哲学问题,更是个严肃的自然科学问题。

如果我们承认世界在本质上是不可确定的,概率存在的(似乎听起来符合“科学”些),那么科学的尽头已然出现了,不确定的东西按照我们的逻辑是无法去研究的。

如果世界是可确定的,真实意义上的,那么,我们其实否认了自身的存在,因为这意味着主观其实不存在,我们下一刻的任何行为都是被预设的,听起来似乎不那么容易被接受。

我们在前面的讨论中,暗示了世界低层次的存在很可能是不确定的。而宏观层次因为组织演化法则的约束,在某种意义上实际上是概率确定的。

这里就有一个很有趣的问题,人的意识应该属于微观层次还是宏观层次?或者说,人的意识是否是宇宙这个大系统自然演化状态的一个产物?如果承认了这一假设,那么就认可了带有悲观色彩的论点;而不承认这一点,又无法用现代的科学体系自圆自说。

所以,信仰宗教的人是幸福的。

一切搞不明白的事情,都可以丢给上帝。

Python 珠玑

lambda

f=lambda x,y…:exp(x,y…)  //like x+y
直接定义一个函数,如果调用f(x,y…),等价于获得exp(x,y…)的值

filter

filter(bool_func,[d1,d2,d3…])
返回数据序列里面满足bool函数的子序列

map

map(func,[d1,d2,d3…])
返回[func(d1),func(d2),func(d3)…]

reduce

reduce(func,data_seq[,init])
对序列中元素迭代执行func,即每次取当前计算结果和序列中下一个元素作为执行对象

list comprehension

[expr1 for k in list if expr2]

Time counting

import time.clock
time1 = time.clock()
Dosth()
time2 = time.clock()
print (time2-time1)

to be updated…

创新无处不在

何为创新?

并非要如图灵、特斯拉等大师一般开创一片崭新的天地,影响后世数百年。

用现有的技术解决别人已经解决过的问题,但是比别人做的要好、要便宜就是创新。

经常留意生活,创新的点子其实无处不在。记录下前阵琢磨出来两个可能创业的点子。

智能车窗

背景:汽车行业是蓬勃发展的一个大产业,几百年的机械技术已经成熟,下一步普通汽车也必然向着智能化、电子化的路线发展。但是除非是很高档的昂贵车型,普通汽车还难以做到智能化。但我们可以面向几个亟待解决的问题,提出几个容易实现的方案。

问题:GPS导航。没错,就是GPS导航。现在的GPS技术已经十分发达,但传统的GPS导航模块通过在一块小平板上给出虚拟的路线,然后司机来人工对应,十分不方便,且可能影响视线。

思路:为何不把GPS直接放到车窗中去呢?增强现实?如果在车窗投进的车外路况上通过叠加的方式添加GPS导航信息,例如一条绿线来实时的指引正确导航的道路,该是多么的自然,多么的COOL!

解决:考虑到实用性,几个难点,一个是要有摄像头来跟踪司机的眼睛角度,实时准确叠加;一个是如何在车窗上显示,一种方案是采用有电子元件的车窗,但造价不菲,一种是有个微型投影仪来做投影,需要考虑反射效率。简化版本甚至可以在大屏幕手机上做demo,例如iPhone,作为一小块带有显示功能的小车窗。

家庭网盘接口

背景:不知道大家有没有注意,现代的家庭环境,离不开计算机,而有计算机的家庭,往往都有一个共同的需求,就是存储管理。不少人专门弄一台老机器,挂上几块硬盘,作为家庭共享的资料服务器。

问题:用老机器来挂硬盘,不得不说是牛刀杀鸡了,不光浪费机器自身性能,而且耗电、稳定性都成问题。能否有一种便宜而方便的方案?

思路:如果我们有这么一个网盘接口,一头可以支持USB口(目前移动硬盘等的通用接口),一头支持网口,然后往交换机上一插,能自动的获取到IP(提供简易的网络访问界面来配置),问题自然解决。

解决:考虑到成本,就是一个小单片机跑一个简化版的os,大学相关专业的SRT学生都可以搞一个demo出来。主要解决的问题是io读写的问题,简化版的os如何支持好多种的磁盘格式,例如windows用户常用的fat,ntfs之类。市场上还没有类似定位产品,有提供冗余磁盘阵列解决方案的,售价都要数千元rmb,而本方案成本可以控制在百元以下,极具竞争力。