亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

基于 ZooKeeper 實現(xiàn)爬蟲集群的監(jiān)控

Backache / 2477人閱讀

摘要:各個爬蟲的節(jié)點通過注冊到從而實現(xiàn)爬蟲集群的管理。是一款基于等框架實現(xiàn)的通用爬蟲框架。爬蟲集群的監(jiān)控包含了和。用于實現(xiàn)爬蟲的業(yè)務邏輯,可以添加到,由來管理各個的生命周期。

ZooKeeper

ZooKeeper 是一個開源的分布式協(xié)調(diào)服務,ZooKeeper框架最初是在“Yahoo!"上構(gòu)建的,用于以簡單而穩(wěn)健的方式訪問他們的應用程序。 后來,Apache ZooKeeper成為Hadoop,HBase和其他分布式框架使用的有組織服務的標準。 例如,Apache HBase使用ZooKeeper跟蹤分布式數(shù)據(jù)的狀態(tài)。ZooKeeper 的設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來,構(gòu)成一個高效可靠的原語集,并以一系列簡單易用的接口提供給用戶使用。

ZooKeeper 通常用于:命名服務、配置管理、集群管理、分布式協(xié)調(diào)/通知、分布式鎖和分布式隊列等等。

各個爬蟲的節(jié)點通過注冊到 ZooKeeper 從而實現(xiàn)爬蟲集群的管理。NetDiscovery 正是借助了 ZooKeeper 的特性來監(jiān)控爬蟲集群。

NetDiscovery 是一款基于 Vert.x、RxJava 2 等框架實現(xiàn)的通用爬蟲框架。它包含了豐富的特性。

爬蟲集群的監(jiān)控

NetDiscovery 包含了 Spider 和 SpiderEngine。 Spider 用于實現(xiàn)爬蟲的業(yè)務邏輯,Spider 可以添加到 SpiderEngine,由 SpiderEngine 來管理各個 Spider 的生命周期。

但是 SpiderEngine 部署到每一個節(jié)點之后,SpiderEngine 如何進行監(jiān)控和管理呢?

