自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個(gè)垃圾信息過濾系統(tǒng)的進(jìn)化之道

原創(chuàng)
運(yùn)維 系統(tǒng)運(yùn)維 新聞
本文介紹了一個(gè)很酷的垃圾信息過濾系統(tǒng)Mollom,這個(gè)系統(tǒng)采用分布在不同地方的兩臺(tái)機(jī)器,每秒可處理100個(gè)請(qǐng)求,目前已經(jīng)處理掉了3730萬條以上的垃圾信息。Mollom架構(gòu)運(yùn)行Java應(yīng)用服務(wù)器和Cassandra系統(tǒng),所需要的資源極少,因?yàn)镸ollom建立了一套非常高效的學(xué)習(xí)系統(tǒng)。

【51CTO 2月15日外電頭條】編者按:每一個(gè)網(wǎng)站的維護(hù)人員多少都被垃圾信息困擾。本文介紹的這個(gè)垃圾信息過濾系統(tǒng)只是眾多可以選擇的方案之一,但是觀察這個(gè)系統(tǒng)的架設(shè)與成長的過程無疑會(huì)對(duì)大家有所啟發(fā)。本文是HighScalability網(wǎng)站的作者Todd Hoff寫的一篇垃圾信息過濾系統(tǒng)的介紹文章,原文標(biāo)題為“Mollom架構(gòu):以每秒處理100個(gè)請(qǐng)求的速度查殺3730萬條垃圾信息”,內(nèi)容主要圍繞系統(tǒng)的技術(shù)設(shè)計(jì)。當(dāng)然,根據(jù)Todd的說法,100rps并不是Mollom吸引他的地方(這并不是一個(gè)高的驚人的數(shù)字),Mollom的吸引力在于它的智能學(xué)習(xí)能力,提供針對(duì)“人”的服務(wù)。下面為正文:

每個(gè)開發(fā)人員在絞盡腦汁尋找一家切實(shí)可行的SaaS新興公司,而Mollom正是他們夢(mèng)想創(chuàng)辦的其中一家很酷的SaaS公司。Mollom的盈利方式依賴于一項(xiàng)實(shí)用的服務(wù):垃圾信息過濾,而一小批開發(fā)人員分散在不同地方。Mollom有助于保護(hù)近40000個(gè)網(wǎng)站遠(yuǎn)離垃圾信息,包括本人的一個(gè)網(wǎng)站,我也因此有機(jī)會(huì)初次了解Mollom。為了竭力阻止垃圾信息出現(xiàn)在我的一個(gè)Drupal網(wǎng)站上(不管使用怎樣的驗(yàn)證碼,結(jié)果都無濟(jì)于事),我花了約10分鐘安裝好Mollom,它立即開始發(fā)揮功效。這正是我所尋求的即可即用的體驗(yàn)。

自從Mollom打開其數(shù)字檢查系統(tǒng)以來,它就拒絕了3730萬條以上的垃圾信息;在這個(gè)過程中,它也明白了多達(dá)90%的信息是垃圾信息。處理這么多垃圾信息的只有兩臺(tái)機(jī)器,分布在不同地方,它們每秒可處理100個(gè)請(qǐng)求;都運(yùn)行Java應(yīng)用服務(wù)器和Cassandra系統(tǒng)。所需要的資源極少,因?yàn)镸ollom建立了一套非常高效的學(xué)習(xí)系統(tǒng)。這不是很酷嗎?那么,Mollom是如何做到的呢?

為了一探究竟,我采訪了Mollom的創(chuàng)辦人之一Benjamin Schrauwen以及Glassfish和Java Enterprise方面的專家Johan Vos。Mollom的總部位于比利時(shí)(比利時(shí)還有其他好東西:大偵探波洛、巧克力和華夫餅),這證明了軟件不分國界的道理。 

統(tǒng)計(jì)數(shù)字

◆Mollom服務(wù)于40000個(gè)活躍網(wǎng)站,其中許多是大客戶,比如索尼音樂公司、華納兄弟、??怂剐侣劸W(wǎng)和《經(jīng)濟(jì)學(xué)家》雜志社。有許多大品牌,有許多大網(wǎng)站,還有許多評(píng)論。 

◆每天查出50萬條垃圾信息。 

◆每秒處理100個(gè)應(yīng)用編程接口(API)調(diào)用。

◆垃圾信息檢查方面的延遲很低,用時(shí)在30至50毫秒。最慢的連接用時(shí)500毫秒。5%以下的延遲是250毫秒。它確實(shí)為了提高速度進(jìn)行了優(yōu)化。 

◆垃圾信息的分類效率高達(dá)99.95%。這意味著,在10000條垃圾信息中只有5條沒有被Mollom發(fā)現(xiàn)。 

◆歐洲的社交網(wǎng)站Netlog在其數(shù)據(jù)中心實(shí)施了自己的Mollom系統(tǒng)。Netlog每天處理約400萬條信息,所用的自定義分類器經(jīng)受數(shù)據(jù)方面的訓(xùn)練。

