云计算介绍
许多数据信息中包含了十分重要的信息,以移动电话日志为例,某个用户在一个地点(机场)关机若干小时后在另一个地点(机场)开机表明该用户可能搭乘飞机旅行了,而连续变换基站表明该用户可能搭乘火车或汽车上旅行等等,通过分析和挖掘这些日志以,运营商可以发现用户的电话呼叫特征和规律,以探索新的业务增长机会、发现有离网倾向的用户等等。然而,庞大的数据量使得这种数据分析和挖掘越来越困难,例如中国移动到2009年10月的用户数突破5亿,假设每个用户平均每天拨打20个电话,每个呼叫产生200字节的日志,则所有用户一年的呼叫日志总量为5亿*365*20*200字节,即663TB,如此海量数据的存储和计算的需求大大超过了当今包括巨型机在内的单台计算机的存储和计算能力,云计算应运而生。云计算通常有以下一些特点:
首先,一个云计算机群通常由多个计算机节点组成(从几百到成千上万),机群内的节点之间的耦合程度高于互联网上的松散耦合的众多计算机,又低于传统的并行大型机内的紧密耦合的节点。这使得云计算机群内的通信效率较高,可以达到较高的计算效率。
第二,云计算提供强大的数据存储和计算能力。例如,现在一个1000台机群的云计算机群可以提供高达4000TB的数据存储能力和500GB/s的数据处理能力。
第三,云计算提供很高的可靠性。根据不同的应用需求,云计算可以提供99.999%甚至更高的可靠性。云计算的高可靠性来自其良好的容错能力和强大的故障恢复能力。在云计算机群内,任何一个或若干个节点(包括控制节点)的故障既不会使得系统停止服务,也不会中止任何正在运行中的上层应用程序。
第四,云计算能够以非常低廉的成本提供上述服务,具有很高的性能价格比。良好的容错能力和快速强大的故障恢复能力使得云计算能够采用价格低廉的计算机(例如当前主流频率的处理器和主流容量的内存和硬盘等)和网络交换机,避免了高可靠硬件带来的高昂成本。
第五,云计算提供简单的编程模型和框架。要实现云计算的应用,应用程序开发者不需要编写调试分布式或者并行程序,甚至不需要有分布式或并行程序方面的知识,只要写简单的串行程序甚至是脚本,必要时云计算系统会自动把相关程序分发到几十、几百乃至几千个节点上自动并发运行。开发者也不需要考虑容错或故障恢复等等,因为在云计算系统内这些对应用程序是透明的。
第六,云计算系统具有平滑自我演进的特征(living & evolving):与由同构节点机组成的大型机不同,云计算系统通常有异构节点组成,云计算系统的节点可以平滑地逐步升级替换,从而使得云计算系统的性能和性价比得以持续不断提高,避免了大型机的整体升级换代所带来的突发成本开销和突发的IDC机架以及电流需求。
云计算机群包括机房、节点计算机、网络交换机、分布式架构等设施,其中,分布式架构是其中的关键,其设计和实现有许多挑战和困难,我有幸从2005年开始关注这一领域,并随后在微软和百度从事相关的工作。