自制分布式爬虫系统北京数人科技有限公司单机的All-In-One爬虫架构HAProxy利用JavaEE容器的线程池、有状态共享状态登陆控制模块解析JS、地区代理、URL调速抓取模块各地代理递归URLHTMLJSONXML抽取模块模板结果分布式和微服务是SilverBullet么?分布式和微服务的优点特定模块单独开发和测试(YES)容易对特定模块进行横向扩展(YES)整体可靠性更高(?)服务(以及代码)可以重用(YES)离线和在线类型服务可以混合部署(Great)做最坏的打算,祈祷最好的结果上云的CheckList服务单元功能越单一越好计算模块要做到无状态(不依赖本地I/O)任何服务都不能有单点,必须做集群可能的话,模块间接口尽量异步设计时做最坏打算——每个模块都可能失效,而且无法及时报警分布式的配置管理,RollingUpdate/Restart各个层面的集中式监控和日志方案……,建集群HAProxy中间结果控制服务控制服务抓取服务抓取服务抽取服务抽取服务尽量利用Docker本身多实例,避免复结果聚合结果聚合杂的多线程编程服务服务因为任务并行运行,所以需要保存中间结果,:异步、服务发现、、无状态、无状态JSONHAProxyURLHTMLSessionIDCookieSessionIDSessionIDSessionID控制服务控制服务抓取服务抓取服务抽取服务抽取服务SessionID结果聚合结果聚合ReddisCluster服务服务问题:(JSON)SessionID获取结果Step4集群化—服务发现、负载均衡HTTP接口ZooKeeper/etcd使用Marathon+Bamboo+HAProxy进行服务发现RabbitMQ接口通过监听MQ实现服务发现MongoDB如果不考虑自动扩展,使用既有的集群方案Reddis可以采用Codis方案Step5离线和在线服务混合部署离线服务吞吐很高,爬取模块队列经常破百万‐MQ集群化在线服务要求实时性‐队列设置优先级Step6全局配置热更新问题:如何全局改变常用小参数的配置(变化少,使用频繁)如何全局改变体量较大的全局共享数据(体积大、变化较多)写代码的时候提前做好热读取参数的机制PUSHPULL使用ZooKeeper/etcd来同步小使用Reddis之类配置服务器参数来存储较大的共享数据
微服务实例-自制分布式爬虫系统-数人科技 来自淘豆网m.daumloan.com转载请标明出处.