二、訊息佇列的應用場景
三、訊息佇列的缺點
四、訊息佇列的兩種模式
訊息(message)是指在應用之間傳送的資料,訊息可以非常簡單,比如只包含文字字串,也可以更複雜,可能包含嵌入物件。
訊息佇列(message queue)是一種應用間的通訊方式,訊息傳送後可以立即返回,有訊息系統來確保資訊的可靠專遞,訊息發布者只管把訊息發布到mq中而不管誰來取,訊息使用者只管從mq中取訊息而不管誰發布的,這樣發布者和使用者都不用知道對方的存在。
兩個應用系統或者模組之間資料的傳遞就叫做訊息傳遞,傳遞訊息時將資料快取在佇列中,這個專門用於快取訊息的佇列就叫做訊息佇列。
訊息佇列是全域性有序,先進先出。
非同步請求
客戶端發起請求訊息佇列在實際應用中包括如下四個場景:服務端響應接收請求,直接返回請求完成
快取所有使用者的請求,處理使用者的請求
應用耦合:多應用間通過訊息佇列對同一訊息進行處理,避免呼叫介面失敗導致整個過程失敗;
非同步處理:多應用對訊息佇列中同一訊息進行處理,應用間併發處理訊息,相比序列處理,減少處理時間;
限流削峰:廣泛應用於秒殺或搶購活動中,避免流量過大導致應用系統掛掉的情況;
訊息驅動的系統:系統分為訊息佇列、訊息生產者、訊息消費者,生產者負責產生訊息,消費者(可能有多個)負責對訊息進行處理;
具體場景:使用者使用qq相簿上傳一張,人臉識別系統會對該進行人臉識別,一般的做法是,伺服器接收到後,上傳系統立即呼叫人臉識別系統,呼叫完成後再返回成功,如下圖所示:
該方法有如下缺點:
人臉識別系統被調失敗,導致上傳失敗;
延遲高,需要人臉識別系統處理完成後,再返回給客戶端,即使使用者並不需要立即知道結果;
上傳系統與人臉識別系統之間互相呼叫,需要做耦合;
若使用訊息佇列:
客戶端上傳後,上傳系統將資訊如uin、批次寫入訊息佇列,直接返回成功;而人臉識別系統則定時從訊息佇列中取資料,完成對新增的識別。
此時上傳系統並不需要關心人臉識別系統是否對這些資訊的處理、以及何時對這些資訊進行處理。事實上,由於使用者並不需要立即知道人臉識別結果,人臉識別系統可以選擇不同的排程策略,按照閒時、忙時、正常時間,對佇列中的資訊進行處理。
具體場景:購物**開展秒殺活動,一般由於瞬時訪問量過大,伺服器接收過大,會導致流量暴增,相關系統無法處理請求甚至崩潰。而加入訊息佇列後,系統可以從訊息佇列中取資料,相當於訊息佇列做了一次緩衝。
該方法有如下優點:
請求先入訊息佇列,而不是由業務處理系統直接處理,做了一次緩衝,極大地減少了業務處理系統的壓力;
佇列長度可以做限制,事實上,秒殺時,**佇列的使用者無法秒殺到商品,這些請求可以直接被拋棄,返回活動已結束或商品已售完資訊;
具體場景:使用者新上傳了一批**, 人臉識別系統需要對這個使用者的所有**進行聚類,聚類完成後由對賬系統重新生成使用者的人臉索引(加快查詢)。這三個子系統間由訊息佇列連線起來,前乙個階段的處理結果放入佇列中,後乙個階段從佇列中獲取訊息繼續處理。
該方法有如下優點:
避免了直接呼叫下乙個系統導致當前系統失敗;
每個子系統對於訊息的處理方式可以更為靈活,可以選擇收到訊息時就處理,可以選擇定時處理,也可以劃分時間段按不同處理速度處理;
維護變得更加繁瑣:保證每一層資料傳輸的安全
問題:
訊息佇列包括兩種模式,點對點模式(point to point, queue)和發布/訂閱模式(publish/subscribe,topic)
點對點模式下包括三個角色:
訊息佇列
傳送者(生產者)
接收者(消費者)
訊息傳送者生產訊息傳送到queue中,然後訊息接收者從queue中取出並且消費訊息。訊息被消費以後,queue中不再有儲存,所以訊息接收者不可能消費到已經被消費的訊息。
點對點模式特點:
發布/訂閱模式下包括三個角色:
角色主題(topic)
發布者(publisher)
訂閱者(subscriber)
發布者將訊息傳送到topic,系統將這些訊息傳遞給多個訂閱者。
發布/訂閱模式特點:
訊息佇列 Kafka學習
kafka是乙個分布式的訊息佇列,學習見apache kafka文件,中文翻譯見kafka分享,乙個簡單的入門例子見kafka 入門例項。本文只針對自己感興趣的點記錄下。producer consumer 訊息的生成者和使用者。broker kafka server充當broker角色,起到訊息佇列...
訊息佇列 Kafka學習
kafka是乙個分布式的訊息佇列,學習見apache kafka文件,中文翻譯見kafka分享,乙個簡單的入門例子見kafka 入門例項。本文只針對自己感興趣的點記錄下。producer consumer 訊息的生成者和使用者。broker kafka server充當broker角色,起到訊息佇列...
訊息佇列 訊息佇列 kafka
kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...