平臺(tái)

◆兩臺(tái)生產(chǎn)服務(wù)器在兩個(gè)不同的數(shù)據(jù)中心運(yùn)行,確保故障切換。 

◆一臺(tái)服務(wù)器放在美國東海岸,另一臺(tái)放在西海岸。 

◆每臺(tái)服務(wù)器配備英特爾至強(qiáng)四核2.8GHz處理器、16GB內(nèi)存和4只采用RAID 10配置的300 GB硬盤。 

◆SoftLayer—機(jī)器由SoftLayer托管。

◆Cassandra—選擇了NoSQL數(shù)據(jù)庫,原因是寫入性能高,還能夠跨多個(gè)數(shù)據(jù)中心來操作。 

◆Glassfish—面向Java EE平臺(tái)的開源應(yīng)用服務(wù)器。Mollom選擇Glassfish的理由是,它具有企業(yè)就緒功能,比如復(fù)制和故障切換。 

◆Hudson—提供了跨所有服務(wù)器,不斷測(cè)試和部署后端系統(tǒng)的功能。 

◆Java—Mollom一開始就是用Java編寫而成的。 

◆Munin—用于測(cè)量和描繪關(guān)于服務(wù)器運(yùn)行狀況的度量標(biāo)準(zhǔn)。 

◆MySQL—JPA(Java持久性API)用于普通的數(shù)據(jù)集,Cassandra則用于龐大的數(shù)據(jù)集。

◆Pingdom—用于監(jiān)測(cè)正常運(yùn)行時(shí)間。 

◆Zendesk—用于支持。 

◆Drupal—用于使用自定義電子商務(wù)模塊的主網(wǎng)站。 

◆Unfuddle—分布式開發(fā)團(tuán)隊(duì)使用Subversion托管來控制源代碼。 

Mollom是什么?

Mollom是一項(xiàng)Web服務(wù),用于將各種類型的垃圾信息從用戶生成的內(nèi)容中過濾掉,這些內(nèi)容包括:評(píng)論留言、論壇帖子、博客帖子、民意調(diào)查、聯(lián)系表單、登記表單和密碼請(qǐng)求表單。確定垃圾信息的依據(jù)不僅僅有所發(fā)的內(nèi)容,還有發(fā)帖者過去的行為和信譽(yù)。Mollom的機(jī)器學(xué)習(xí)算法為你充當(dāng)24 x 7不間斷的數(shù)字版主,所以你不必操心。 

Mollom是怎么使用的?

比如說,Drupal等應(yīng)用程序使用模塊(Module)來整合Mollom;模塊可以將自己安裝到內(nèi)容編輯集成點(diǎn)上,那樣可以在內(nèi)容寫到數(shù)據(jù)庫之前,先檢查內(nèi)容里面有沒有垃圾信息。這個(gè)過程就像這樣: 

◆用戶將評(píng)論提交到網(wǎng)站上后,對(duì)后端服務(wù)器進(jìn)行API調(diào)用。 

◆內(nèi)容經(jīng)過分析;如果是垃圾信息,就會(huì)告知網(wǎng)站阻止內(nèi)容;或者如果后端服務(wù)器不確信,它會(huì)建議網(wǎng)站顯示驗(yàn)證碼,后端服務(wù)器同時(shí)會(huì)提供驗(yàn)證碼。 

◆驗(yàn)證碼正確填寫后,內(nèi)容將得到接受。在大多數(shù)情況下,人是看不到驗(yàn)證碼的,內(nèi)容將直接作為非垃圾信息的正常信息(ham)而被接受。ham是好的內(nèi)容,而垃圾信息是不好的內(nèi)容。 

◆只有機(jī)器學(xué)習(xí)算法不是百分之百確信的情況下,才會(huì)顯示驗(yàn)證碼;所以通常來說,不會(huì)給人帶來不便。 

儀表板

Mollom為每個(gè)帳戶包含了相當(dāng)簡(jiǎn)潔的儀表板,可以顯示你有多少非垃圾信息的正常信息已被接受,有多少垃圾信息已被拒絕。你在圖表中看到的垃圾信息數(shù)量之多確實(shí)很令人沮喪。 

操作過程

◆安裝。對(duì)于Drupal來說,安裝很容易??梢园阉?dāng)作其他任何模塊那樣來安裝。先在Mollom網(wǎng)站上設(shè)一個(gè)帳戶。獲得一對(duì)安全密鑰,把這些密鑰配置到該模塊中,然后選擇你想用Mollum來保護(hù)系統(tǒng)中的哪些部分。就是這樣。

