架构设计原则:
1、不过度设计,所有设计都是本着服务业务的初心。
2、保留足够的可拓展性
3、开发成本降至最低(学习成本+开发时效+开源技术优先+去IOE)
架构设计计划:
一言不合,先上图,下面是爬虫系统架构目标,分为三个阶段如下:
一期:
业务上的需求是,按需爬取网页,而且查询的体量也会很小,因为公司业务刚刚起步,所以OK,我们架构的侧重点就是查询的时效,也就是爬取并返回结果的时效上了。
所以两点,1)爬取的话尽量不用webriver,直接采用httpclient提起请求;2)通过MQ来解耦爬取层和DAL持久层
所以,一期我们的系统流程如下,所有的后台开发都是模块化,方便后期拓展,MQ选型初步定在Redis。
但是,经过实际实施过后,我们发现以下两个问题
1、每次接口请求,都去爬取的话会极大的增加响应RT,带来的用户体验非常差。
2、RestFul接口端和Spider爬虫业务耦合太紧密,不利于后期业务的拓展。
针对这两点,我们作出以下两点改动:
1、我们的接口服务端首先去DB查询记录直接返回给前端,假如DB中没有相关记录,首先我们会返回前端查询失败,
于此同时我们推一条消息到MQ队列中,由消费端去做爬取和持久化的操作,时候会告知前端我们已经爬取入库成功。
2、在Restful接口和MQ之间加一个ServiceDispatch层用来转接查询请求的,前端只需要传查询参数+任务类别之类的信息过来,
ServiceDispatch会发送对应的消息到指定的Topic中。
流程图演化如下:
所以,架构1.0展示如下:
开工!!