可以將 SpiderEngine 在運行時,先注冊到 ZooKeeper。(需要事先在 ZooKeeper 集群創(chuàng)建 /netdiscovery 節(jié)點)

    /**
     * 啟動SpiderEngine中所有的spider,讓每個爬蟲并行運行起來。
     *
     */
    public void run() {

        if (Preconditions.isNotBlank(spiders)) {

            registerZK();
            ......  
        }
    }

    /**
     * 將當前 SpiderEngine 注冊到 zookeeper 指定的目錄 /netdiscovery 下
     */
    private void registerZK() {

        if (Preconditions.isNotBlank(zkStr) && useZk) {
            log.info("zkStr: {}", zkStr);

            RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);
            CuratorFramework client = CuratorFrameworkFactory.newClient(zkStr, retryPolicy);
            client.start();
            try {
                String ipAddr = InetAddress.getLocalHost().getHostAddress() + "-" + defaultHttpdPort + "-" + System.currentTimeMillis();
                String nowSpiderEngineZNode = "/netdiscovery/" + ipAddr;
                client.create().withMode(CreateMode.EPHEMERAL).forPath(nowSpiderEngineZNode,nowSpiderEngineZNode.getBytes());
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

另外,需要使用 NetDiscovery Monitor 的 CuratorManager 類。 它借助 Zookeeper 的 Watcher 機制,監(jiān)聽已經(jīng)注冊到 /netdiscovery 這個父 zNode 下的各個子 zNode ,也就是各個 SpiderEngine。

Watcher機制是指 ZooKeeper 客戶端向 ZooKeeper 服務器注冊 Watcher 的同時,會將 Watcher 對象存儲在客戶端的 WatchManager 中。ZooKeeper 服務器觸發(fā) Watcher 事件后,會向客戶端發(fā)送通知,客戶端線程從 WatchManager 中回調(diào) Watcher 執(zhí)行相應的功能。

    /**
     * 當前所監(jiān)控的父的 zNode 下若是子 zNode 發(fā)生了變化:新增,刪除,修改
     * 

* 下述方法都會觸發(fā)執(zhí)行 * * @param event */ @Override public void process(WatchedEvent event) { List newZodeInfos = null; try { newZodeInfos = client.getChildren().usingWatcher(this).forPath("/netdiscovery"); //根據(jù)初始化容器的長度與最新的容器的長度進行比對,就可以推導出當前 SpiderEngine 集群的狀態(tài):新增,宕機/下線,變更... //哪個容器中元素多,就循環(huán)遍歷哪個容器。 if (Preconditions.isNotBlank(newZodeInfos)) { if (newZodeInfos.size()>allZnodes.size()){ //明確顯示新增了哪個 SpiderEngine 節(jié)點 for (String nowZNode:newZodeInfos) { if (!allZnodes.contains(nowZNode)){ log.info("新增 SpiderEngine 節(jié)點{}", nowZNode); } } }else if (newZodeInfos.size()// 宕機/下線 // 明確顯示哪個 SpiderEngine 節(jié)點宕機/下線了 for (String initZNode : allZnodes) { if (!newZodeInfos.contains(initZNode)) { log.info("SpiderEngine 節(jié)點【{}】下線了!", initZNode); // 如果有下線的處理,則處理(例如發(fā)郵件、短信等) if (serverOfflineProcess!=null) { serverOfflineProcess.process(); } } } }else { // SpiderEngine 集群正常運行; // 宕機/下線了,當時馬上重啟了,總的爬蟲未發(fā)生變化 } } } catch (Exception e) { e.printStackTrace(); } allZnodes = newZodeInfos; }

所以需要多帶帶運行一個進程,例如:

public class TestCuratorManager {

    public static void main(String[] args) {

        CuratorManager curatorManager = new CuratorManager();
        curatorManager.start();
    }
}

下圖反映了 ZooKeeper 如何監(jiān)控 SpiderEngine 集群。

總結(jié)

爬蟲框架 github 地址:github.com/fengzhizi71…

本文介紹了如何使用 ZooKeeper 來監(jiān)控爬蟲的集群。未來,NetDiscovery 還會增加更為通用的功能。


Java與Android技術棧:每周更新推送原創(chuàng)技術文章,歡迎掃描下方的公眾號二維碼并關注,期待與您的共同成長和進步。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/7884.html

相關文章

  • Scrapy-Cluster結(jié)合Spiderkeeper管理分布式爬蟲

    摘要:分布式爬蟲,分發(fā)網(wǎng)址是基于地址。注意要使用管理同一個集群,爬蟲項目名稱須一致,同時集群中配置相同任務瀏覽器訪問啟動爬蟲時即可看見兩個集群配置,啟動同名爬蟲開始分布式爬蟲啟動分布式爬蟲后狀態(tài) Scrapy-cluster 建設 基于Scrapy-cluster庫的kafka-monitor可以實現(xiàn)分布式爬蟲 Scrapyd+Spiderkeeper實現(xiàn)爬蟲的可視化管理 環(huán)境 IP...

    bingo 評論0 收藏0
  • DCOS應用案例-不同場景應用上云遷移

    摘要:極大地降低了平臺的復雜度,更加方便企業(yè)開發(fā)人員實現(xiàn)各種業(yè)務應用,幫助企業(yè)輕松打造基于云計算的軟件基礎設施。本文將從實際案例出發(fā),結(jié)合不同的使用場景,為各位介紹的這些特性。是未來數(shù)據(jù)中心操作系統(tǒng)的核心。 0.前言 隨著 Docker 技術的日漸火熱,本就火爆的云計算行業(yè)進入了一個加速階段。云計算最大的特點是彈性和靈活,幫助企業(yè)應對復雜的業(yè)務需求。由于云計算的IT構(gòu)架和上一代的IT構(gòu)架有很...

    PumpkinDylan 評論0 收藏0
  • ZooKeeper學習筆記之掃盲

    摘要:可靠性一旦數(shù)據(jù)更新成功,將一直保持,直到新的更新。這是一種主動的分布式數(shù)據(jù)結(jié)構(gòu),能夠在外部情況發(fā)生變化時候主動修改數(shù)據(jù)項狀態(tài)的數(shù)據(jù)機構(gòu)。如果監(jiān)視節(jié)點狀態(tài)發(fā)生變化,則跳轉(zhuǎn)到第步,繼續(xù)進行后續(xù)的操作,直到退出鎖競爭。 題外話:從字面上來看,ZooKeeper表示動物園管理員,而Hadoop生態(tài)系統(tǒng)中,許多項目的Logo都采用了動物,比如Hadoop采用了大象的形象,所以可以ZooKeepe...

    sarva 評論0 收藏0
  • 人工智能幫助千萬用戶完成「隱形征信」計算

    摘要:量化派是一家數(shù)據(jù)驅(qū)動的科技金融公司,通過人工智能大數(shù)據(jù)機器學習等前沿技術提供消費信貸撮合及消費場景下的白條服務,每年處理千萬級用戶信用及信用消費申請。 「小楊」最近裝修房子,準備去銀行貸款,但是聽說好多人會因為個人征信問題被銀行拒絕貸款!于是,他先查了一下自己的央行征信,發(fā)現(xiàn)竟然沒有自己的征信信息,「小楊」陷入了沉思,自己經(jīng)常在淘寶、jd 上買東西,也有淘寶花唄和京東白條,怎么會沒有征...

    Developer 評論0 收藏0

發(fā)表評論

0條評論

Backache

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<