◆日常操作。我定期檢查,看看垃圾信息有沒有進(jìn)入。無法做到百分之百有把握,一些垃圾信息還是會(huì)進(jìn)入,但數(shù)量很少。要是垃圾信息的確進(jìn)入,就要有辦法告訴Mollom:這個(gè)帖子其實(shí)是垃圾信息;應(yīng)予以刪除。這是你無論如何要做的工作,但這個(gè)過程其實(shí)在幫助訓(xùn)練Mollom的機(jī)器學(xué)習(xí)算法,明白什么是垃圾信息。 

◆允許匿名用戶交互。借助良好的垃圾信息檢查工具,就有可能做到人們?cè)诰W(wǎng)站上,能夠以匿名方式進(jìn)行交互,使用某幾類網(wǎng)站的許多人其實(shí)很喜歡這樣。一旦你需要注冊(cè),用戶的參與熱情就會(huì)大大減低,注冊(cè)無論如何也阻止不了垃圾信息發(fā)送者。

不是一切看上去都很美

處理誤報(bào)是Mollom最大的弱項(xiàng)。檢測(cè)垃圾信息是一項(xiàng)高難度的平衡藝術(shù),需要在拒絕非垃圾信息的正常信息與接受垃圾信息之間掌握好度。Mollom的機(jī)器學(xué)習(xí)算法效果似乎相當(dāng)好,但存在一個(gè)問題,那就是有時(shí)好的帖子被拒絕:你提交的內(nèi)容觸發(fā)了垃圾信息過濾器,不會(huì)被接受。目前沒有什么好的辦法。分明是好好的評(píng)論,卻被誤作垃圾信息而被拒絕,沒有比這更讓人惱火的了。用戶只好嘗試幾次避開這個(gè)問題,但結(jié)果只好放棄、敗興而歸。

問題是,沒有辦法解決這個(gè)問題。為了保護(hù)機(jī)器學(xué)習(xí)算法以防被人操縱,Mollom不允許你提供一段示例性的應(yīng)該被接受、卻誤被拒絕的內(nèi)容,不過他們正致力于在將來增添這項(xiàng)功能。

這是個(gè)艱難的決定。一旦網(wǎng)站遭到了嚴(yán)重攻擊,靜態(tài)驗(yàn)證碼系統(tǒng)根本不管用;靜態(tài)驗(yàn)證碼系統(tǒng)是指只要求用戶通過一次測(cè)試即可提交內(nèi)容的系統(tǒng)。用戶注冊(cè)不管用??紤]到一個(gè)網(wǎng)站每天可能會(huì)有成千上萬條電子信息,審查每個(gè)帖子會(huì)面臨非常重的負(fù)擔(dān),對(duì)于“業(yè)余愛好”網(wǎng)站來說尤為如此。而垃圾信息會(huì)完全要了網(wǎng)站的命,所以要在有可能激怒一些用戶與由于網(wǎng)站被垃圾信息擠爆,到頭來沒有一個(gè)用戶之間掌握好度。

經(jīng)營模式

◆讓Mollom成為不二選擇的秘訣就是它免費(fèi)試用。只有一旦你的網(wǎng)站每天接受的非垃圾信息的正常信息開始超過100條,才需要付費(fèi)。對(duì)于小型網(wǎng)站來說,這種可能根本不會(huì)出現(xiàn)。 

◆一旦你需要付費(fèi),可以選擇Mollom Plus(每天1歐元)和Mollom Premium(每個(gè)網(wǎng)站每年3600歐元)這兩個(gè)價(jià)位,價(jià)位似乎很合理。 

◆免費(fèi)網(wǎng)站并不像你想象的那樣很耗費(fèi)資源,其實(shí)它們提供了有助于訓(xùn)練算法的關(guān)鍵數(shù)據(jù)。所有使用Mollom的網(wǎng)站不斷地將數(shù)據(jù)反饋給后端的分類器。使用Mollom的人越多,通過從用戶處得到的所有反饋訓(xùn)練算法的效果就越好。要是沒有免費(fèi)網(wǎng)站,Mollom的準(zhǔn)確性不會(huì)像現(xiàn)在這么高。

架構(gòu)

◆Mollom非常注重技術(shù)設(shè)計(jì)。Mollom過去很重視在代碼和服務(wù)器資源使用方面盡可能高效。 

◆實(shí)際上,每臺(tái)服務(wù)器都能處理所有請(qǐng)求,但它們都有完整的故障切換機(jī)制。工作負(fù)載在多臺(tái)機(jī)器之間分配。如果一臺(tái)機(jī)器出了故障,那么工作負(fù)載會(huì)轉(zhuǎn)移到另一臺(tái)機(jī)器上。 

◆Mollom過去有三臺(tái)服務(wù)器,但由于大大提升了性能,所以可以將第三臺(tái)服務(wù)器用作登臺(tái)服務(wù)器(staging server)。 

◆每臺(tái)服務(wù)器每秒能夠處理整整100個(gè)連接,每個(gè)連接執(zhí)行整個(gè)流程:全文本分析、計(jì)算作者的信譽(yù)以及提供驗(yàn)證碼。

