2.1 设计分布式爬虫
把抓取任务分布到不同的节点主要是为了抓取性能与可扩展性,也可以使用物理分布的爬虫系统,让每个爬虫节点抓取靠近它的网站。例如,北京的爬虫节点抓取北京的网站,上海的爬虫节点抓取上海的网站,电信网络中的爬虫节点抓取托管在电信的网站,联通网络中的爬虫节点抓取托管在联通的网站。
此外,还需要考虑容错。如果一个节点X崩溃(或优雅地离开),我们可以通过查找任务缓存,知道分配给它哪些任务。这次X的任务要由其他的节点来重新执行。
2.1.1 分布式与云计算
分布式技术是一种基于网络的计算机处理技术,与集中式相对应。近些年来,由于个人计算机的性能得到极大的提高及其使用的普及,使得将处理任务分布到网络上的所有计算机成为可能。分布式计算是和集中式计算相对立的概念,分布式计算的数据可以分布在很大区域去完成。
在分布式网络中,数据的存储和处理都是在本地工作站进行的。数据输出可以打印,也可以保存在软盘上。通过网络能够更快、更便捷地访问数据。因为每台计算机都能够存储和处理数据,所以不要求服务器的功能十分强大,其价格也就不必过于昂贵。这种类型的网络可以适应用户的各种需要,同时允许他们共享网络的数据、资源和服务。在分布式网络中使用的计算机既能够作为独立的系统使用,也可以把它们连接在一起获得更强大的网络功能。
分布式计算的优点是可以快速访问、多用户使用。每台计算机可以访问系统内其他计算机的信息文件,系统设计上具有更大的灵活性。既可为独立计算机的地区用户的特殊需求服务,也可为联网的企业需求服务,实现系统内不同计算机之间的通信,每台计算机都可以拥有和保持所需要的最大数据和文件,减少了数据传输的成本和风险。为分散地区和中心办公室双方提供更迅速的信息通信和处理方式,为每个分散的数据库提供作用域,数据存储于许多存储单元中,但任何用户都可以进行全局访问,使故障的不利影响最小化,以较低的成本来满足企业的特定要求。
云计算(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。
云计算的基本原理是,通过使计算任务分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行将与互联网更相似。这使得企业能够将资源切换到需要的应用上,从而根据需求访问计算机和存储系统。
这可是一种革命性的举措,打个比方,就好比是从古老的单台发电机模式转向了电厂集中供电的模式。它意味着计算能力也可以作为一种商品进行流通,就像煤气、水电一样,使用方便,费用低廉。最大的不同在于,它是通过互联网进行传输的。
云计算的蓝图已经呼之欲出:在未来,只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。从这个角度而言,最终用户才是云计算的真正拥有者。
云计算的应用包含这样一种思想,把力量联合起来,给其中的每一个成员使用。
目前,PC依然是我们日常工作生活中的核心工具——我们用PC处理文档、存储资料,用电子邮件或U盘与他人分享信息。如果PC硬盘坏了,我们会因为资料丢失而束手无策。
而在云计算时代,“云”会替我们做存储和计算的工作。“云”就是计算机群,每一群都包括几十万台,甚至上百万台计算机。“云”的好处还在于,其中的计算机可以随时更新,保证“云”长生不老。Google就有好几个这样的“云”,其他IT巨头,如微软、雅虎、亚马逊(Amazon)也有或正在建设这样的“云”。
届时,我们只需要一台能上网的电脑,不需关心存储或计算发生在哪朵“云”上,一旦有需要,我们可以在任何地点用任何设备,如电脑、手机等,快速地计算和找到这些资料。我们再也不用担心资料会丢失了。
云计算是虚拟化(Virtualization)、效用计算(Utility Computing)、IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等概念混合演进并跃升的结果。云计算的特点如下:
● 超大规模。Google云计算已经拥有100多万台服务器,Amazon、IBM、微软、Yahoo等的“云”均拥有几十万台服务器。企业私有云一般拥有数百至上千台服务器。“云”能赋予用户前所未有的计算能力。
● 虚拟化。云计算支持用户在任意位置、使用各种终端获取应用服务。所请求的资源来自“云”,而不是固定的、有形的实体。应用在“云”中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。
● 高可靠性。“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。
● 通用性。云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一个“云”可以同时支撑不同的应用运行。
● 高可扩展性。“云”的规模可以动态伸缩,以满足应用和用户规模增长的需要。
● 按需服务。“云”是一个庞大的资源池,可以按需购买;云可以像自来水、电、煤气那样计费。
● 极其廉价。由于“云”的特殊容错措施可以采用极其廉价的节点来构成云,“云”的自动化集中式管理使得大量企业无需负担日益高昂的数据中心管理成本,“云”的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受“云”的低成本优势,通常只要花费几百美元、几天时间就能完成以前需要数万美元、数月时间才能完成的任务。
2.1.2 分布式与云计算技术在爬虫中的应用——浅析Google的云计算架构
分布式与云计算深刻地影响着搜索引擎的发展。与其说是云计算影响了搜索引擎,不如说是搜索引擎的发展产生了云计算的概念。Google正是由于在云计算领域的领先,才能多年在搜索领域保持霸主的地位。本节以Google的架构为例,看一下云计算是如何应用在爬虫之中的。
Google的三大核心技术构成了实现云计算服务的基础:GFS(Google文件系统)、MapReduce(分布式计算系统)和BigTable(分布式存储系统)。
GFS(Google文件系统)位于这三项技术的最底层,负责许多服务器、机器数据的存储工作,它将一个“大体积数据(通常在百兆甚至千兆级别)分隔成固定大小的数据块放到两到三个服务器上。这样做的目的是当一个服务器发生故障时,可以将数据迅速地通过另外一个服务器恢复过来。在存储层面,机器故障的处理由Google文件系统来完成。
MapReduce(分布式计算系统)是Google开发的编程工具,用于1TB数据的大规模数据集并行运算。这项技术的意义在于,实现跨越大量数据节点分割任务,使得某项任务可以被同时分拆在多台机器上执行。例如把一项搜索任务拆分成一两百个小的子任务,经过并行处理后,将运算结果在后台合并,最后把最终结果返回到客户端。
BigTable(分布式存储系统)作为Google的一种针对半结构化数据进行分布存储与访问的接口或服务,它是建立在GFS和MapReduce之上的结构化分布式存储系统,可以帮助Google最大限度地利用已有的数据存储能力和计算能力,在提供服务时降低运行成本。