大數據(kafka-及消息隊列的應用場景)

進程間通訊

進程通訊的目的前端

數據傳輸 
一個進程須要將它的數據發送給另外一個進程,發送的數據量在一個字節到幾M字節之間數據庫

共享數據 
多個進程想要操做共享數據,一個進程對共享數據服務器

通知事 
一個進程須要向另外一個或一組進程發送消息,通知它(它們)發生了某種事件(如進程終止時要通知父進程)。架構

資源共享 
多個進程之間共享一樣的資源。爲了做到這一點,須要內核提供鎖和同步機制。異步

進程控制 
有些進程但願徹底控制另外一個進程的執行(如Debug進程),此時控制進程但願可以攔截另外一個進程的全部陷入和異常,並可以及時知道它的狀態改變。socket

管道(pipe)
管道是一種最基本的IPC機制,做用於有血緣關係的進程之間,完成數據傳遞。一個進程須要將它的數據發送給另外一個進程,發送的數據量在一個字節到幾M字節之間。spa

信號量(semophore)
信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。線程

消息隊列(message queue)
消息隊列是消息的連接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程能夠向隊列中添加消息,被賦予讀權限的進程則能夠讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩衝區大小受限等缺點。設計

信號(singal)
信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。
主要做爲進程間以及同一進程不一樣線程之間的同步手段。日誌

共享內存(shared memory)
共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。共享內存是最快的 IPC 方式,它是針對其餘進程間通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號量,配合使用,來實現進程間的同步和通訊。

使得多個進程能夠訪問同一塊內存空間,是最快的可用IPC形式。是針對其餘通訊機制運行效率較低而設計的。每每與其它通訊機制,如信號量結合使用,來達到進程間的同步及互斥。

套接字(socket)
套接字也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣機器間的進程通訊
更爲通常的進程間通訊機制,可用於不一樣機器之間的進程間通訊。
起初是由Unix系統的BSD分支開發出來的,但如今通常能夠移植到其它類Unix系統上:Linux和System V的變種都支持套接字。

消息隊列的使用場景

異步處理
場景說明:用戶註冊後,須要發註冊郵件和註冊短信。經常使用處理方式:1.同步的方式;2.並行方式;3.異步方式
(1)串行方式:將註冊信息寫入數據庫成功後,發送註冊郵件,再發送註冊短信。以上三個任務所有完成後,返回給客戶端

(2)並行方式:將註冊信息寫入數據庫成功後,發送註冊郵件的同時,發送註冊短信。以上三個任務完成後,返回給客戶端。與串行的差異是,並行的方式能夠提升處理的時間

場景說明:用戶註冊後,須要發註冊郵件和註冊短信。經常使用處理方式:1.串行的方式;2.並行方式;3.異步方式 引入消息隊列,將不是必須的業務邏輯,異步處理。改造後的架構以下:

應用解耦

場景說明:用戶下單後,訂單系統須要通知庫存系統。傳統的作法是,訂單系統調用庫存系統的接口。以下圖

傳統模式的缺點:
假如庫存系統沒法訪問,則訂單減庫存將失敗,從而致使訂單失敗
訂單系統與庫存系統耦合

場景說明:用戶下單後,訂單系統須要通知庫存系統。引入消息隊列對系統進行解耦。以下圖

訂單系統:用戶下單後,訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶訂單下單成功
庫存系統:訂閱下單的消息,採用拉/推的方式,獲取下單信息,庫存系統根據下單信息,進行庫存操做
假如:在下單時庫存系統不能正常使用。也不影響正常下單,由於下單後,訂單系統寫入消息隊列就再也不關心其餘的後續操做了。實現訂單系統與庫存系統的應用解耦

流量削峯

應用場景:秒殺活動,通常會由於流量過大,致使流量暴增,應用掛掉。爲解決這個問題,通常須要在應用前端加入消息隊列。
能夠控制活動的人數
能夠緩解短期內高流量壓垮應用

用戶的請求,服務器接收後,首先寫入消息隊列。假如消息隊列長度超過最大數量,則直接拋棄用戶請求或跳轉到錯誤頁面
秒殺業務根據消息隊列中的請求信息,再作後續處理

日誌處理

應用場景:日誌處理是指將消息隊列用在日誌處理中,好比Kafka的應用,解決大量日誌傳輸的問題。架構簡化以下
日誌採集客戶端,負責日誌數據採集,定時寫入Kafka隊列
Kafka消息隊列,負責日誌數據的接收,存儲和轉發
日誌處理應用:訂閱並消費kafka隊列中的日誌數據

消息通信

消息通信是指,消息隊列通常都內置了高效的通訊機制,所以也能夠用在純的消息通信。好比實現點對點消息隊列,或者聊天室等

1,點對點通信:客戶端A和客戶端B使用同一隊列,進行消息通信。

2,聊天室通信:客戶端A,客戶端B,客戶端N訂閱同一主題,進行消息發佈和接收。實現相似聊天室效果。

相關文章
相關標籤/搜索