0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

键值型数据库在分布式爬虫系统中的应用分析

电子设计 来源:电子设计 作者:电子设计 2020-12-25 18:33 次阅读

张斌 杨彦松 廖雨寒

睿哲科技股份有限公司

一、背景

随着互联网的高速发展,网络上的数据量呈现爆发式的增长。单节点运行的爬虫系统,在性能等各方面都无法满足现有的业务需求。因此网络爬虫基于多节点的分布式协同运行方案成为解决爬虫性能瓶颈的不二之选。而作为分布式系统的存储中间件,key-value数据库(redis和pika)在数据结构的支持,高吞吐的性能,接口的易用性等方面都是不错的选择。

二、Redis和Pika

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value高性能存储系统。它支持存储多种类型的value,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)等。这些数据类型都支持push/pop、add/remove、取交集、并集、差集及更丰富的操作,而且这些操作都是原子性的。与传统的内存数据库一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Pika是一个开源的可持久化的大容量类redis存储系统。兼容redis的string、hash、list、zset、set等绝大部分的数据接口,不用修改代码即可平滑从redis迁移到pika。主要解决redis由于存储数据量巨大而导致内存不足的内存容量瓶颈,并且可以像redis一样,通过slaveof命令进行主从备份,支持全同步和部分同步,pika还可以用在twemproxy或者codis中来实现静态数据分片

本文针对两种存储系统,在分布式爬虫系统中的应用,进行对比,以供参考。

三、两种数据库对比

1)Redis:高性能的key-value存储解决方案。

优势:

1.高性能:作为内存数据库,redis拥有超高的吞吐性能;

2.多样化的数据存储结构:redis支持string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)等;

劣势:

1.大数据量存储承载能力有限,存储成本高;

2.单线程运行方式易阻塞,相对比较脆弱。

2)Pika:利用磁盘存储来解决redis的内存容量瓶颈。

优势:

1.使用Redis协议,兼容redis绝大多数命令,为两种数据库共存提供基础;

2.使用磁盘存储,解决redis大数据量存储瓶颈;

3.使用多线程模式,相对比较健壮。

劣势:

1.受磁盘限制,整体性能相对较差,吞吐量是瓶颈,当吞吐量过高时会出现数据丢失的情况;

2.缺少成熟的集群多节点扩展方案;

3.不支持分库,对于多业务逻辑分类的场景不太友好。

四、分布式爬虫系统

目前爬虫系统进行页面抓取的主要流程:调度器(Scheduler)接收到request并放入队列进行排序、去重、转发等操作,下载器(Downloader)从队列获取到待下载的request,从网络获取到页面数据后,提供给爬虫(spider)进行分析处理。爬虫从数据中提取新的request给调度器,同时将结构化数据(item)交给数据管道(item pipeline)进行存储分发等操作。具体流程参考scrapy框架结构图如下:

要实现分布式爬虫,首先需对调度器进行修改,用网络存储中间件替换本地队列,通过网络存储中间件对request进行多节点分发,同时还需要用中间件存储request指纹从而实现去重。

五、键值型数据库在分布式爬虫系统中的应用

要实现上述功能改造,redis这类的高性能key-value数据库就目前来说是最佳的适用方案。首先redis的高性能能够保证大量节点进行request的读取,同时redis支持多种数据结构及其接口,能够很方便的实现各种队列的业务逻辑。其中可以用list实现FifoQueue和LifoQueue,用zset实现PriorityQueue,用set实现RFPDupeFilter。同时还可以使用list或者pub/sub来实现多任务调度和分发,不需要再另外引入kafka、MQ这类的消息队列来做多任务管理,从而减小整个爬虫系统的架构体积;虽然redis能充分满足整个爬虫系统的分布式需求,可是在某些场景下,redis会出现瓶颈;其中存储容量则是最主要的瓶颈。

在爬取过程中,一个request序列化之后大约占用1KB左右的存储空间,1GB内存则只能处理大约100万个request。因为访问控制之类的原因,爬取一个拥有千万级页面的网站,redis就需要大约10GB左右的内存。一台64G内存的服务器也仅仅只能支持5-7个大型爬取任务的同时执行。

因此引入pika这种以磁盘为主要存储的类redis数据库。pika在保留了redis多样化数据结构的同时,极大的扩展了数据存储容量,从而解决request的容量瓶颈。

可是pika的无集群模式,同样对pika的性能产生很大的制约。在不使用SSD硬盘的情况下,只是单独使用pika会出现大量的慢查询,导致部分数据丢失的情况。因为没有集群模式来实现多实例负载均衡,所以pika的性能扩展成本将比redis高不少。

最终在多任务分布式爬虫系统中,需要用redis和pika两种中间件来支持整个爬虫系统的运行。其中redis负责request指纹和任务调度之类高吞吐量的业务,pika则负责request分发这种需要高存储容量的业务。

