SlideShare une entreprise Scribd logo
1  sur  30
分布式爬虫



          云峰
www.weibo.com@fengyuncrawl



             2011.12.10
提纲




•    全网爬虫和垂直爬虫
•    分布式框架
•    海量数据存储
•    SSD作缓存和虚拟内存
•    Q&A


                   2
通用爬虫


初始url(种子)

下载页面

解析

将抽取的内容保存


 缺点:
 1. 噪音多

 2.信息密度低,无联系

 3.结构简单化
深度爬虫


 增加
 1.link分析,网页权重计算

 2.URL权重队列




 四个困难:
 1.高效算法去重(bloom filter)

 2.表单验证(校验码)(OCR)

 3,正文抽取(vips,dom特征计算和缓存)

 4.Ajax如何解析(webkit)
深度爬虫架构
实时微博搜索




1.社交网络的用户更新的状态信息,发表微
博,评论,转发等都依附于用户存在,通过
用户ID不同,把网络分为不同区域。

2.信息队列负责信息的过滤,分类,排序。

3.内存索引周期更新实时性很高的数据。

4.静态索引将内存索引的信息同步入磁盘,
毕竟内存容量有限。

5.用户界面提供数据的接口进行搜索与查看
疑问




     1.系统越来越庞大,分散节点越来越多

     2.不同模块,不同输入和输出,配置文件杂乱无章

     3.重复工作很多
分布式爬虫(主从架构)




1.主从结构,爬行控制器和终端

2.控制器控制(master)全部爬行器
同步和终止命令

3.终端(slave)负责信息的采集,
将拓扑信息反馈控制器
中间件




1.主控和搜集之间使用中间件链接

2.高性能,可扩展

3.中间件提供api可以让系统人员
尽量将注意力放应用层上,避免底
层通信接口的编写繁琐工作

缺点:各抓取进程之间是独立的,
master会成为系统的性能瓶颈
疑问




     海量数据如何存储?
海量数据存储




    1.memcached+redis+mysql,分级存储

    2.Hadoop分布式存储

    3.mongodb集群

    4.fastdb,voltdb实时内存分布式数据库+海量存储
分级存储




1.根据时间维度划分数据表(冷热)

2.存储同时也是缓存(一级,二级...)

举例:
      memcached+redis+mysql

缺点:一致性不能保证,只能实现最终一
致性
Hadoop分布式存储(大文件)



1.适合大文件分块存储,每块64块,
冗余存储

2.分块持久化2种方法:

 每个分块单独存储一个文件,用文
件名做索引键号。

  将属于同一大文件的分块存储为
一个文件,利用调度,将文件分散存
储在分布式节点。
Hadoop分布式存储(大小文件混合)




1.双master,主服务器和查询服务器。
2.主服务器发送修改信息,同步查询
服务器。
3.查询负责文件和数据块的映射管
理,提高文件的读取速率,进而提高
系统对小文件的处理速度
4.结构化和非结构化分别用Hbase和
HDFS存储
5.为了数据快速读取,采用分层二级
分布式缓存memcached
MapReduce


1.Map-Reduce五步骤:输入文件,将文件
分配给多个worker并行地执行,写中间文
件(本地写),多个Reduce workers同时
运行,输出最终结果
2.本地写中间文件减少网络带宽与时间耗
费。执行Reduce时,从Master获得中间文
件位置信息,Reduce使用远程过程调用,
从中间文件所在节点读取所需数据。

MR的缺点:
1.很多问题难以抽象成Map和Reduce操
作;
2.实现迭代算法时效率低;
3.执行多集的交运算时效率不高。
海量实时数据存储



实时海量数据库将数据分为两类:离散和连续数
据。采用不同的数据处理方法。离散数据指变化
不连续数据,采用无损压缩处理(Huffman),
而连续数据指连续变化,采用有损压缩(带宽压
缩),对历史数据进行有损压缩,压缩处理后再
经过无损压缩最后存储在磁盘上。




1.为了高速处理,采用线程池技术实现数据写
入请求,通过使用多个多核cpu并行处理来自一
个tcp链接上的多个请求报文。
2.同样读取也采用线程池并行处理,采用LRU
缓存算法将常用数据保持在高速缓存中。
3.采用分块内存映射文件方法,多个工作线程
并发地将数据文件需要的部分进行映射
“打败”CAP原理



Twitter首席工程师发表了一篇论文
http://www.programmer.com.cn/9260/

数据CRUD-->CR

持久化层分为实时+海量批处理
fastdb实时内存数据库



1.使用内存映射文件技术作为内存数
据库文件由磁盘至内存的加载和访
问

2.如果数据库的大小大于系统中实际
物理内存时,操作系统会swap