◆真正為低延遲進(jìn)行了優(yōu)化。由于垃圾信息檢測(cè)是內(nèi)容提交到網(wǎng)站的整個(gè)過程的一部分,要是檢測(cè)所花時(shí)間很長,用戶會(huì)覺得很煩人。

◆Mollom經(jīng)歷了幾個(gè)發(fā)展階段: 

1、最初,只有兩個(gè)人的小團(tuán)隊(duì)業(yè)余時(shí)間開發(fā)算法、分類器以及Mollom要解決的真正的商業(yè)問題。為了擴(kuò)建后端系統(tǒng)上的基礎(chǔ)架構(gòu),他們實(shí)施了自己開發(fā)的線程池、連接池和資源管理機(jī)制。他們發(fā)現(xiàn),用于支持這一切、確??梢詳U(kuò)展的時(shí)間太多了。隨后他們改用Glassfish這種Java應(yīng)用服務(wù)器,那樣他們基本上不用太擔(dān)心內(nèi)存管理、REST處理、XML解析和數(shù)據(jù)庫連接池。 

2、過去的主要問題是磁盤帶寬。Mollom需要跟蹤互聯(lián)網(wǎng)上所有IP地址和所有URL的信譽(yù),所以這是一個(gè)隨機(jī)訪問頻繁的龐大數(shù)據(jù)存儲(chǔ)區(qū)。 

3、在早期日子,Mollom使用廉價(jià)的虛擬機(jī),一切都放在無法進(jìn)行擴(kuò)展的MySQL中。 

4、隨后,Mollom又改用固態(tài)磁盤,把一切存儲(chǔ)在文件中。固態(tài)磁盤解決了寫入問題,但存在這些問題: 

◆價(jià)格很昂貴。 

◆對(duì)于所安裝的文件系統(tǒng)的類型非常敏感。 

◆寫入速度快,但是對(duì)數(shù)據(jù)進(jìn)行迭代處理(經(jīng)常需要這么做),以便清理數(shù)據(jù),或者通過成千上萬個(gè)小對(duì)象來訓(xùn)練新的分類器,這個(gè)過程的速度還是相當(dāng)慢。 

5、隨后,Mollom由固態(tài)磁盤改用Cassandra。 

◆Cassandra現(xiàn)用作寫入密集型工作負(fù)載的數(shù)據(jù)庫,并用作一個(gè)緩存層:

◆運(yùn)行在RAID 10磁盤配置上(經(jīng)條帶化和鏡像處理),非常適合于密集的讀/寫操作。 

◆Cassandra針對(duì)寫操作進(jìn)行了優(yōu)化,Mollom面臨的寫操作比讀操作多得多。 

◆被設(shè)計(jì)成可以在數(shù)據(jù)中心里面分布,也可以跨數(shù)據(jù)中心分布。 

◆一個(gè)缺點(diǎn)是沒有標(biāo)準(zhǔn)的NoSQL接口,因而很難編寫應(yīng)用程序。 

◆Cassandra的行緩存(row caching)讓Mollom不必往系統(tǒng)中添加另一個(gè)緩存層,這消除了好多的應(yīng)用程序代碼。

◆Cassandra擁有老化功能:經(jīng)過一段時(shí)間后,會(huì)自動(dòng)刪除數(shù)據(jù)。歐洲訂有嚴(yán)格的隱私法,要求某些數(shù)據(jù)在一段時(shí)間后必須予以清除。這項(xiàng)功能因而大受歡迎。這是一項(xiàng)成本極其高昂的操作;Cassandra可以處理這項(xiàng)工作,消除了好多的應(yīng)用程序代碼。

◆博客評(píng)論在整個(gè)系統(tǒng)中的路徑如下: 

◆請(qǐng)求可能來自任何客戶端??蛻舳丝绶?wù)器對(duì)請(qǐng)求進(jìn)行負(fù)載均衡處理。這部分稍后解釋。典型的客戶端是Drupal系統(tǒng)。請(qǐng)求可能是XML-RPC請(qǐng)求或REST請(qǐng)求。

◆請(qǐng)求由GlassFish應(yīng)用服務(wù)器來處理,遵循典型的應(yīng)用服務(wù)器工作流程:請(qǐng)求由服務(wù)器小程序來處理,并委托給會(huì)話組件(session bean)。

◆付費(fèi)客戶優(yōu)先得到服務(wù),免費(fèi)客戶遇到的延遲可能比較長。 

◆請(qǐng)求經(jīng)過解析和分析;后面詳細(xì)介紹這一點(diǎn)。垃圾信息分?jǐn)?shù)確定后,返回給用戶。所以,Mollom有不同的功能部分:垃圾信息檢查和驗(yàn)證碼處理。驗(yàn)證碼包括:生成、提供和處理響應(yīng)。不同的會(huì)話組件負(fù)責(zé)Mollom功能的不同部分。

