Facebook使用Haskell與爬蟲戰鬥
Facebook打擊垃圾郵件,惡意軟體,和其他爬蟲攻擊行為的系統稱為Sigma。它的工作是主動識別Facebook上的惡意行為,如垃圾郵件,網路釣魚攻擊,惡意軟體的連結和不良內容,這些被Sigma檢測以後會自動刪除。
原先使用FXL語言編寫Sigma,但是隨著規模發展越來越不適應,他們選擇替代語言的要求是:
1. 純函式和強型別. 這能確保反爬蟲策略規則不會彼此影響,也不會將Sigma搞崩潰,易於隔離測試;強型別在進入生產之前能夠幫助消滅許多bugs.
2. 自動批處理和重疊的資料獲取。Facebook的反爬蟲策略通常從其他系統獲取資料,所以要儘可能採用併發提高效率。我們希望併發是隱式的,所以工程師編寫反爬蟲策略時,可以集中精力在業務上,如何打擊垃圾爬蟲,而同時不用擔心併發性。隱式併發也可以防止程式碼功能不會因追求效率效能而變得凌亂模糊,從而使得程式碼難以理解和修改。
3. 分分鐘將程式碼變動推送到生產現場,這會啟用我們快速部署修改後的反爬蟲策略。
4. 效能. FXL的效能很慢,意味著我們需要編寫對效能要求高的功能時,需要採取C++,這有很多問題。
5. 支援互動式開發,基於爬蟲策略工作的開發者要能夠互動體驗和測試它們的程式碼,能夠立即看見結果。
Haskell是一個純粹的函式式和強型別的語言,它有一個成熟的最佳化編譯器和互動式環境(GHCi)。它還有我們所有需要的抽象設施,它提供一組豐富的庫,它是由一個活躍的開發者社群的支援。
需要解決的就剩下兩個問題:(1) 自動批處理和併發 (2) 編譯程式碼的熱交換hot-swapping 。
在Haskell中所有現有的併發都是顯式的,意味著使用者需要明確指定使用併發獲取什麼東西。比如資料獲取,可以視為一個純粹的函式操作,我們Facebook想要一個程式設計模型是,程式設計師不必使用顯式並行併發語句,這種系統就能利用任何可用併發實現(隱式併發)。因此,Facebook開發了Haxl框架來解決這個問題:Haxl可使多個資料的提取操作自動化批處理和併發地執行。
原先使用FXL語言編寫Sigma,但是隨著規模發展越來越不適應,他們選擇替代語言的要求是:
1. 純函式和強型別. 這能確保反爬蟲策略規則不會彼此影響,也不會將Sigma搞崩潰,易於隔離測試;強型別在進入生產之前能夠幫助消滅許多bugs.
2. 自動批處理和重疊的資料獲取。Facebook的反爬蟲策略通常從其他系統獲取資料,所以要儘可能採用併發提高效率。我們希望併發是隱式的,所以工程師編寫反爬蟲策略時,可以集中精力在業務上,如何打擊垃圾爬蟲,而同時不用擔心併發性。隱式併發也可以防止程式碼功能不會因追求效率效能而變得凌亂模糊,從而使得程式碼難以理解和修改。
3. 分分鐘將程式碼變動推送到生產現場,這會啟用我們快速部署修改後的反爬蟲策略。
4. 效能. FXL的效能很慢,意味著我們需要編寫對效能要求高的功能時,需要採取C++,這有很多問題。
5. 支援互動式開發,基於爬蟲策略工作的開發者要能夠互動體驗和測試它們的程式碼,能夠立即看見結果。
Haskell是一個純粹的函式式和強型別的語言,它有一個成熟的最佳化編譯器和互動式環境(GHCi)。它還有我們所有需要的抽象設施,它提供一組豐富的庫,它是由一個活躍的開發者社群的支援。
需要解決的就剩下兩個問題:(1) 自動批處理和併發 (2) 編譯程式碼的熱交換hot-swapping 。
在Haskell中所有現有的併發都是顯式的,意味著使用者需要明確指定使用併發獲取什麼東西。比如資料獲取,可以視為一個純粹的函式操作,我們Facebook想要一個程式設計模型是,程式設計師不必使用顯式並行併發語句,這種系統就能利用任何可用併發實現(隱式併發)。因此,Facebook開發了Haxl框架來解決這個問題:Haxl可使多個資料的提取操作自動化批處理和併發地執行。
Haxl Github
使用Haskell以後,Sigma能夠每秒處理一百萬個請求。
關於編譯程式碼的熱交換和其他內容可見原文:
相關文章
- 爬蟲與反爬:一場無休止之戰爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- 通用爬蟲與聚焦爬蟲爬蟲
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- python爬蟲實戰,爬蟲之路,永無止境Python爬蟲
- Python 爬蟲實戰Python爬蟲
- 爬蟲實戰scrapy爬蟲
- Python 爬蟲實戰(二):使用 requests-htmlPython爬蟲HTML
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- websocket與爬蟲Web爬蟲
- 爬蟲實戰(一):爬取微博使用者資訊爬蟲
- Java爬蟲與Python爬蟲的區別?Java爬蟲Python
- 爬蟲與反爬蟲技術簡介爬蟲
- Python爬蟲開發與專案實戰pdfPython爬蟲
- Python爬蟲開發與專案實戰(2)Python爬蟲
- Python爬蟲開發與專案實戰(1)Python爬蟲
- 爬蟲技術實戰爬蟲
- Puppeteer爬蟲實戰(三)爬蟲
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- 使用java 爬蟲Java爬蟲
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- python爬蟲實戰教程-Python爬蟲開發實戰教程(微課版)Python爬蟲
- Python爬蟲與Java爬蟲有何區別?Python爬蟲Java
- C#爬蟲與反爬蟲--字型加密篇C#爬蟲加密
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- Python爬蟲之路-chrome在爬蟲中的使用Python爬蟲Chrome
- Python爬蟲之路-selenium在爬蟲中的使用Python爬蟲
- 爬蟲實戰:探索XPath爬蟲技巧之熱榜新聞爬蟲
- python3 爬蟲實戰:為爬蟲新增 GUI 影象介面Python爬蟲GUI
- python爬蟲-33個Python爬蟲專案實戰(推薦)Python爬蟲
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- 基礎爬蟲案例實戰爬蟲
- 爬蟲實戰專案合集爬蟲
- python 爬蟲實戰的原理Python爬蟲
- 爬蟲專案實戰(一)爬蟲
- Python網路爬蟲實戰Python爬蟲
- Python爬蟲實戰之bilibiliPython爬蟲
- 爬蟲實戰專案集合爬蟲
- 爬蟲——三個小實戰爬蟲