3.当用户访问不在内存中,操作系统
产生缺页,将需要的数据从磁盘调
度到内存,并将近期不用数据调回
磁盘。
磁盘缓冲管理




1.用户线程的磁盘块读写操作请求,将
首先检查该数据块在磁盘缓冲中是否
存在,如果已存在则直接返回给用户
线程

2.如果不在则磁盘缓冲区向I/O任务池
写入一个对应的数据块读请求,在I/O
线程返回有效磁盘块前,用户线程等
待请求完成。

3.总之尽可能将重要数据放内存,减少
对磁盘访问
疑问




     mysql storage engine(myisam,innodb)关系型数据库
     保证数据一致性
     能否将mysql改成并行分布式挑战Hadoop?
mysql并行分布式


mysql+spider+Distributed
kv store
http://spiderformysql.com/product.html
SSD vs 磁盘(读取)


磁盘为West Digital WD5000AAKS,所用SSD
为ADATA 32G。测试闪存在不同块大小下的
顺序读取速度和随机读取速度,随着块大小的增
加无论固态硬盘还是磁盘读取速度都显著提高。
固态硬盘的顺序读取速度高于磁盘。随机存取
性能固态硬盘优势比较明显,要高于磁盘一至二
个数量级




这是由于磁盘采用机械设备寻址缓慢。在相同
块大小情况下固态硬盘顺序与随机读取速度相
差不多,这是SSD的一大特点。
SSD vs 磁盘(写入)



在不同块大小下固态硬盘顺序写入与随机写入的
区别,由于写入测试需要事先清空所有数据,而操
作系统装在磁盘上,所以无法对磁盘写入进行测试,
不过磁盘读取与写入速度相近。固态硬盘的顺序
写入速度要远远快于随机写入,但两者都要慢于相
应的读取操作。这是由于随机写入需要更多的擦
除操作造成



随机写入速度甚至要慢于磁盘相应速度一个数量
级。所以在设计固态硬盘的策略时,要尽量避免
随机写入操作,有时甚至不惜以增加读取操作为
代价。写入速度与读取速度之间的明显差异是固
态硬盘与磁盘的一个不同之处。
SSD vs 磁盘(测试性能)




1.随着分配的内存增加,磁盘与SSD的每秒处
理的事务数量(TPS)均有所增加,但是SSD要
高于磁盘,特别是当分配内存较小时,SSD比
磁盘快3倍左右。

2.小粒度的写入操作如数据库中日志的记
录,SSD性能甚至要低于磁盘。所以,要提高
ssd的性能,改进随机写入操作是关键。
SSD固态硬盘


页地址映射

1.RAM上存储页映射表

2.Flash上存储各单元的数据信息。

3.SSD非定点更新和写之前擦除整个块,导致写操作
和磁盘不同,当FTL层接到写命令后,直接将数据写
到空闲块中,之后写命令通过逻辑地址查找地址映射
表找到物理地址,最后写入这一页。垃圾回收将块中
的有效数据迁移擦除放入空闲区
SSD+Innodb(磁盘)




1.应用一,顺序I/O放传统磁盘,随机I/O放SSD,
随机I/O文件包括(*.ibd)文件,ibdata文件,顺序
I/O包括redo log ,binary, slow query logs,
error logs。

2.应用二,SSD作为InnoDB的二级缓存,配置参数
innodb_secondary_buffer_pool。当缓存页移出
InnoDB的缓冲池时,InnoDB会将其移动到SSD
上
SSD作为虚拟内存

Redis+SSD存储

用SSD为块单位作为写缓冲区,将数据库
大量对虚拟内存随机写作为主存缓存起
来,写满时,将缓冲数据一同写入虚拟内
存中,这样将大量随机写转化为一次连续
写,利用SSD高速的随机读同时,将多个
随机写数据缓存,合并,转化为一个连续
的写入操作,提高数据库对虚拟内存写操
作的速度

缺点是虽然向SSD按块append写,
而且追加方式不存在数据块的擦除
和重写,但是虚拟内存会爆增。导
致系统经常swap,和内存交换数据
频繁,系统性能下降
SSD文件系统



1.存储分为块+页。

2.每页由用户空间和剩余空间。

3.页的用户空间存文件数据,剩余空间放页
状态(空,好,脏)和页类别(是否有索引)

4.索引存索引更新号,下一个擦除块,空闲
页号,块状态表(好,坏),页状态表,文件
目录表。

5.文件建立内存映射,文件append写入,将
擦除块脏页数据写到空页再垃圾回收
Q&A



      语音360(最新版本)日均下载量5000,20w用户
      http://static.apk.hiapk.com/html/2011/12/364790.html



                   http://www.lamper.cn/




      本人联系微博:http://weibo.com/fengyuncrawl