◆分類器完全在內(nèi)存中。一小塊內(nèi)容被拆開來,分成了成千上萬個(gè)可識(shí)別垃圾信息的小標(biāo)記(token)。這些分類器在內(nèi)存中大約有幾百萬個(gè)標(biāo)記。分類器需要高速運(yùn)行,所以它們必須在內(nèi)存中。 

◆Cassandra里面保存的是信譽(yù)分?jǐn)?shù)、頻率、URL和IP地址。Cassandra新的行緩存功能現(xiàn)在充當(dāng)其緩存層。以前Mollom實(shí)施了內(nèi)部緩存,但現(xiàn)在內(nèi)存緩存被拿掉了。 

◆兩個(gè)數(shù)據(jù)中心中的兩臺(tái)機(jī)器都運(yùn)行Cassandra和Glassfish應(yīng)用服務(wù)器。Cassandra在數(shù)據(jù)中心之間不斷數(shù)據(jù)。 

◆內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)并不直接復(fù)制。它們寫入到Cassandra,再由Cassandra來復(fù)制。另一端的緩存有超時(shí)機(jī)制,所以它會(huì)訪問Cassandra,獲取新的數(shù)據(jù)。內(nèi)容最終是一致的。有一小段時(shí)間會(huì)出現(xiàn)不一致,但是在這么短的時(shí)間里,數(shù)據(jù)模型并未受到負(fù)面影響。

◆視具體情況來管理一致性。對(duì)于信譽(yù)和IP地址來說,最終一致性很好。包括驗(yàn)證碼會(huì)話的會(huì)話數(shù)據(jù)嚴(yán)格做到完全一致,那樣機(jī)器進(jìn)行故障切換時(shí),數(shù)據(jù)會(huì)正確遷移過去。

◆客戶端負(fù)載均衡 

◆Mollom使用的客戶端負(fù)載均衡基于延遲等標(biāo)準(zhǔn)來分配負(fù)載。作為一家新興公司,Mollom沒有錢來買大型負(fù)載均衡工具。他們還有一個(gè)目標(biāo):能夠在多個(gè)數(shù)據(jù)中心之間進(jìn)行全局負(fù)載均衡,這就需要安裝一套昂貴又復(fù)雜的系統(tǒng)。

◆客戶列表通過API來進(jìn)行管理。每個(gè)客戶都有一份服務(wù)器列表,列出了可以使用的服務(wù)器。 

◆每個(gè)客戶可以使用不同的服務(wù)器。為付費(fèi)客戶提供了位置更近的服務(wù)器,以縮短延遲。 

◆當(dāng)一臺(tái)服務(wù)器發(fā)生故障時(shí),客戶會(huì)嘗試連接列表中的下一臺(tái)服務(wù)器。 

◆客戶端負(fù)載均衡有助于從舊系統(tǒng)遷移到基于Glassfish的新系統(tǒng)。新用戶獲得了遷移后的機(jī)器的地址,老用戶仍在舊機(jī)器上工作,只要更新服務(wù)器列表,就可以有條不紊地遷移過去。這就允許進(jìn)行測(cè)試,那樣用戶就可以測(cè)試功能,然后測(cè)試擴(kuò)展性和性能。他們觀察響應(yīng)時(shí)間、連接隊(duì)列中有多少個(gè)連接,以及連接在隊(duì)列中停留多長時(shí)間。他們可以測(cè)試:如果增加線程池中的線程、改變JDBC連接的數(shù)量以及其他配置,會(huì)出現(xiàn)什么樣的情況。一旦每個(gè)人都遷移完畢,舊服務(wù)器就被關(guān)閉。遷移過程中遇到的停機(jī)時(shí)間極短,這對(duì)于高可用性的系統(tǒng)來說很關(guān)鍵。系統(tǒng)停運(yùn)期間,垃圾信息還是在進(jìn)來。 

◆客戶端方法的一個(gè)缺點(diǎn)是,要是第三方客戶軟件編得很差,就會(huì)有問題。比如說,客戶獲得服務(wù)器列表后,可能以相反的順序?qū)α斜磉M(jìn)行迭代處理,這其實(shí)是不對(duì)的。現(xiàn)在Mollom與客戶的開發(fā)人員緊密合作,提供優(yōu)質(zhì)的參考代碼示例,那樣開發(fā)人員可以學(xué)習(xí)最佳實(shí)踐。 

機(jī)器學(xué)習(xí) 

◆Mollom是一套學(xué)習(xí)系統(tǒng)。一個(gè)獨(dú)立的驗(yàn)證碼解決方案既不考慮用戶的行為,也不考慮信息源自何處,是根本無法獲得這種保護(hù)級(jí)別的,通常需要用戶解答每個(gè)帖子的驗(yàn)證碼。而使用Mollom的文本分析功能,用戶只要在Mollom對(duì)帖子不確信時(shí)解答驗(yàn)證碼就行。 

