說明:本文是學習過程中的知識整理,並沒有個人實際使用的經驗。如果有進一步學習的需要,可檢視參考連結。
在後端開發過程中,我們會遇到一種情況:使用者請求涉及到比較耗時的計算,比如:
- 連線郵件伺服器,傳送一封比較複雜的 HTML 郵件
- 收到請求後開始一個爬蟲任務
遇到類似問題,我們不會在使用者請求的處理過程中完成計算,讓使用者經歷漫長地等待,而是通過非同步計算、分散式計算等方式來處理任務。將任務轉移到後臺非同步進行,或者將一個耗時的計算拆分到多個伺服器上同時進行。
執行緒池非同步執行
執行緒非同步指的是一個呼叫請求傳送給被呼叫者,而呼叫者不用等待其結果的返回,一般非同步執行的任務都需要比較長的時間
分散式訊息佇列
訊息佇列最經典的用法就是消費者和生成者之間通過訊息管道來傳遞訊息,消費者和生成者是不同的程式。生產者往管道中寫訊息,消費者從管道中讀訊息。
主要特點是非同步處理,主要目的是減少請求響應時間和解耦。所以主要的使用場景就是將比較耗時而且不需要即時(同步)返回結果的操作作為訊息放入訊息佇列。同時由於使用了訊息佇列,只要保證訊息格式不變,訊息的傳送方和接收方並不需要彼此聯絡,也不需要受對方的影響,即解耦和。
好處:
- 解耦
- 提速
- 廣播
- 消峰
使用訊息佇列需要滿足的條件:
- 生產者不需要從消費者處獲得反饋
- 容許短暫的不一致性
Gearman
分散式的程式呼叫框架,可完成跨語言的相互呼叫,適合在後臺執行工作任務。
MemcacheQ
一個國內開發的基於memcache協議、BDB持久資料儲存、高效能輕量級分散式訊息佇列服務。
特點:
- 簡單高效,基於memcache協議,這意味著只要客戶端支援memcache協議即可使用。
- 佇列資料儲存於BDB,持久儲存。
- 併發效能好。
- 支援多條佇列
Kafka
一個分散式流媒體平臺,它主要有3種功能:
- 釋出和訂閱訊息流,這個功能類似於訊息佇列,這也是kafka歸類為訊息佇列框架的原因
- 以容錯的方式記錄訊息流,kafka以檔案的方式來儲存訊息流
- 可以在訊息釋出的時候進行處理
Map/Reduce
MapReduce是一種程式設計模型,是一種程式設計方法,是抽象的理論,採用了分而治之的思想。MapReduce框架的核心步驟主要分兩部分,分別是Map和Reduce。每個檔案分片由單獨的機器去處理,這就是Map的方法,將各個機器計算的結果彙總並得到最終的結果,這就是Reduce的方法。
Hadoop
Hadoop是由java語言編寫的,在分散式伺服器叢集上儲存海量資料並執行分散式分析應用的開源框架,其核心部件是HDFS與MapReduce(資料儲存和分散式計算)。
HDFS是一個分散式檔案系統:引入存放檔案後設資料資訊的伺服器Namenode和實際存放資料的伺服器Datanode,對資料進行分散式儲存和讀取。
Hadoop 能幹什麼:
- 大資料儲存:分散式儲存
- 日誌處理:擅長日誌分析
- ETL:資料抽取到oracle、mysql、DB2、mongdb及主流資料庫
- 機器學習: 比如Apache Mahout專案
- 搜尋引擎:Hadoop + lucene實現
- 資料探勘:目前比較流行的廣告推薦,個性化廣告推薦
本作品採用《CC 協議》,轉載必須註明作者和本文連結