结束




     谢谢观赏!

Contenu connexe

Tendances

20151021联动技术大讲堂35(刘胜)网络爬虫技术实战
20151021联动技术大讲堂35(刘胜)网络爬虫技术实战20151021联动技术大讲堂35(刘胜)网络爬虫技术实战
20151021联动技术大讲堂35(刘胜)网络爬虫技术实战
liu sheng
 
資訊安全入門
資訊安全入門資訊安全入門
資訊安全入門
Tyler Chen
 
資訊安全入門
資訊安全入門資訊安全入門
資訊安全入門
Tyler Chen
 
前端静态文件部署
前端静态文件部署前端静态文件部署
前端静态文件部署
Charles Wu
 
刘源 人人网服务化与架构变迁V3
刘源 人人网服务化与架构变迁V3刘源 人人网服务化与架构变迁V3
刘源 人人网服务化与架构变迁V3
drewz lin
 
运维安全 抵抗黑客攻击_云络安全沙龙4月上海站主题分享
运维安全 抵抗黑客攻击_云络安全沙龙4月上海站主题分享运维安全 抵抗黑客攻击_云络安全沙龙4月上海站主题分享
运维安全 抵抗黑客攻击_云络安全沙龙4月上海站主题分享
ChinaNetCloud
 

Tendances (14)

20150528联动技术大讲堂15(刘胜)业务系统上线标准指引
20150528联动技术大讲堂15(刘胜)业务系统上线标准指引20150528联动技术大讲堂15(刘胜)业务系统上线标准指引
20150528联动技术大讲堂15(刘胜)业务系统上线标准指引
 
Ccns 網路基礎概論
Ccns 網路基礎概論 Ccns 網路基礎概論
Ccns 網路基礎概論
 
20151021联动技术大讲堂35(刘胜)网络爬虫技术实战
20151021联动技术大讲堂35(刘胜)网络爬虫技术实战20151021联动技术大讲堂35(刘胜)网络爬虫技术实战
20151021联动技术大讲堂35(刘胜)网络爬虫技术实战
 
資訊安全入門
資訊安全入門資訊安全入門
資訊安全入門
 
Web App 调试基础 (1)
Web App 调试基础 (1)Web App 调试基础 (1)
Web App 调试基础 (1)
 
網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知網站系統安全及資料保護設計認知
網站系統安全及資料保護設計認知
 
OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版
 
資訊安全入門
資訊安全入門資訊安全入門
資訊安全入門
 
前端静态文件部署
前端静态文件部署前端静态文件部署
前端静态文件部署
 
刘源 人人网服务化与架构变迁V3
刘源 人人网服务化与架构变迁V3刘源 人人网服务化与架构变迁V3
刘源 人人网服务化与架构变迁V3
 
运维安全 抵抗黑客攻击_云络安全沙龙4月上海站主题分享
运维安全 抵抗黑客攻击_云络安全沙龙4月上海站主题分享运维安全 抵抗黑客攻击_云络安全沙龙4月上海站主题分享
运维安全 抵抗黑客攻击_云络安全沙龙4月上海站主题分享
 
2017.11.22 OWASP Taiwan Week (Lucas Ko)
2017.11.22  OWASP Taiwan Week (Lucas Ko)2017.11.22  OWASP Taiwan Week (Lucas Ko)
2017.11.22 OWASP Taiwan Week (Lucas Ko)
 
2010 cyberoam techsheet-s
2010 cyberoam techsheet-s2010 cyberoam techsheet-s
2010 cyberoam techsheet-s
 
tourism research and zotero2012
tourism research and zotero2012tourism research and zotero2012
tourism research and zotero2012
 

En vedette (8)

DBA新人的述职报告
DBA新人的述职报告DBA新人的述职报告
DBA新人的述职报告
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
Percona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT:mysql-security-privileges-and-user-managementPercona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT:mysql-security-privileges-and-user-management
 
QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示
 
服务器性能测试介绍
服务器性能测试介绍服务器性能测试介绍
服务器性能测试介绍
 
Oracle数据库分析函数详解
Oracle数据库分析函数详解Oracle数据库分析函数详解
Oracle数据库分析函数详解
 
Percona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: introduction-to-mysql-replicationPercona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: introduction-to-mysql-replication
 
The simplethebeautiful
The simplethebeautifulThe simplethebeautiful
The simplethebeautiful
 

Similaire à 分布式爬虫

新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构
n716
 
去哪儿平台技术
去哪儿平台技术去哪儿平台技术
去哪儿平台技术
d0nn9n
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011
Yiwei Ma
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuild
Webrebuild
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
裕波 周
 