◆信息的平均長度是大約500個(gè)字符,每一條信息被分解成了3000個(gè)特征。信息是不是垃圾信息,只要看看IP地址或Open ID的信譽(yù)就能確定。Mollom會(huì)查看用戶ID、情感、語言、褻瀆語言、特定的詞語和詞語組合,還會(huì)查看文本寫得多合乎文法,等等。這一切都基于分類器。一些分類器本身就具有統(tǒng)計(jì)功能,所以能夠自動(dòng)學(xué)習(xí)。一些分類器基于規(guī)則,可確保根本不會(huì)出錯(cuò)。到頭來,確定垃圾信息分?jǐn)?shù)的是所有這些測(cè)試的組合。

◆Mollom從這個(gè)過程中不斷學(xué)習(xí),分類器和內(nèi)部度量標(biāo)準(zhǔn)實(shí)時(shí)更新。

◆Glassfish負(fù)責(zé)工作調(diào)度,旨在可以處理多核工作負(fù)載。 

◆關(guān)鍵是設(shè)計(jì)出一種框架,以便并行處理盡可能多的工作,確保鎖定窗口盡可能小。

◆并發(fā)HTTP連接的數(shù)量經(jīng)過了調(diào)整,以便擁有大小合適的可用連接池。 

◆每臺(tái)服務(wù)器使用16個(gè)線程。 

◆大多數(shù)調(diào)用由無狀態(tài)會(huì)話組件來處理,無狀態(tài)會(huì)話組件很適合并發(fā)管理。 

◆Mollom把許多會(huì)話組件保留在池中,但是讓Glassfish來決定池中應(yīng)該有多少會(huì)話組件。在峰值負(fù)載下,池中會(huì)有更多的會(huì)話組件,以便高效地處理請(qǐng)求。在任何一個(gè)既定的時(shí)間,32個(gè)會(huì)話組件可以并行運(yùn)行。

◆所有分類器實(shí)際上是不同線程重復(fù)使用的會(huì)話組件。

◆每個(gè)會(huì)話組件都有自己的客戶端連接至Cassandra,所以它們不會(huì)彼此阻塞。 

◆當(dāng)用戶沒有響應(yīng)驗(yàn)證碼時(shí),該會(huì)話被清理,Mollom就明白這可能是垃圾信息。

◆存在每臺(tái)服務(wù)器一個(gè)分類器的情況。

◆會(huì)話清理方面存在一個(gè)很短的鎖定爭(zhēng)用期間,此時(shí)分類器被更新。

◆更新后的分類器每半小時(shí)被寫回到Cassandra。 

應(yīng)用程序集成 

◆Mollom使用開放的API,可以集成到任何系統(tǒng)中。 

◆庫:Java、PHP、Ruby及更多庫。 

◆集成的解決方案:Drupal、Joomla、WordPress及其他內(nèi)容管理系統(tǒng)。 

◆第三方基于Mollom創(chuàng)建的示例代碼,生成新的綁定。 

◆要監(jiān)測(cè)服務(wù)器的運(yùn)行狀況,Mollom使用Munin來不斷監(jiān)測(cè): 

◆廢料收集后堆的大小有多大? 

◆可用連接的數(shù)量有多少? 

◆線程池中可用線程的數(shù)量有多少?確保沒有一個(gè)線程在等待很長的時(shí)間以至于造成鎖定。

◆如果你看一下Mollom的架構(gòu),就會(huì)發(fā)現(xiàn)Mollom在努力建立一種可以跨多個(gè)數(shù)據(jù)中心透明地運(yùn)行的架構(gòu),以便在單一服務(wù)器系統(tǒng)無法滿足發(fā)展需要時(shí),能夠向外擴(kuò)展: 

◆客戶端負(fù)載均衡用于選擇和故障切換服務(wù)器。 

◆Glassfish集群將用于應(yīng)用層的故障切換,并且便于添加和移除機(jī)器。 

◆Cassandra將用于跨數(shù)據(jù)中心來管理數(shù)據(jù)層。 

◆Netlog安裝的Mollom具有值得關(guān)注的一些特點(diǎn)。它處理的不僅僅是Mollom.com主服務(wù)器,但垃圾信息的分布是完全不同的,因?yàn)槿伺c人的溝通是社交網(wǎng)絡(luò)的一部分。在Netlog上垃圾信息的分布如下:90%是非垃圾信息的正常信息,10%是垃圾信息,而博客界的實(shí)際情況恰好與之相反。值得關(guān)注的是,處理非垃圾信息的正常信息所用的資源比較少,所以實(shí)際上可以在同樣的服務(wù)器上處理更多的工作。

