硕鼠的博客站

范路的博客主站,时而会发些东西。

Archive for 12 月, 2011

国人所发明的各种各样的云计算

云计算其实是中国人发明的。

很多人看到这里可能就笑了,云计算这么先进的东西怎么会是中国人发明的呢?

中国的IT发展史,或者应该说是各个政府职能部门的IT应用发展史更加合适吧,就是一部不断集中再集中的历史。在不同的阶段,根据当时计算机、网络和软件技术的发展,进行不同层次的集中。县级集中、市级集中、省级集中、全国大集中。银行集中、税务集中、保险集中、电信结算集中。中国政府的IT应用史就是一部集中史。而将原来分散的应用,集中到一起。分散的节点,通过集中的服务,统一的处理原来在本地处理的业务,这就是一个将本地应用虚拟化到云端的过程。而这个过程又是受到了中国几千年集权思想的引导而形成的。所以说云计算是中国人发明的,也不算过分。总比说全天下的伟人都是韩国人要更靠谱一些。

云计算,现在好像不云一下都没法计算了。各大IT厂商都在纷纷推出自己的云计算的产品和服务,至少也会推出一些似是而非的云概念。

这里要讨论的并不是谁是真王麻子,谁是老王麻子,而哪一个是又真又老的王麻子的问题。而是想讲一下各种王麻子产生的过程和故事,他们之间的关系。以及大家通常是根据什么原因来选择不同的云服务厂商,这些运行在不同云服务平台上,都从这些平台上得到了些什么。

常见的云

云应用

现在大家经常能够在网络和媒体上看到的云。有云电视、云手机、云杀毒、云输入法、云邮件、云中相册、云中通讯录、云安全,甚至是云电子商务平台什么的。这些其实都是云应用,是面向最终用户的,也就是说不需要再编写任何程序,就可以直接被使用的云服务。最终用户不论是个人还是机构,都可以直接调用、使用这些服务。

由于是向最终用户提供的服务,所以这些应用在很多的公众媒体上投放了很多的力量,市面上能够看到最多的也就是这一类的云服务了。

所谓的运营用,分为几类。有的却是是将某些分散应用集中到云端去了。有些则仅仅是使用了其他层次的云服务构建的应用。或者在应用中提供了一些其他层次的云服务。这其中有很多云应用都是在中国独一无二的,只有作为云计算的发明国家,才会有那么多独特的云计算模式。

开放平台

这些应用,通常会在用户积累到一定程度时候,开放出API来。让其他个人或团体帮助他们开发一些辅助的功能或扩展。毕竟一旦大家开始使用一个服务或应用,就总会对其产生出这样或那样的需求。这些需求中有些是大多数人需要的,那么运营那些应用的机构会开发升级的版本来实现这些需求。另外,就是有些需求只为一部分人所需要,并不是所有用户的需求,那么就可以开放出接口来让其他人来开发。

当API聚集到一定程度,就会形成一个有规划的API包,这就是开放平台的由来。

现在国内腾讯、阿里、盛大、新浪等这些聚集了大量注册用户的服务商,都放出了庞大的开放平台。

这些平台功能之庞杂,变化、迭代之快,也绝对是世界范围内绝无仅有的。也算是一种中国特色了吧。

App Engine

有些人使用这些开放平台上的服务,开发出了新的应用。一开始的时候,这些应用还是跑在提供这些服务的各自的服务器上。为了能够提高这些应用的效率,很多IT服务商提供了App Engine,也就是说允许服务提供者开发一段代码,直接跑在提供开放平台的服务商的服务器上。这样做的好处有两个:第一、新服务提供者的开发量极大的降低了,很多重复模块不需要重复的开发;第二、这些程序运行在距离核心服务和应用很近的地方,效率和安全性都得到了有效的提高。

现在Google、新浪、腾讯、阿里提供的就是这种云。