前端优化
前端优化前端优化
前端优化
Peng Guo
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
Scourgen Hong
 
Web客户端数据存储
Web客户端数据存储Web客户端数据存储
Web客户端数据存储
fangdeng
 

Similaire à 分布式爬虫 (20)

去哪儿Ugc平台设计经验
去哪儿Ugc平台设计经验去哪儿Ugc平台设计经验
去哪儿Ugc平台设计经验
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构
 
去哪儿平台技术
去哪儿平台技术去哪儿平台技术
去哪儿平台技术
 
用戶端攻擊與防禦
用戶端攻擊與防禦用戶端攻擊與防禦
用戶端攻擊與防禦
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011
 
鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao
 
雲端分散架構的駭客事件與安全問題
雲端分散架構的駭客事件與安全問題雲端分散架構的駭客事件與安全問題
雲端分散架構的駭客事件與安全問題
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuild
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
 
周世恩/資料分析前的奏曲 : 談資料收集的挑戰
周世恩/資料分析前的奏曲 : 談資料收集的挑戰周世恩/資料分析前的奏曲 : 談資料收集的挑戰
周世恩/資料分析前的奏曲 : 談資料收集的挑戰
 
資料分析的前奏曲 談資料收集的挑戰
資料分析的前奏曲   談資料收集的挑戰資料分析的前奏曲   談資料收集的挑戰
資料分析的前奏曲 談資料收集的挑戰
 
前端优化
前端优化前端优化
前端优化
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心
 
浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
离线应用分享
离线应用分享离线应用分享
离线应用分享
 
众行业公司系统架构案例介绍
众行业公司系统架构案例介绍众行业公司系统架构案例介绍
众行业公司系统架构案例介绍
 
HITCON FreeTalk 2024 台灣駭客協會媒體小聚【議題一:資安地圖 - 資安領域與趨勢介紹】
HITCON FreeTalk 2024 台灣駭客協會媒體小聚【議題一:資安地圖 - 資安領域與趨勢介紹】HITCON FreeTalk 2024 台灣駭客協會媒體小聚【議題一:資安地圖 - 資安領域與趨勢介紹】
HITCON FreeTalk 2024 台灣駭客協會媒體小聚【議題一:資安地圖 - 資安領域與趨勢介紹】
 
Web客户端数据存储
Web客户端数据存储Web客户端数据存储
Web客户端数据存储
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路
 

Plus de mysqlops

如何写有效的Bug报告
如何写有效的Bug报告如何写有效的Bug报告
如何写有效的Bug报告
mysqlops
 

Plus de mysqlops (20)

Percona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Cluster And NDB ClusterPercona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Cluster And NDB Cluster
 
Percona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimizationPercona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimization
 
Pldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internalsPldc2012 innodb architecture and internals
Pldc2012 innodb architecture and internals
 
eBay EDW元数据管理及应用
eBay EDW元数据管理及应用eBay EDW元数据管理及应用
eBay EDW元数据管理及应用
 
基于协程的网络开发框架的设计与实现
基于协程的网络开发框架的设计与实现基于协程的网络开发框架的设计与实现
基于协程的网络开发框架的设计与实现
 
eBay基于Hadoop平台的用户邮件数据分析
eBay基于Hadoop平台的用户邮件数据分析eBay基于Hadoop平台的用户邮件数据分析
eBay基于Hadoop平台的用户邮件数据分析
 
对MySQL DBA的一些思考
对MySQL DBA的一些思考对MySQL DBA的一些思考
对MySQL DBA的一些思考
 
腾讯即时聊天IM1.4亿在线背后的故事
腾讯即时聊天IM1.4亿在线背后的故事腾讯即时聊天IM1.4亿在线背后的故事
腾讯即时聊天IM1.4亿在线背后的故事
 
分布式存储与TDDL
分布式存储与TDDL分布式存储与TDDL
分布式存储与TDDL
 
MySQL数据库生产环境维护
MySQL数据库生产环境维护MySQL数据库生产环境维护
MySQL数据库生产环境维护
 
Memcached
MemcachedMemcached
Memcached
 
DevOPS
DevOPSDevOPS
DevOPS
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规
 
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战
 
MySQL Explain输出详解
MySQL Explain输出详解MySQL Explain输出详解
MySQL Explain输出详解
 
MySQL Explain输出详解
MySQL Explain输出详解MySQL Explain输出详解
MySQL Explain输出详解
 
Cbo100053
Cbo100053Cbo100053
Cbo100053
 
如何写有效的Bug报告
如何写有效的Bug报告如何写有效的Bug报告
如何写有效的Bug报告
 
如何写有效的Bug报告
如何写有效的Bug报告如何写有效的Bug报告
如何写有效的Bug报告
 

分布式爬虫