◆Netlog最初試過虛擬服務(wù)器,還想到了利用亞馬遜的服務(wù),但后來發(fā)現(xiàn),輸入/輸出是使用共享式的虛擬服務(wù)器存在的主要瓶頸。輸入/輸出延遲和帶寬是重大問題,于是Netlog決定向上擴(kuò)展,使用更大型的機(jī)器和更大容量的硬盤。

◆令人驚訝的是,它們不受處理器的約束。8個(gè)處理器核心中只有兩個(gè)負(fù)責(zé)計(jì)算;其余幾個(gè)核心完全負(fù)責(zé)輸入/輸出。 

◆Mollom的流量相當(dāng)穩(wěn)定,所以使用專用服務(wù)器更具成本效益。亞馬遜服務(wù)主要是用來處理峰值負(fù)載。 

發(fā)展過程

◆Mollom是分布式團(tuán)隊(duì)。三個(gè)人在比利時(shí),另幾個(gè)人在得克薩斯州、波士頓和德國。 

◆Scrum用作開發(fā)方法,Mollom的人員對(duì)它覺得非常滿意。下午兩點(diǎn)通過Skype召開Scrum會(huì)議。他們發(fā)現(xiàn),隨著自身規(guī)模不斷變大,需要更多的開發(fā)方法。

◆開發(fā)人員在本地開發(fā),然后將代碼提交到Unfuddle。 

◆Hudson用作Mollom的持續(xù)集成環(huán)境。Hudson讓Mollom更容易從舊的Glassfish系統(tǒng)遷移到新的Glassfish系統(tǒng),因?yàn)橹挥邢韧ㄟ^測(cè)試,才可以部署。Mollom沒有損失太多的時(shí)間,因?yàn)樵诓渴鸬缴a(chǎn)環(huán)境之前就可以發(fā)現(xiàn)問題。

◆Mollom有很多測(cè)試:?jiǎn)卧獪y(cè)試、系統(tǒng)測(cè)試和Drupal測(cè)試。只有Hudson通過這些測(cè)試,才可以部署系統(tǒng)。

◆部署仍是手動(dòng)進(jìn)行,以縮短潛在的停機(jī)時(shí)間。 

◆每當(dāng)Mollom發(fā)現(xiàn)廢料收集時(shí)間存在問題,總是歸因于應(yīng)用程序存在內(nèi)存泄漏。若出現(xiàn)內(nèi)存泄漏的情況,Mollom就會(huì)分析核心轉(zhuǎn)儲(chǔ)(core dump)文件。要分析來自16GB機(jī)器的核心轉(zhuǎn)儲(chǔ)文件并不那么容易,你可能無法在本地機(jī)器上分析它,所以Mollom采取的做法是,在亞馬遜上租用一個(gè)龐大的內(nèi)存實(shí)例來分析轉(zhuǎn)儲(chǔ)文件。處理堆轉(zhuǎn)儲(chǔ)文件大約需要2個(gè)小時(shí)。Mollom比較兩個(gè)轉(zhuǎn)儲(chǔ)文件,一個(gè)是執(zhí)行10小時(shí)后的,另一個(gè)是執(zhí)行20個(gè)小時(shí)后的。要是兩者存在重大區(qū)別,那么很可能是由于內(nèi)存泄漏。

未來方向

◆Mollom API使用XML-RPC,Mollom現(xiàn)正在測(cè)試REST實(shí)施方法,以便服務(wù)更容易與Mollom進(jìn)行混搭。 

◆由于Mollom現(xiàn)已改用Cassandra,那樣發(fā)展形勢(shì)需要時(shí),更容易向外擴(kuò)展。

◆即將發(fā)布企業(yè)級(jí)功能,那樣有可能把幾百個(gè)網(wǎng)站作為一個(gè)整體來管理。這將很容易根據(jù)情感、垃圾信息分?jǐn)?shù)來審查一批網(wǎng)站,或者刪除來自某些IP地址的所有評(píng)論。 

◆Mollom已經(jīng)談?wù)摿巳绾芜M(jìn)入到流數(shù)據(jù)領(lǐng)域,比如Twitter,但受到了歐洲比較嚴(yán)格的隱私政策的限制。 

◆Mollom將嘗試使用Glassfish用于每個(gè)數(shù)據(jù)中心的負(fù)載均衡。 

◆如果負(fù)載加大10倍,Mollom將不得不添加更多的Cassandra節(jié)點(diǎn)。磁盤輸入/輸出是瓶頸。只有當(dāng)發(fā)展需求增加10倍以上,才需要添加更多的應(yīng)用服務(wù)器。 

經(jīng)驗(yàn)教訓(xùn)

◆高效率才會(huì)帶來滿意的結(jié)果。Mollom非常重視高性能的技術(shù)。讓Mollom人員引以為豪的是,Mollom極具成本效益。它可以在一臺(tái)服務(wù)器上處理好多請(qǐng)求,延遲低,因而讓客戶滿意、高興,因?yàn)樗麄儧]必要維護(hù)眾多的機(jī)器,成本又低。Mollom一開始就把這當(dāng)作頭等大事,選擇了合適的技術(shù)來實(shí)現(xiàn)其目標(biāo)。這讓Mollom能夠?qū)?chuàng)造的利潤用于投入到市場(chǎng)營銷、建立用戶群以及開發(fā)基于Mollom的新產(chǎn)品。

