成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

基于 ZooKeeper 實(shí)現(xiàn)爬蟲(chóng)集群的監(jiān)控

Backache / 2432人閱讀

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

ZooKeeper

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

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

各個(gè)爬蟲(chóng)的節(jié)點(diǎn)通過(guò)注冊(cè)到 ZooKeeper 從而實(shí)現(xiàn)爬蟲(chóng)集群的管理。NetDiscovery 正是借助了 ZooKeeper 的特性來(lái)監(jiān)控爬蟲(chóng)集群。

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

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

NetDiscovery 包含了 Spider 和 SpiderEngine。 Spider 用于實(shí)現(xiàn)爬蟲(chóng)的業(yè)務(wù)邏輯,Spider 可以添加到 SpiderEngine,由 SpiderEngine 來(lái)管理各個(gè) Spider 的生命周期。

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

可以將 SpiderEngine 在運(yùn)行時(shí),先注冊(cè)到 ZooKeeper。(需要事先在 ZooKeeper 集群創(chuàng)建 /netdiscovery 節(jié)點(diǎn))

    /**
     * 啟動(dòng)SpiderEngine中所有的spider,讓每個(gè)爬蟲(chóng)并行運(yùn)行起來(lái)。
     *
     */
    public void run() {

        if (Preconditions.isNotBlank(spiders)) {

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

    /**
     * 將當(dāng)前 SpiderEngine 注冊(cè)到 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 類(lèi)。 它借助 Zookeeper 的 Watcher 機(jī)制,監(jiān)聽(tīng)已經(jīng)注冊(cè)到 /netdiscovery 這個(gè)父 zNode 下的各個(gè)子 zNode ,也就是各個(gè) SpiderEngine。

Watcher機(jī)制是指 ZooKeeper 客戶(hù)端向 ZooKeeper 服務(wù)器注冊(cè) Watcher 的同時(shí),會(huì)將 Watcher 對(duì)象存儲(chǔ)在客戶(hù)端的 WatchManager 中。ZooKeeper 服務(wù)器觸發(fā) Watcher 事件后,會(huì)向客戶(hù)端發(fā)送通知,客戶(hù)端線程從 WatchManager 中回調(diào) Watcher 執(zhí)行相應(yīng)的功能。

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

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

所以需要多帶帶運(yùn)行一個(gè)進(jìn)程,例如:

public class TestCuratorManager {

    public static void main(String[] args) {

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

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

總結(jié)

爬蟲(chóng)框架 github 地址:github.com/fengzhizi71…

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


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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/7884.html

相關(guān)文章

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

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

    bingo 評(píng)論0 收藏0
  • DCOS應(yīng)用案例-不同場(chǎng)景應(yīng)用上云遷移

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

    PumpkinDylan 評(píng)論0 收藏0
  • ZooKeeper學(xué)習(xí)筆記之掃盲

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

    sarva 評(píng)論0 收藏0
  • 人工智能幫助千萬(wàn)用戶(hù)完成「隱形征信」計(jì)算

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

    Developer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<