日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

基于linux和php的稳定的分布式数据采集架构

發布時間:2025/7/14 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于linux和php的稳定的分布式数据采集架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據采集對于一些網站至關重要,在開發這種采集程序時會遇到如下一些問題:
一、單進程采集慢,采集任務的間隔時間無法控制。
二、數據下載部分和分析部分不分離導致可移植性不強,調試困難。
三、采集程序受機器性能瓶頸和網速瓶頸限制。
四、遭受數據源的封鎖。
等等。。。。
這就要求采集程序必須足夠智能化,有如下幾點要求:
一、可以多機器分布運行,以適應大量數據的采集。
二、能夠多并發采集,使采集任務的運行周期可控。
三、下載程序和分析程序分離,不僅是程序上的分離,也需要機器上的分離。
四、能夠很容易的加入新的采集任務,很容易的調試。
五、對采集頁面內容的分析能夠模糊匹配。
六、下載時能夠調用代理。
七、長期自動維護一個有效的代理列表
經過幾次大的改動,我現在設計的基于linux和php的采集程序架構如下:
Snatch(主目錄)
? ?|-Lib(類庫、函數、配置的目錄)
? ?|? ?|-Config.inc.php(主程序變量配置)
? ?|? ?|-OtherConfig.inc.php(其他配置文件若干)
? ?|? ?|-Functions.inc.php(函數文件若干)
? ?|? ?|-Classes.inc.php(類庫文件若干)
? ?|? ?|-ClassLocalDB.inc.php(連接本地數據庫的操作類)
? ?|? ?|-ClassRemoteDB.inc.php(連接遠程數據庫的操作類)
? ?|? ?|-ClassLog.inc.php(寫下載分析的日志)
? ?|-Paser(分析器程序目錄)
? ?|? ?|-WebSite1(針對WebSite1的分析程序目錄)
? ?|? ?|? ?|-WebSite1Paser1.php(針對WebSite1的分析程序1)
? ?|? ?|? ?|-WebSite1Paser2.php(針對WebSite1的分析程序2)
? ?|? ?|-WebSite2(針對WebSite2的分析程序目錄)
? ?|? ?|-ProxyWebSite1(分析代理服務器列表的站點1,取得代理服務器地址并入庫)
? ?|? ?|-ProxyWebSite2(分析代理服務器列表的站點2,取得代理服務器地址并入庫)
? ?|? ?|-... ...
? ?|-Log(日志目錄)
? ?|? ?|-WebSite1.log(WebSite1的下載及數據分析日志)
? ?|? ?|-WebSite2.log(WebSite2的下載及數據分析日志)
? ?|? ?|-... ...
? ?|-Files(下載后的文件保存目錄)
? ?|-Main.php(主入口程序,分配下載任務)
? ?|-Assign.php(取得下載任務,分配給Down.php執行)
? ?|-Down.php(進行下載并將下載保存的文件調出來分析)
? ?|-DelOvertimeData.php(清除很老的下載文件)
? ?|-ErrorNotice.php(監控下載程序,在其出錯時發信通知相關人)
? ?|-Proxy.php(校驗數據庫中的代理列表,分析其有效性及連接速度)
? ?|-Fork(鉤子程序,使下載和分析并發)
? ?|-Main.sh(封裝Main.php,使其在shell下運行不出現包含路徑錯誤)
? ?|-Assign.sh(封裝Assign.php)
? ?|-DelOvertimeData.sh(封裝DelOvertimeData.php)
? ?|-ErrorNotice.sh(封裝ErrorNotice.php)
? ?|-Proxy.sh(封裝Proxy.php)
? ?
本地數據庫表結構如下(簡單介紹):
? ?DownloadList表:
? ?? ?`ID` int(10) unsigned NOT NULL auto_increment,? ?自增ID
? ?? ?`ParentID` int(11) NOT NULL default '0',? ?? ?? ?父ID,也就是該記錄由哪個下載記錄衍生來的
? ?? ?`SiteName` char(32) NOT NULL default '',? ?? ?? ?采集網站的名稱或代號
? ?? ?`LocalServerName` char(32) NOT NULL default '',??該采集任務由本地若干臺機器里的哪一臺來完成
? ?? ?`URL` char(255) NOT NULL default '',? ?? ?? ?? ? 需要下載的數據頁地址
? ?? ?`FileName` char(64) NOT NULL default '',? ?? ?? ?下載后保存的文件名
? ?? ?`FileSize` int(11) NOT NULL default '0',? ?? ?? ?下載后文件的大小
? ?? ?`Handler` char(64) NOT NULL default '',? ?? ?? ? 分析器的php文件路徑,如./Paser/WebSite1/Paser1.php
? ?? ?`Status` enum('Wait','Download','Doing','Done','Dead') NOT NULL default 'Wait',? ?? ?該任務的狀態
? ?? ?`ProxyID` int(11) NOT NULL default '0',? ?? ?? ? 該任務使用的代理ID,為0則不使用代理下載
? ?? ?`Remark` char(100) NOT NULL default '',? ?? ?? ? 備注字段
? ?? ?`WaitAddTime` datetime NOT NULL default '0000-00-00 00:00:00',? ???記錄加入進行等待的時間
? ?? ?`DownloadAddTime` datetime NOT NULL default '0000-00-00 00:00:00',??記錄開始下載的時間
? ?? ?`DoingAddTime` datetime NOT NULL default '0000-00-00 00:00:00',? ???記錄開始分析的時間
? ?? ?`DoneAddTime` datetime NOT NULL default '0000-00-00 00:00:00',? ?? ?記錄完成的時間
? ?? ?
? ?ProxyList表:
? ?? ?`ID` int(11) NOT NULL auto_increment,? ?? ? 自增ID
? ?? ?`Proxy` char(30) NOT NULL default '',? ?? ? 代理地址,如: 127.0.0.1:8080
? ?? ?`Status` enum('Bad','Good','Perfect') NOT NULL default 'Bad',? ? 該代理狀態
? ?? ?`SocketTime` float NOT NULL default '3',? ?? ?? ?? ?? ?? ?? ?? ? 本地連接該代理socket時間
? ?? ?`UsedCount` int(11) NOT NULL default '0',? ?? ?? ?? ?? ?? ?? ?? ?被使用的次數
? ?? ?`AddTime` datetime NOT NULL default '0000-00-00 00:00:00',? ?? ? 代理被加入列表的時間
? ?? ?`LastTime` datetime NOT NULL default '0000-00-00 00:00:00',? ?? ?代理被最后一次驗證的時間
? ?? ?
? ?其它相關表:(略)
? ?
介紹幾個文件(只介紹,不貼代碼):
一、Main.php
close();
?>
? ??
二、Assign.php
/dev/null";?
}
$LocalDB->close();
?>
三、Down.php
四、Proxy.php (維護有效的代理列表)
? ? 方法有兩種:
? ? 1、對代理地址的代理端口進行socket連接。設定連接超時為3秒(3秒仍舊連不上的代理就別要了)
? ?? ? 如果連接上了,計算連接時間,并更新該代理記錄的數據SocketTime字段,判斷其Status是Bad, Good,還是Perfect
? ? 2、對于非Bad的代理,進行下載文件的實驗,如果沒使用代理下載的文件和使用代理下載的文件一樣,則該代理真實有效。
? ??
? ? 程序略
? ??
多臺機器分布式采集:
只有一臺運行Main.sh,2分鐘運行一次。
其他機器運行Assign.sh,1分鐘一次,Assign.php會根據DownloadList表里的LocalServerName字段來取回任務并完成它。
LocalServerName值由Main.php加載采集任務時分配。這個也可以根據各采集機器負載情況來自動調整。
日志:
采集分析的日志寫如Log目錄,以便方便的查看到是否采集到數據,分析程序是否有效,在出現錯誤時也可以找到錯誤的可能地點和時間。

有點復雜,我只寫了大體思路,頁面分析部分沒有涉及,但是也非常重要。
后臺管理也沒談。
架起來之后很爽,只要你采集的機器多,建一個qihoo沒問題。
以前公司做的采集就是這個架構,采集sina, tom, 163等等一共143個頻道的內容。
對某幾個網站收費數據的精確采集和分析也用的這個(當然,需要模擬登錄)。
還是相當穩定的

轉載于:https://www.cnblogs.com/xlfhnny/p/4456410.html

總結

以上是生活随笔為你收集整理的基于linux和php的稳定的分布式数据采集架构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。