◆廣泛數(shù)據(jù)免費(fèi),深入數(shù)據(jù)收費(fèi)。機(jī)器學(xué)習(xí)需要大量的示例數(shù)據(jù),那樣才能成功地檢測(cè)出垃圾信息。為了獲得這些數(shù)據(jù),Mollom為客戶提供了一項(xiàng)免費(fèi)服務(wù),因?yàn)榭蛻籼峁┝烁玫赜?xùn)練學(xué)習(xí)算法所需的廣泛數(shù)據(jù);客戶在源源不斷地提供寶貴信息和反饋意見。大客戶貢獻(xiàn)了收入,同時(shí)得益于從免費(fèi)客戶處獲得的數(shù)據(jù)。這種模式似乎特別適合龐大數(shù)據(jù)和機(jī)器學(xué)習(xí);正如我們所知,數(shù)據(jù)和機(jī)器學(xué)習(xí)是一切的未來。

◆消除非特定領(lǐng)域的障礙。龐大系統(tǒng)需要處理基礎(chǔ)架構(gòu)方面的許多工作?;A(chǔ)架構(gòu)工具常常讓人們沒空處理產(chǎn)品中真正創(chuàng)造價(jià)值的與特定領(lǐng)域相關(guān)的部分(分類器、信譽(yù)系統(tǒng)和客戶庫)。Mollom選擇了Cassandra和Glassfish,就是為了盡量減少基礎(chǔ)架構(gòu)方面的工作。

◆對(duì)于客戶端代碼要小心??蛻舳舜a很吸引人,因?yàn)樗梢允褂脛e人的資源,而不是你自己的資源。問題是,代碼可能寫得不好,結(jié)果讓你的系統(tǒng)看起來很糟糕。與客戶的開發(fā)人員緊密合作,提供優(yōu)質(zhì)的參考代碼示例,那樣開發(fā)人員就能學(xué)習(xí)最佳實(shí)踐。 

◆優(yōu)先對(duì)待付費(fèi)客戶。付費(fèi)客戶得到更好的服務(wù)質(zhì)量。他們?cè)陉?duì)列中優(yōu)先得到處理,整個(gè)系統(tǒng)中遇到的延遲比較短。付費(fèi)客戶可以訪問故障切換服務(wù)器,而免費(fèi)客戶只能訪問一臺(tái)服務(wù)器。 

◆讓堆棧來處理繁重任務(wù),以減少代碼。在早期,Mollom代碼庫要比現(xiàn)在大得多。Cassandra可以處理復(fù)制和行緩存,因而清除了好多復(fù)雜代碼;Glassfish可以處理集群,也因而清除了好多應(yīng)用程序代碼。代碼庫慢慢簡(jiǎn)化下來。

◆盡量減少有鎖爭(zhēng)用。Mollom花了很多時(shí)間來盡量減少GlassFish服務(wù)器中的有鎖爭(zhēng)用,因?yàn)檫@成了主要瓶頸。盡量減少有鎖爭(zhēng)用,才有可能保持真正的并行處理。

原文:Mollom Architecture - Killing Over 373 Million Spams At 100 Requests Per Second

【編輯推薦】

  1. 八個(gè)建議 幫你選購反垃圾郵件產(chǎn)品
  2. 淺談企業(yè)反垃圾郵件策略
  3. 電信行業(yè)反垃圾郵件應(yīng)用需求分析及實(shí)踐案例
責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2011-02-14 13:05:17

PythonWeb

2020-04-09 08:47:38

Java對(duì)象線程

2018-10-25 11:05:17

AI醫(yī)療垃圾桶

2009-12-10 18:24:17

2009-12-02 09:21:04

PHP數(shù)據(jù)過濾

2013-12-19 09:46:04

垃圾收集器

2023-05-26 14:02:29

AI智能

2021-01-12 11:44:48

java垃圾回收

2025-01-08 08:00:00

2011-08-26 13:13:27

垃圾郵件過濾反垃圾郵件

2015-12-10 11:11:06

2011-11-04 15:58:52

手機(jī)操作系統(tǒng)進(jìn)化史

2021-10-20 05:58:50

美國FCC網(wǎng)絡(luò)安全

2016-09-21 12:54:10

CAAS系統(tǒng)鏡像

2010-05-11 14:30:01

2020-03-16 09:31:10

Linux系統(tǒng)CentOS

2024-04-24 10:38:22

2024-11-20 13:18:21

2025-01-09 06:00:00

Checkmate監(jiān)控系統(tǒng)開源

2021-10-20 07:48:17

DatalistCSS技巧
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)