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

    文章

    51

    浏览量

    9085
  • Redis
    +关注

    关注

    0

    文章

    375

    浏览量

    10875
收藏 人收藏

    评论

    相关推荐

    HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据文件资产迁移

    提供了async版本供该场景使用。 当前,wantParams“sessionId”字段迁移流程中被系统占用,建议开发者wantParams
    发表于 12-24 10:11

    HarmonyOS Next 应用元服务开发-分布式数据对象迁移数据权限与基础数据

    提供了async版本供该场景使用。 当前,wantParams“sessionId”字段迁移流程中被系统占用,建议开发者wantParams
    发表于 12-24 09:40

    PingCAP推出TiDB开源分布式数据库

    的性能表现。我们将继续坚持开源的创新理念,将TiDB打造成一个领先的数据库产品。” 部署新一代分布式数据库已经成为用户释放数据价值、推动数字化转型的重要方式,但随着数据的快速增长以及上
    的头像 发表于 11-24 11:26 426次阅读
    PingCAP推出TiDB开源<b class='flag-5'>分布式数据库</b>

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

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

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

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

    软件系统数据库的分库分表设计

    分布式集群,实现分库分表功能,解决数据库中海量数据存储和查询性能的问题。MyCat 还是一个数据库的集群中间件,主要实现 RDBMS 数据库
    的头像 发表于 08-22 11:39 327次阅读
    软件<b class='flag-5'>系统</b><b class='flag-5'>数据库</b>的分库分表设计

    恒讯科技分析:云数据库rds和redis区别是什么如何选择?

    结构化数据,使用SQL作为查询语言,支持ACID事务和多种复杂查询操作。而Redis是一个基于内存的非关系数据库,采用键值对模型存储数据
    的头像 发表于 08-19 15:31 395次阅读

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

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

    Memcached介绍和详解

    ,Memcached可以显著减轻后端数据库和Web服务器的负载。 Memcached作为一个高性能的内存缓存系统,通过缓存经常访问的数据来提高应用性能,减少数据库负载。它的简单性、高性
    发表于 07-17 15:58

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

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

    讯维分布式KVM坐席管理系统数据中心管理的应用与案例分析

    讯维分布式KVM坐席管理系统数据中心管理的应用,极大地提高了数据中心的运维效率和安全性。该系统
    的头像 发表于 05-16 16:27 525次阅读

    HarmonyOS开发案例:【搭建关系数据库】(4)

    本节将介绍如何调用关系数据库接口本地搭建数据库,并读写相应的用户数据
    的头像 发表于 05-11 10:27 904次阅读
    HarmonyOS开发案例:【搭建关系<b class='flag-5'>型</b><b class='flag-5'>数据库</b>】(4)

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

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

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

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

    分布式系统交通监控工程的创新应用案例

    随着城市化进程的加速和交通流量的不断增长,交通监控工程维护交通秩序、保障交通安全方面发挥着越来越重要的作用。讯维分布式系统凭借其强大的分布式处理能力和高度的集成性,
    的头像 发表于 03-18 16:14 513次阅读