六、结束语

以上对Redis和Pika两种key-value存储方案在分布式爬虫系统中的应用做了描述,这两种方案在实际生产环境中相辅相成,互相配合,才能支撑起一个功能健壮,性能强大的成熟的多任务分布式爬虫系统。

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 应用软件
    +关注

    关注

    0

    文章

    49

    浏览量

    9070
  • Redis
    +关注

    关注

    0

    文章

    370

    浏览量

    10832
收藏 人收藏

    评论

    相关推荐

    一文讲清什么是分布式云化数据库

    分布式云化数据库是一种先进的数据管理系统,它将传统的数据库技术与分布式计算、云计算和大
    的头像 发表于 10-14 10:06 173次阅读

    分布式云化数据库的优缺点分析

    分布式云化数据库的优点主要体现在高可用性和容错性、可扩展性、体系结构、数据一致性、成本、升级迭代等方面。同时也存在一些缺点,如通信开销较大、数据的存取结构复杂、
    的头像 发表于 09-14 09:42 224次阅读

    基于分布式存储WDS的金融信创云承载数据库类关键应用

    基于分布式存储WDS的金融信创云承载数据库类关键应用
    的头像 发表于 08-16 09:42 228次阅读
    基于<b class='flag-5'>分布式</b>存储WDS的金融信创云承载<b class='flag-5'>数据库</b>类关键应用

    鸿蒙开发接口数据管理:【@ohos.data.distributedData (分布式数据管理)】

    分布式数据管理为应用程序提供不同设备间数据库分布式协同能力。通过调用分布式数据各个接口,应用程
    的头像 发表于 06-07 09:30 872次阅读
    鸿蒙开发接口<b class='flag-5'>数据</b>管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>数据</b>管理)】

    HarmonyOS开发实例:【分布式手写板】

    使用设备管理及分布式键值数据库能力,实现多设备之间手写板应用拉起及同步书写内容的功能。
    的头像 发表于 04-17 21:45 437次阅读
    HarmonyOS开发实例:【<b class='flag-5'>分布式</b>手写板】

    鸿蒙HarmonyOS开发实例:【分布式关系数据库

    使用[@ohos.data.relationalStore]接口和[@ohos.distributedDeviceManager] 接口展示了eTS中分布式关系数据库的使用,
    的头像 发表于 04-11 09:52 795次阅读
    鸿蒙HarmonyOS开发实例:【<b class='flag-5'>分布式</b>关系<b class='flag-5'>型</b><b class='flag-5'>数据库</b>】

    基于Rust的嵌入符合ACID的键值数据库

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入、符合 ACID 的键值数据库
    的头像 发表于 12-28 11:29 849次阅读

    分布式锁的三种实现方式

    ,下面将分别介绍三种常见的实现方式。 一、基于数据库实现的分布式分布式系统
    的头像 发表于 12-28 10:01 841次阅读

    分布式系统硬件资源池原理和接入实践

    的使用习惯;手机导航接续到车机后,车机的 GPS 信号可以共享给手机,结合手机 GPS 信号提供更高精度的定位数据;可以看到,智慧出行场景,可以通过分布式硬件资源池结合手机和车机的
    发表于 12-06 10:02

    redis是关系数据库

    Redis不是关系数据库,它是一种基于键值对的NoSQL数据库本文中,我将对Redis进行详细介绍,包括其特点、用途、常见命令和应用场
    的头像 发表于 12-05 10:32 1478次阅读

    redis分布式锁的应用场景有哪些

    系统,多个节点可能同时访问共享资源,例如数据库、文件系统等。使用Redis分布式锁可以保证
    的头像 发表于 12-04 11:21 1369次阅读

    springcloud 分布式事务解决方案实例

    么都执行成功,要么都执行失败。本文将介绍如何使用Spring Cloud来实现分布式事务。 分布式系统,使用
    的头像 发表于 12-03 16:32 1070次阅读

    NoSQL 数据库如何选型

    什么是NoSQL数据库?为什么要使用NoSQL数据库键值数据库内存键值数据库文档
    的头像 发表于 11-26 08:05 430次阅读
    NoSQL <b class='flag-5'>数据库</b>如何选型

    分布式数据恢复-hbase+hive分布式存储误删除文件的数据恢复方案

    hbase+hive分布式存储数据恢复环境: 16台某品牌R730XD服务器节点,每台物理服务器节点上有数台虚拟机,虚拟机上配置的分布式,上层部署hbase数据库+hive
    的头像 发表于 11-24 15:55 400次阅读

    springcloud分布式事务解决方案

    不同的微服务之间进行数据交互时,可能会出现一致性问题。 分布式事务的定义是一个操作或者一组操作,要么全部执行成功,要么全部不执行。传统的单体应用程序,通常使用关系
    的头像 发表于 11-16 11:03 1979次阅读