根据平台的要求,开发者开发一段代码。这种代码要受到平台的限制,比如新浪要求的是php代码,google要求的是java或python代码。然后使用服务商提供的数据库存储数据,比如新浪使用的是一种NoSQL数据库,而腾讯提供的则是MySQL。再使用他们各自提供的其他相关服务,比如腾讯和新浪都提供了不同的,类似于Memcached的cache服务。然后,才可以连接开放平台所提供的各种API接口,比如调用新浪微博的认证,并向微博中发送内容,或读取微博数据进行一些统计和分析等。最后,这些代码将被上传到google、新浪或腾讯、阿里的服务器上。AppEngine通常会提供一个控制面板,来帮助开发者管理上传代码的版本,以及控制其启动、停止,监控这些代码的运营状态,甚至是计费。

Google App Engine上的应用,五花八门,杂乱无章。再看看国内的情况,新浪SEA上的程序,基本上100%都是为新浪微博用户服务的,而腾讯和阿里上的应用也基本上都是为他们各自的基础服务,提供补充的。由此可见,国内互联网公司对App Engine的理解,要比美国人先进得多啊。

虚拟机

上面的App Engine方式,用起来实在是太憋屈了。有一种更加自由的方式,那就是有些云计算服务商直接提供虚拟化的基础设施。比如虚拟服务器、虚拟硬盘等。

亚马逊和盛大云,所提供的就是这种服务。开发者拿到的就是虚拟的服务器,开发者可以自由的决定在上面使用什么语言,什么架构来开发应用。

由于国家为我们建立了墙,可以很好的对天朝局域网进行保护,所以如果有人将应用放在亚马逊的云上,这个应用在过国内访问的速度将是任何人都无法忍受的,甚至还会有很多服务,突然就无法访问了,比如dropbox。所以国内的用户,或者是国外那些想要开展中国业务的用户,最佳的选择就是直接购买类似于盛大云这样的公司提供的云主机服务就好了。对于国人来说,根本就不需要知道亚马逊云,因为上面最著名,最有趣的应用在国内几乎都是无法访问的。越是有趣的应用,在国内能够被访问到的几率越小。

大家是怎么云起来的

以前本没有路,走的人多了自然也就形成路了。以前没有云,后来中国人实在是太喜欢集中,太喜欢统一了,于是就有了云。看来路是被走出来的,那么云到底是怎么来的呢?通常的、国际化的解释会从分布式计算讲到SOA,再到亚马逊宣布AWS,然后是google的云平台等等。这仅仅是美帝国主义为了掩盖他们剽窃中国人聪明才智所作出的掩饰。其实即使是在上面提到的这些公司里面也不乏大量的华人工程师、架构师、设计师。说任何一个美国软件公司的发明创造是中国人的发明,都是说得过去的。比如亚马逊著名的存储服务S3的构架师就是个中国人。这个人就是现任盛大云老总的何刚。老一辈的无产阶级革命家从美国回来建造两弹一星,现在也有在美国工作的科学家,回国建设云计算。

将应用通过虚拟化的方式进行集中

最标准的云服务,比如google document、salesforce。原来每个人都要在自己的电脑上安装office之类的文字处理软件的,现在不需要了,这些功能被虚拟化到云端了,虚拟化到google document上面去了。原来上些规模的销售型公司都要购置CRM(客户关系管理)系统的,现在也不需要了,只要直接使用salesforce的服务就好了。这就是云服务,或者叫做SaaS(软件即服务)。

集中过程或集中之后提供的API接口

服务已经被虚拟化到云端了,但是既然云计算是中国人发明的,也就必须符合中国人的基本哲学,那就是众口难调。服务集中了,但是总会有一些不同地区或人群的特殊需求需要解决。那么下一件事情就是制定标准和开放API接口了。最早想到这个问题的应该是秦始皇,他统一了度量衡。看看,我又找到了中国人发明云计算的证据了吧。

google API、Facebook API、新浪API、腾讯API、盛大的API Pool,这些都开放出来了,可以让不同的个人、团队或机构,根据各自的需要,开发出各种相关的应用出来。

通常API都是在应用运营成功之后才会推出来,因为使用一套API或框架,是需要消耗学习成本的,在没有足够利益(海量有价值的内容或用户)吸引的情况下,是不会有人愿意投入的。也有特例,那就是API所提供的服务是一些类似于存储之类的基础服务时除外。

