第5节 《爬虫系统与搜索建议系统 Web Crawler & Google Suggestion》
Crawler
20190301
A Single-threaded Web Crawler
URL Queue, 广度优先搜索 : 适合线程,HashSet去重
producer consumer pattern:
buffer
孤岛?非连通图
多线程比单线程快
共享资源的写操作:互斥
A Multi-threaded Web Crawler
sleep, condition variable, sophomore
线程切换:context switch限制
端口数限制
单台机器带宽限制
A Distributed-threaded Web Crawler
没法控制某些待抓取网页的优先级?
url queue 全部网页 内存40TB?
引入data table:
每一个url变成一个task,且标记状态 idle 或 working
task service : db table
storage service : mysql
slow select: 1 trillion rows?slow?sharding 拆表 speed up
Task Tables
dead cycle? sina.com 自己相关的url
sina < 10%
multi-region? 不同地区爬网页时间不同
crawler service, task service, storage service 架设并数据同步
Typehead
google suggestion
daily active user: 500m
6times * 4letters *500m = 12b
QPS = 12b/86400 = 138k
peak QPS = 276k
log data from dataCollectionService
keyword, hit_count
…, …
两周之内以a为开头的keyword: select 操作
where keyword like ‘abc%’
order by hit_count desc
limit 10
To reduce query time
磁盘读写速率基本上是内存的1000倍
磁盘前挡一缓存memcached
Trie Tree
O(26^N) slow?
直接存结果:
[{prefix to hot keyword , hit_count}, … ] 直接存到节点上
内存的数据结构转成字符串
serialize 序列化
deserialize 解序列化
内存到磁盘的转换关系
live(用户请求中)不能更新trie 不能边读边写?
offline更新