2021年5月3日星期一

基于golang分布式爬虫系统的架构体系v1.0

基于golang分布式爬虫系统的架构体系v1.0


一、什么是分布式系统


分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。简单来说就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务。计算机越多,CPU、内存、存储资源等也就越多,能够处理的并发访问量也就越大。

从分布式系统的概念中我们知道,各个主机之间通信和协调主要通过网络进行,所以分布式系统中的计算机在空间上几乎没有任何限制,这些计算机可能被放在不同的机柜上,也可能被部署在不同的机房中,还可能在不同的城市中,对于大型的网站甚至可能分布在不同的国家和地区。

二、分布式系统的特点


不同的资料介绍起分布式系统的特点,虽然说法不同,但都大同小异,此处我们针对于要实现的分布式爬虫,总结为以下3个特点:

多个节点

容错性

可扩展性(性能)

固有分布性

消息传递

节点具有私有存储

易于开发

可扩展性(功能)

对比:并行计算

完成特定需求

消息传递的方法:

REST

RPC

中间件

三、需求说明设计要点


在爬虫的开发过程中,有些业务场景须要同一时候抓取几百个甚至上千个站点,此时就须要一个支持多爬虫的框架。在设计时应该要注意下面几点:

代码复用。功能模块化。假设针对每一个站点都写一个完整的爬虫。那当中必然包括了很多反复的工作。不仅开发效率不高。并且到后期整个爬虫项目会变得臃肿、难以管理。

易扩展。多爬虫框架,这最直观的需求就是方便扩展。新增一个待爬的目标站点,我仅仅须要写少量 必要的内容(如抓取规则、解析规则、入库规则),这样最快 最好。

健壮性、可维护性。

这么多站点同一时候抓取,报错的概率更大。比如断网、中途被防爬、爬到"脏数据"等等。所以必须要做好日志监控,能实时监控爬虫系统的状态,能准确、具体地定位报错信息;另外要做好各种异常处理,假设你放假回来发现爬虫由于一个小问题已经挂掉了,那你会由于浪费了几天时间而可惜的(尽管其实我个人会不时地远程查看爬虫状态)。

分布式。多站点抓取。数据量一般也比較大,可分布式扩展。这也是必需的功能了。分布式。须要注意做好消息队列。做好多结点统一去重。

爬虫优化。

这就是大话题了,但最主要的。框架应该要基于异步,或者使用协程+多进程。

四、项目架构分析

4.1 去重问题


可以尝试写布隆过滤器来更快的实现改需求

  • 问题:

  • 单节点承受的去重数据量有限

  • 无法保存之前去重结果(因为是存入到内存(map))

  • 解决:

  • 基于Key-Value Stroe(如Redis)进行分布式去重

4.2 数据存储问题

问题:

  • 存储部分的结构,技术栈和爬虫部分区别很大

  • 进一步优化需要特殊的ElasticSearch技术背景

  • 解决:

  • 存储服务

复杂分布式爬虫系统的大框架,具体实现的时候,还有很多的细节需要处理,这时,之前做过爬虫系统,踩过坑的经验就很重要了。









原文转载:http://www.shaoqun.com/a/720753.html

跨境电商:https://www.ikjzd.com/

慧聪集团:https://www.ikjzd.com/w/1836

宝贝格子:https://www.ikjzd.com/w/1322


基于golang分布式爬虫系统的架构体系v1.0一、什么是分布式系统分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。简单来说就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务。计算机越多,CPU、内存、存储资源等也就
一淘比价网:https://www.ikjzd.com/w/1698
mail.ru:https://www.ikjzd.com/w/2232
麦言:https://www.ikjzd.com/w/1456
我想长期"独占"亚马逊黄金购物车!!!:https://www.ikjzd.com/home/22625
减税约2250亿元,进口增值税税率下调影响重大:https://www.ikjzd.com/home/20456
婉拒女学生示爱 她脱光征服我:http://www.30bags.com/m/a/252183.html

没有评论:

发表评论