将使用开放平台的应用再集中到一起

因为云计算是中国人发明的,所以那种大集中,在技术允许的情况下不断集中的倾向一直都在影响着云计算的走向。很多人通过使用开放平台上面的服务,开发出了许多新的应用和服务,这又是一个发散的过程了。于是在分久必合,合了之后还可以在更大的范围内再合的典型中国思想的指导下,App Engine诞生了,现在可以将那些分散出去的应用再重新集中回服务商的服务器上去了。每一个服务商,都是以“四海之内,莫非王土;率土之滨,莫非王臣”为目标而不断增长的。

GAE——google App Engine、SAE 新浪App Engine就是这么产生的。

这就是云计算说明文档或教程上经常出现的PaaS(平台即服务)了。通常,开放平台就能够算是PaaS了。

直接提供底层架构服务

总会有些团队希望开发出不同的应用来,不希望被各种App Engine所限制,希望发展自己的用户,而不是为其他平台的用户服务。甚至还有些团队心怀远大的理想,希望能够在将来的某一天,自己也能够开发出能够吸引到足够用户的应用。

比如Evernote或Dropbox那样的公司,现在已经吸引到了足够多的用户,他们也开放出API,希望其他人帮他们写出更加个性化的扩展,或为其他应用提供特定的服务。

这样的公司或团队,就对App Engine提出了质疑。

于是,直接提供底层架构虚拟化的服务就出现了。也就是说直接提供虚拟云主机和云存储、云端数据库等底层架构。这就是IaaS(基础设施即服务)了。

现在腾讯和阿里提供了一些介于基础IaaS和PaaS之间的东西,这其中的区分方式就在于是否限定开发者的开发语言和框架,开发者得到是否可以自由的使用裸服务器。他们在提供裸服务器的同时,主要推广的其实是一种被他们叫做“网站云”的东西,也就是使用php、mysql架构的PaaS。

如果说程序运行的控制面板是App Engine的一个标志(App可以随时根据开发者的需求上线、下线)的话,IaaS的一个标志就是按需计费,按小时计费。现在腾讯的云主机是按照天计费的,而阿里的有些服务更是按月计费的。

选择不同的云平台

普通用户

普通用户是没有选择的,他们只能选择开发好的云应用或在开放平台的基础上开发出来的,或架设在云主机上的云应用。

开放平台通常绑定一些资源

上面说了,选择开放平台是有成本的。所以那些资源不好的开放平台是没有人选择的。那么人们如果选择开放平,则是为了得到开放平台上的那些资源。

比如选择新浪开放平台的人,都是看中了新浪微博上面的海量用户、内容。选择腾讯平台的人,则是看重腾讯的十亿账号。选择盛大开发平台的,则是希望能够得到盛大十多亿的预付费账号,以及这些账号上以亿万计的预支付现金。

既然开发者是冲着这些资源去的,那么选择不同的平台,也就是为不同的用户群体在服务。最终,即使应用成功的赚到了钱,用户也还是属于平台的,并不属于应用。有些应用希望为不同平台上的用户服务,于是他们就会将应用部署到不同的PaaS上面去,这就导致了在同一个应用中的用户群体的认为割裂。就像是同样的手机用户,就会分为移动、联通、电信用户那样,而且不仅如此,手机号码还是属于移动公司的,是不可以被用户带着走的,那么如果希望为这三家移动运营商的用户提供应用的话,就必须将系统分别搭建在三家运营商的平台上。

这也是社会分工的一种,有人提供了平台,就要有人在上面做应用赚取利润。提供平台的人得到用户,使得平台的价值上升;而提供应用的人,则实打实的赚到了现金,并通过对不同平台用户的分析,得到了更进一步的数据,以便能够做出更加好的应用,术业有专攻。

在这个过程中,AppEngine只是PaaS的一个延伸。归根结底还是资源吸引了开发者。

底层基础设施的服务,是完全中立的

