技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,具體地說是一種實(shí)用性強(qiáng)、基于Avro RPC傳輸?shù)姆植际皆贫瞬l(fā)采集方法。
背景技術(shù):
Avro RPC 是一個(gè)支持跨語言實(shí)現(xiàn)的RPC服務(wù)框架。非常輕量級,實(shí)現(xiàn)簡潔,使用方便,同時(shí)也方便使用者進(jìn)行二次開發(fā),邏輯上該框架分為兩層:
1:網(wǎng)絡(luò)傳輸層。使用Netty的Nio實(shí)現(xiàn)。
2:協(xié)議層??蓴U(kuò)展目前支持的數(shù)據(jù)序列化方式有Avro,JSON,Hessian,Java序列化。 使用者可以注冊自己的協(xié)議格式及序列化方式。
主要特點(diǎn):
1:客戶端傳輸層與應(yīng)用層邏輯分離,傳輸層主要職責(zé)包括創(chuàng)建連接,連接查找與復(fù)用,傳輸數(shù)據(jù),接收服務(wù)端回復(fù)后回調(diào)應(yīng)用層;
2:客戶端支持同步調(diào)用和異步調(diào)用。服務(wù)異步化能很好的提高系統(tǒng)吞吐量,建議使用異步調(diào)用。為防止異步發(fā)送請求過快,客戶端增加了“請求流量限制”功能,調(diào)用超時(shí)管理。
3:服務(wù)端有一個(gè)協(xié)議注冊工廠和序列化注冊工廠。這樣方便針對不同的應(yīng)用場景來定制服務(wù)方式。RPC應(yīng)該只是服務(wù)方式的一種。在分布式的系統(tǒng)架構(gòu)中,分布式節(jié)點(diǎn)之間的通信會(huì)存在多種方式,比如MQ的TOP消息,一個(gè)消息可以有多個(gè)訂閱者。因此Avro RPC不僅僅是一個(gè)RPC服務(wù)框架,還是一個(gè)分布式通信的一個(gè)基礎(chǔ)骨架,提供了很好的擴(kuò)展性;
4:非常輕量級,性能好,適合二次開發(fā)。
在現(xiàn)有的大數(shù)據(jù)分布式采集過程中,具體地說,尤其涉及在分布式云端并發(fā)采集情況下,現(xiàn)有的云端服務(wù)器采集效率不高,服務(wù)器的并發(fā)采集數(shù)一般,同時(shí)采集的數(shù)據(jù)傳輸效率一般,基于此,本發(fā)明提供一種軟件產(chǎn)品原型云端分享協(xié)作方法,以提升并發(fā)量和采集效率的采集策略。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的技術(shù)任務(wù)是針對以上不足之處,提供一種實(shí)用性強(qiáng)、基于Avro RPC傳輸?shù)姆植际皆贫瞬l(fā)采集方法。
一種基于Avro RPC傳輸?shù)姆植际皆贫瞬l(fā)采集方法,包括客戶端和服務(wù)端兩個(gè)模塊,其中:
在服務(wù)端設(shè)置有URL存放容器、規(guī)則配置容器、計(jì)數(shù)容器,規(guī)則配置容器存放客戶端發(fā)送的采集規(guī)則,規(guī)定不同網(wǎng)站的采集策略;計(jì)數(shù)容器則根據(jù)采集策略,按照計(jì)數(shù)遞減的方式推送采集網(wǎng)頁實(shí)現(xiàn)并發(fā)采集功能;最后由URL存放容器存放客戶端發(fā)送的URL并按照域名進(jìn)行分組存放;
客戶端定期檢驗(yàn)服務(wù)端狀態(tài),查看URL存放容器剩余容量,批量發(fā)送待采集網(wǎng)頁,批量回收已采集網(wǎng)頁,批量發(fā)送網(wǎng)頁采集規(guī)則。
所述URL存放容器通過java提供的ConcurrentHashMap實(shí)現(xiàn)的,按照域名作為Map的Key,對應(yīng)的Value由待下載URL組成的阻塞隊(duì)列,下載時(shí)下載線程根據(jù)域名獲取域名下的第一個(gè)URL進(jìn)行下載。
URL存放容器存放客戶端發(fā)送的URL過程為:在URL存放容器中定時(shí)檢驗(yàn)其URL的存放數(shù)量,若URL的存放數(shù)量小于存放閾值,則立即將一批待下載的URL發(fā)送到服務(wù)端,并放入U(xiǎn)RL容器中;若URL的存放數(shù)量大于等于存放閾值則延遲發(fā)送一批待下載的URL,直到URL的存放數(shù)量小于存放閾值。
所述計(jì)數(shù)容器將計(jì)數(shù)結(jié)束的任務(wù)推送到下載隊(duì)列,由線程池取該任務(wù)URL存放容器的URL進(jìn)行下載。
所述計(jì)數(shù)容器通過java提供的ConcurrentHashMap實(shí)現(xiàn),其Key為域名,Value則為計(jì)數(shù)間隔,計(jì)數(shù)間隔初始為固定的采集間隔,其單位為毫秒,每秒減1000毫秒,直到計(jì)數(shù)間隔為0則將此Key分配進(jìn)入下載隊(duì)列,采集線程從下載隊(duì)列中獲取Key安排相應(yīng)的下載任務(wù),同時(shí)將計(jì)數(shù)間隔重置為默認(rèn)的采集間隔,完成一個(gè)下載周期。
計(jì)數(shù)容器進(jìn)行定時(shí)并發(fā)下載的具體過程為:
創(chuàng)建線程池,獲取計(jì)數(shù)容器中計(jì)數(shù)為0的域名,將計(jì)數(shù)容器的計(jì)數(shù)置為-1,同時(shí)將域名放入下載隊(duì)列,將下載任務(wù)提交到線程池,等待線程下載;
若是下載線程發(fā)現(xiàn)URL存放容器中有下載隊(duì)列域名的待下載URL,則將URL容器中取出的URL下載,并將計(jì)數(shù)容器中的計(jì)數(shù)重置,同時(shí)將下載的網(wǎng)頁添加到已下載網(wǎng)頁隊(duì)列;
若是下載線程發(fā)現(xiàn)URL存放容器中已不存在下載隊(duì)列域名的待下載URL,則將配置容器的域名置為非激活,同時(shí)刪除計(jì)數(shù)容器和URL存放容器中的相關(guān)數(shù)據(jù)。
所述規(guī)則配置容器通過java提供的重寫CopyOnWriteMap實(shí)現(xiàn)的,供計(jì)數(shù)容器獲得任務(wù)配置;該配置容器是存放網(wǎng)站下載相關(guān)配置的,是網(wǎng)站下載的采集間隔,該采集間隔即默認(rèn)的采集間隔,作為計(jì)數(shù)容器重置計(jì)數(shù)間隔的依據(jù)。
在客戶端批量發(fā)送待采集網(wǎng)頁后,服務(wù)端接收到該批量發(fā)送的URL,激活配置容器中相應(yīng)域名的采集任務(wù),若配置容器中有該域名的配置規(guī)則,則獲取相應(yīng)的采集間隔并存入計(jì)數(shù)容器中,若配置容器中沒有該域名的配置規(guī)則,則使用默認(rèn)的采集間隔并存入計(jì)數(shù)容器中,之后將批量發(fā)送的URL,存入到URL存放容器中。
本發(fā)明的一種基于Avro RPC傳輸?shù)姆植际皆贫瞬l(fā)采集方法,具有以下優(yōu)點(diǎn):
本發(fā)明提供的一種基于Avro RPC傳輸?shù)姆植际皆贫瞬l(fā)采集方法,是一種針對分布式情況下,高并發(fā)、云端采集的問題提供有效的解決方案;該方法可有效提高云端服務(wù)器的效率,增大服務(wù)器的并發(fā)采集數(shù),優(yōu)化采集效率;該方法提供的分布式云端并發(fā)采集策略,同時(shí)使用Avro RPC基于Avro序列化提升了傳輸效率的同時(shí),提升了采集的并發(fā)效率,實(shí)用性強(qiáng),適用范圍廣泛,易于推廣。
附圖說明
附圖1為本發(fā)明的批量發(fā)送URL流程圖。
附圖2為本發(fā)明的配置發(fā)送流程圖。
附圖3是本發(fā)明的定時(shí)采集并回收網(wǎng)頁流程圖。
具體實(shí)施方式
下面結(jié)合附圖及具體實(shí)施例對本發(fā)明作進(jìn)一步說明。
如附圖1、圖2、圖3所示,本發(fā)明的一種基于Avro RPC傳輸?shù)姆植际皆贫瞬l(fā)采集方法,基于Avro RPC傳輸實(shí)現(xiàn),包括RPC客戶端和RPC服務(wù)端兩個(gè)主要模塊。服務(wù)端包括URL存放容器,規(guī)則配置容器,計(jì)數(shù)容器,其中:
URL存放容器存放客戶端發(fā)送的URL并按照域名進(jìn)行分組存放;規(guī)則配置容器存放客戶端發(fā)送的采集規(guī)則,規(guī)定不同網(wǎng)站的采集策略;計(jì)數(shù)容器按照計(jì)數(shù)遞減的方式推送可采集網(wǎng)頁實(shí)現(xiàn)并發(fā)采集功能。
客戶端實(shí)現(xiàn)定期檢驗(yàn)服務(wù)端狀態(tài),查看URL存放容器剩余容量,批量發(fā)送待采集網(wǎng)頁,批量回收已采集網(wǎng)頁,批量發(fā)送網(wǎng)頁采集規(guī)則等功能。
本發(fā)明要解決的問題:
1)分布式云端并發(fā)采集:將采集任務(wù)分布式部署到云端,通過云端一系列的校驗(yàn)、請求、返回等處理實(shí)現(xiàn)云端并發(fā)采集;
2)URL容器實(shí)現(xiàn):URL容器通過ConcurrentHashMap實(shí)現(xiàn),其內(nèi)部是由LinkedBlockingQueue組成;
3)計(jì)數(shù)容器實(shí)現(xiàn):計(jì)數(shù)容器實(shí)現(xiàn)將計(jì)數(shù)結(jié)束的任務(wù)推送到下載隊(duì)列,有線程池取該任務(wù)URL容器的URL進(jìn)行下載;
4)配置容器實(shí)現(xiàn):配置容器通過重寫的CopyOnWriteMap實(shí)現(xiàn)的,提升其讀寫并發(fā)性能,供計(jì)數(shù)容器獲得任務(wù)配置;
5)URL發(fā)送與下載網(wǎng)頁回傳:通過Avro RPC對其進(jìn)行批量發(fā)送與回傳,客戶端發(fā)送要下載的URL,服務(wù)端接收并放入U(xiǎn)RL容器等待下載。客戶端對服務(wù)端請求已經(jīng)下載的頁面,服務(wù)端批量返回已經(jīng)下載的頁面。
在上述方案中,所述URL存放容器內(nèi)部通過java提供的ConcurrentHashMap實(shí)現(xiàn)的,按照域名作為Map的Key,對應(yīng)的Value是由待下載URL組成的阻塞隊(duì)列,下載時(shí)下載線程根據(jù)域名獲取域名下的第一個(gè)URL進(jìn)行下載。
所述計(jì)數(shù)容器同樣是通過ConcurrentHashMap實(shí)現(xiàn),其Key為域名,Value則為計(jì)數(shù)間隔,計(jì)數(shù)間隔初始為固定的采集間隔(單位毫秒),每秒減1000毫秒,直到計(jì)數(shù)間隔為0則將此Key分配進(jìn)入下載隊(duì)列,采集線程會(huì)從下載隊(duì)列中獲取Key安排相應(yīng)的下載任務(wù),同時(shí)將計(jì)數(shù)間隔重置為默認(rèn)的采集間隔,完成一個(gè)下載周期。
所述配置容器是存放網(wǎng)站下載相關(guān)配置的,主要是網(wǎng)站下載的采集間隔,該采集間隔即默認(rèn)的采集間隔,作為計(jì)數(shù)容器重置計(jì)數(shù)間隔的依據(jù)。
其整體的流程是:
1.定時(shí)檢驗(yàn)云端URL容器中URL的存放數(shù)量:若URL的存放數(shù)量小于某一閾值,則立即將一批待下載的URL發(fā)送到云端,并放入U(xiǎn)RL容器中;若URL的存放數(shù)量大于等于某個(gè)閾值則延遲發(fā)送一批待下載的URL,直到URL的存放數(shù)量小于某一閾值。
2.批量發(fā)送URL:云端接收到批量發(fā)送的URL后,激活配置容器中相應(yīng)域名的采集任務(wù),若配置容器中有該域名的配置規(guī)則,則獲取相應(yīng)的采集間隔并存入計(jì)數(shù)容器中,若配置容器中沒有該域名的配置規(guī)則,則使用默認(rèn)的采集間隔并存入計(jì)數(shù)容器中,之后將批量發(fā)送的URL,存入到URL容器中。
3.發(fā)送配置規(guī)則信息:支持單條或者批量發(fā)送配置規(guī)則到云端,并將配置規(guī)則存放到配置容器中。
4.計(jì)數(shù)容器定時(shí)并發(fā)下載:創(chuàng)建線程池,獲取計(jì)數(shù)容器中計(jì)數(shù)為0的域名,將計(jì)數(shù)容器的計(jì)數(shù)置為-1,同時(shí)將域名放入下載隊(duì)列,將下載任務(wù)提交到線程池,等待線程下載。若是下載線程發(fā)現(xiàn)URL容器中有下載隊(duì)列域名的待下載URL,則將URL容器中取出的URL下載,并將計(jì)數(shù)容器中的計(jì)數(shù)重置,同時(shí)將下載的網(wǎng)頁添加到已下載網(wǎng)頁隊(duì)列。若是下載線程發(fā)現(xiàn)URL容器中已不存在下載隊(duì)列域名的待下載URL,則將配置容器的域名置為非激活,同時(shí)刪除計(jì)數(shù)容器和URL容器中的相關(guān)數(shù)據(jù)。
5.定時(shí)獲取已下載網(wǎng)頁:后端定時(shí)從云端獲取已下載網(wǎng)頁隊(duì)列中的網(wǎng)頁數(shù)據(jù)。
上述具體實(shí)施方式僅是本發(fā)明的具體個(gè)案,本發(fā)明的專利保護(hù)范圍包括但不限于上述具體實(shí)施方式,任何符合本發(fā)明的一種基于Avro RPC傳輸?shù)姆植际皆贫瞬l(fā)采集方法的權(quán)利要求書的且任何所述技術(shù)領(lǐng)域的普通技術(shù)人員對其所做的適當(dāng)變化或替換,皆應(yīng)落入本發(fā)明的專利保護(hù)范圍。