上一篇文章《社会化海量数据采集框架搭建》提到如何搭建一个社会化采集系统架构,讲架构通常都比较虚,这一篇讲一下如何实战用低成本服务器作到日流水千万级数据的分布式采集系统。html
有这样一个采集系统的需求,达成指标: 须要采集30万关键词的数据 、微博必须在一个小时采集到、覆盖四大微博(新浪微博、腾讯微博、网易微博、搜狐微博)。为了节约客户成本,硬件为普通服务器:E5200 双核 2.5G cpu, 4 G DDR3 1333内存,硬盘 500G SATA 7200转硬盘。数据库为mysql。在这样的条件下咱们可否实现这个系统目标?固然若是有更好的硬件不是这个文章阐述的内容。现经过采集、存储来讲明一下如何实现:mysql
1、采集,目标是在一个小时内把30万关键词对应的数据从四大微博采集下来,可以使用的机器配置就是上面配置的普通服务器。采集服务器对硬盘没有太多要求,属于cpu密集型运算,需耗费一些内存。评估下来硬件资源不是瓶颈,看下获取数据的接口有什么问题?sql
一、经过各大微博的搜索api。就好比新浪微博API针对一个服务器IP的请求次数,普通权限限制是一个小时1w次,最高权限合做受权一个小时4w次。使用应用时还须要有足够的用户,单用户每一个应用每小时访问1000次,最高权限4w次须要40个用户使用你的应用。达到30w关键词,至少须要8个应用,若是每一个关键词须要访问3页,总共须要24个合做权限的应用。实际操做咱们是不可能为这个项目作到开发24个合做权限的应用,因此这个方式不是很合适。新浪微博API限制参考连接。数据库
二、经过各大微博的最新微博收集数据,微博刚推出的时候,各大微博都有微博广场,能够把最新的微博都收集下来,而后经过分词,若是出现了30万关键词中的一个就留下,其余就丢弃掉。不过如今除了腾讯微博和搜狐微博有微博广场相似的功能,新浪微博和网易微博已经没有这项功能了。另按照新浪微博以前公布的数据,注册用户已经超过5亿,每小时超过1亿条微博,若是全量采集对数据存储是个大的考验,也须要大量的系统资源,实际采集了一亿条,也许就1000w条有用,浪费了9000w条数据的资源。api
三、经过各大微博的网页搜索,可见便可抓的方式,结合反监控系统模块模拟人的正常行为操做,搜索30万关键词数据,使资源最大化利用。为了保证在一个小时采集到,须要采用分布式多线程模式抓取,并发采集。并发的时候不能从同一个ip或者同一个ip网段出去,保证对方不会监测到咱们的爬虫。缓存
咱们最后采用了第三种方式,目前运行情况为经过30w关键词搜索获得的全部微博加在一块儿总量1000多w条天天,新浪和腾讯最多,新浪微博略胜一筹。使用了6台普通PC服务器,就算一台机器7000元,总共4万元硬件设备解决采集硬件问题。总体部署图为:服务器
2、存储,采集下来的数据如何处理?首先存储采集数据是个密集写的操做,普通硬盘是否可以支持,mysql数据库软件可否支持,将来量忽然增长如何应对?再就是评估存储空间,天天增量这么多须要耗费大量的存储资源,如何存放而且易扩展。多线程
按照这样的架构,咱们使用开源免费软件、低成本服务器搭建的千万级数据采集系统在生产运转良好。架构
原创文章,转载请注明: 转载自LANCEYAN.COM并发
本文连接地址: 实战低成本服务器搭建千万级数据采集系统