又要说到那些有理想,追求自由的开发者了。中国人大多都是很有理想的,比如人人都想当皇帝也算是一种很民族的理想吧。这些人就会选择完全中立的IaaS,不希望受到限制,期望能够积累自己的用户,并在将来的某一天中,自己也能成长为google、新浪、腾讯,甚至是盛大那样的公司。

结论

云有好多种,这些云是在中国人根深蒂固的中央集权的思想引导下,逐步演化产生出来的,适应于不同类型的用户和应用。不同形式的云,应该还会并存很长的一段时间,这是一个社会分工不断细化的过程,是社会生产力上升的一个标志。每一个层次的人,专心致志的做好自己的事情。选择任何一个层次的云计算,不论是选择构建云计算的服务,还是使用这些服务为最终用户提供服务,这并没有高低贵贱之分,只是社会分工不同罢了。

当然,中国人也还会凭借着自己的聪明才智,不断的创造出更多,很稀奇古怪的云应用和服务方式来的。

云计算是一种真正革命性的,会真正对每一个人都带来影响的东西。就像中国人的其他发明那样,不论是否理解,不论是否喜欢,都必将为人类带来全新的未来。

人脸识别API和人脸识别应用

Face API logo 今天在http://openpk.org 上的 #盛大云计算大赛# 创意投递中,看到了一个非常有趣的创意,叫做Face-API。其实前几天 @孤云大兵 同学提交创意“明星脸”时还有人在评论“这个技术门槛不低,要如何实现相关技术”的问题?当时孤云大兵表示准备去看一看论文,找一些相关的算法,不料今天就有人直接送服务上门了,真是无巧不成书。

• Face-API的介绍

Face-API是基于云主机提供的一套实现人脸识别服务的开放API。

Face-API的工作方式是这样的:首先,调用这套API的应用要将照片上传到云端;然后Face-API会在云端进行人脸检测,即使是合影,只要人脸所占像素达到了识别的标准,就会被一一检测出来;检测到人脸之后,根据五官的角度和比例来判定人脸在照片中的角度;最后一件事情就是进行人脸聚合,计算机是无法判定哪张脸属于哪个人的,它能做的仅仅是将同一个人的人脸聚集在一起。

Face-API将聚合的信息发送给调用它的应用,然后就会删除上传到服务器的照片,仅仅保留下聚合之后的人脸特征信息。当下次该应用再传输照片上来的时候,只需要和留存的人脸特征信息库进行比对,就可以知道这些新照片中哪些人脸以前曾经被识别和聚类过,并再次进行聚类。

到此为止,计算机能做的事情已经结束,操作权再次交回用户手中。也就是说,用户要自己将识别出来的聚类与具体的人关联起来,以及进行少量识别结果的校对。在这个人工参与环节之后,才算是完成了人脸识别的完整过程。

在此之后,应用还应该将用户反馈的信息(尤其是如不同聚类其实是同一个人、或某个聚类中有个别照片有误)反馈给Face-API服务器,以便服务器对算法进行校正,以提高今后继续识别的精确性。

当然,这并不是一个完全的训练过程。比如一个儿童,随着年龄的增长,其相貌变化是很大的,就算是人隔上几年看到一个儿童也不一定能够认出来,对于计算机系统来说,能够做的也就是记住“这是某某人,那也是某某人”,足矣。

上面解释的是最基本的服务流程,真正使用起来还要略微复杂一些。Face-API除了能够提供基本的人脸检测功能之外,还准备提供相似度比较、性别判定及年龄判定等,以后应该还会不断添加新功能进来。

• Face-API的用户隐私保护

如果需要进行人脸检测,就必须要上传照片。但是对于Face-API来说,系统并不知道这些照片上的人具体是谁,只是会进行人脸聚集。应用不断地传照片上来,Face-API服务器只能知道这次传上来的照片中有某个人脸和以前传上来的某个很像。

当用户将某张照片与某个人进行关联之后,这个数据并不会上传到Face-API服务器。对于Face-API来说,某一个聚类的照片,所指向的那个用户永远都是一个唯一的随机数,而不是某一个现实中存在的具体的人。

