精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    50

    瀏覽量

    9074
  • Redis
    +關注

    關注

    0

    文章

    371

    瀏覽量

    10846
收藏 人收藏

    評論

    相關推薦

    PingCAP推出TiDB開源分布式數據庫

    的性能表現。我們將繼續堅持開源的創新理念,將TiDB打造成一個領先的數據庫產品。” 部署新一代分布式數據庫已經成為用戶釋放數據價值、推動數字化轉型的重要方式,但隨著數據的快速增長以及上
    的頭像 發表于 11-24 11:26 ?252次閱讀
    PingCAP推出TiDB開源<b class='flag-5'>分布式數據庫</b>

    一文講清什么是分布式云化數據庫

    分布式云化數據庫是一種先進的數據管理系統,它將傳統的數據庫技術與分布式計算、云計算和大
    的頭像 發表于 10-14 10:06 ?185次閱讀

    分布式云化數據庫的優缺點分析

    分布式云化數據庫的優點主要體現在高可用性和容錯性、可擴展性、體系結構、數據一致性、成本、升級迭代等方面。同時也存在一些缺點,如通信開銷較大、數據的存取結構復雜、
    的頭像 發表于 09-14 09:42 ?232次閱讀

    基于分布式存儲WDS的金融信創云承載數據庫類關鍵應用

    基于分布式存儲WDS的金融信創云承載數據庫類關鍵應用
    的頭像 發表于 08-16 09:42 ?241次閱讀
    基于<b class='flag-5'>分布式</b>存儲WDS的金融信創云承載<b class='flag-5'>數據庫</b>類關鍵應用

    鴻蒙開發接口數據管理:【@ohos.data.distributedData (分布式數據管理)】

    分布式數據管理為應用程序提供不同設備間數據庫分布式協同能力。通過調用分布式數據各個接口,應用程
    的頭像 發表于 06-07 09:30 ?893次閱讀
    鴻蒙開發接口<b class='flag-5'>數據</b>管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>數據</b>管理)】

    HarmonyOS開發實例:【分布式手寫板】

    使用設備管理及分布式鍵值數據庫能力,實現多設備之間手寫板應用拉起及同步書寫內容的功能。
    的頭像 發表于 04-17 21:45 ?445次閱讀
    HarmonyOS開發實例:【<b class='flag-5'>分布式</b>手寫板】

    鴻蒙HarmonyOS開發實例:【分布式關系數據庫

    使用[@ohos.data.relationalStore]接口和[@ohos.distributedDeviceManager]?接口展示了eTS中分布式關系數據庫的使用,
    的頭像 發表于 04-11 09:52 ?815次閱讀
    鴻蒙HarmonyOS開發實例:【<b class='flag-5'>分布式</b>關系<b class='flag-5'>型</b><b class='flag-5'>數據庫</b>】

    分布式IO工業自動化數據采集與分析的核心

    代替人工操縱機器和機器體系進行加工生產的趨勢,分布式I/O可以與各種傳感器、執行器和控制系統相連接,實現生產線的自動化控制。通過實時采集和傳輸數據分布式I/O能夠精確控制生產過程
    發表于 12-28 14:47

    基于Rust的嵌入符合ACID的鍵值數據庫

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入、符合 ACID 的鍵值數據庫
    的頭像 發表于 12-28 11:29 ?863次閱讀

    分布式鎖的三種實現方式

    ,下面將分別介紹三種常見的實現方式。 一、基于數據庫實現的分布式分布式系統
    的頭像 發表于 12-28 10:01 ?859次閱讀

    分布式系統硬件資源池原理和接入實踐

    的使用習慣;手機導航接續到車機后,車機的 GPS 信號可以共享給手機,結合手機 GPS 信號提供更高精度的定位數據;可以看到,智慧出行場景,可以通過分布式硬件資源池結合手機和車機的
    發表于 12-06 10:02

    redis是關系數據庫

    Redis不是關系數據庫,它是一種基于鍵值對的NoSQL數據庫本文中,我將對Redis進行詳細介紹,包括其特點、用途、常見命令和應用場
    的頭像 發表于 12-05 10:32 ?1499次閱讀

    redis分布式鎖三個方法

    Redis是一種高性能的分布式緩存和鍵值存儲系統,它提供了一種可靠的分布式鎖解決方案。分布式
    的頭像 發表于 12-04 11:22 ?1407次閱讀

    redis分布式鎖的應用場景有哪些

    系統,多個節點可能同時訪問共享資源,例如數據庫、文件系統等。使用Redis分布式鎖可以保證
    的頭像 發表于 12-04 11:21 ?1396次閱讀

    springcloud 分布式事務解決方案實例

    么都執行成功,要么都執行失敗。本文將介紹如何使用Spring Cloud來實現分布式事務。 分布式系統,使用
    的頭像 發表于 12-03 16:32 ?1101次閱讀