用户上传的照片,在识别之后会被删除,Face-API服务器上只保存人脸的一些特征信息,并不会长期保存用户的原始上传照片。比如一个照片流式的应用,本身就会要求用户上传照片,那么只需要在应用的服务器收到用户的照片之后,传送一份到Face-API服务器进行人脸检测和识别,应用可以保存用户的通讯录或照片中那个人的具体信息,但是这些东西Face-API的服务器上都不会保存。

在Face-API的接口上,允许应用对照片进一步进行用户标识,也就是说应用可以告诉Face-API服务器,哪些照片是属于一个用户的,而哪些是属于另外一个用户的。在Face-API的服务器端,将实现严格的用户数据隔离,一个用户的照片,只会和这个用户自己的照片进行比较和聚类,在比较和聚类的过程中,不同用户的照片是隔离的,这就在最大程度上保证了用户隐私的保护。

• Face-API和云计算和移动互联网

人脸识别技术在PC端已经有一些案例了,比如苹果的iMovie和Google的Picasa都带有人脸识别功能。但是,在移动互联网应用方面、在移动设备上,人脸识别运算(特别是最后的人脸聚类运算)所消耗的运算资源和内存资源都是不被允许的。移动设备本身的局限性导致了这个计算无法在本地完成,所以只能交给服务器去完成。

对于人脸识别类的应用来说,识别和比对的运算量是很大的,Face-API完全可以在用户请求比较少的时候,使用很少的服务器计算资源,也就是说使用一个配置较低的服务器来支撑日常的API调度和低请求量的人脸识别和比对计算需求,而在有大量照片需要比对的时候,同时使用很多服务器进行并行运算。

这种工作模式在传统的IDC机房中问题很大,但是有了弹性的云计算环境之后,事情就变得容易多了。

Face-API可以将数据存放在集群的NoSQL数据库中,然后将计算服务器的镜像也存储下来。在需要大规模运算的时候,只要调用云服务API,使用事先准备好的镜像使用1分钟时间部署出所需要的运算服务器,然后通过云计算API启动这些服务器,之后就可以自动调度服务器和NoSQL数据集群中提取所需处理的任务和数据进行高性能的运算。

运算结束之后,或者说是在运算请求量降低,不再需要那么多服务器进行并行运算之后,将并行运算服务器上的数据重新写回NoSQL集群中,然后自动执行关机脚本。调度服务器再通过云计算服务API将这些多余的服务器退掉。

值得一提的是,这次为盛大云计算大赛提供支撑的盛大云服务,是按照小时计费的。

人脸识别技术普及后的SNS

长远来看,人脸识别技术并不仅仅是一种简单的计算机智能模式识别技术,更将是一种对人与人之间的关系将带来深远影响的技术变革。

近年来非常火爆的SNS,也就是社会化网络服务,本身就是基于真实的人际关系建立起来的(比如Facebook),由此可见标识个人身份的照片对于SNS是多么重要。如果计算机能够相对准确地对这些照片和身份之间进行一个自动的标识和关联,那么SNS上肯定会出现很多完全不同的、很酷的甚至我们现在还无法想象的应用和服务模式。

人脸识别技术给SNS带来的改变,肯定不会比LBS小。

每一项技术,通常是首先出现在实验室中,然后再尝试将其产品化,在这个过程中新的模式将不断涌现。比如GPS(全球卫星定位系统)最初完全是为了军事目的被发明出来,民用化之后除了进行定位和导航外,很长一段时间并没有新模式出现。突然有一天,人们发现可以提供很多基于位置的服务,一种全新的应用模式就诞生了。

这不是技术创新,而是应用模式创新。人脸识别技术目前也处在这样一个阶段,技术基本成型但缺乏创新的应用模式。这个过程不是单纯靠实验室里面的科学家就可以完成的,而必须集思广益,靠整个社会的智慧来推动。

相信随着Face-API服务的上线,会不断有新的应用涌现,让我们来共同期待吧。

Close Bitnami banner
Bitnami