前言:老劉今天寫這篇文章首先想對一些複製貼上的部落格表達不滿;其次是想用通俗易懂的話解釋訊息系統;最後歡迎各位英雄好漢、女中豪傑前來battle。
1. 為什麼有訊息系統?
1.1 背景
今天覆習kafka知識點的第一個問題是:為什麼有訊息系統?可能有很多自學大資料開發的人都不怎麼注意這個問題,但老劉希望能夠用這個小問題來提醒自學大資料開發的人,對於每個問題形成自己的理解真的很重要,即使再小的問題,它都有很大的細節!
在這個問題上,某機構的資料是這樣回答的:
看到答案的我表情是這樣的!
原諒老劉是個木魚腦袋,明明問的是為什麼,可這個內容回答的是訊息系統有什麼用,並且對於每個用處的解釋,老劉覺得太專業了,實在不能用自己的理解把它們解釋出來!
於是,老劉帶著疑問去搜了這個問題的相關答案,不查不知道,一查嚇一跳,絕大多數的人都是這樣的回答,內容和排版都差不多,基本都是複製貼上別人的內容。(抄別人的東西有意思嘛)
老劉現在不得不感慨,在網上找到一個好的答案真的太難了,真正用自己的理解回答問題的人太難找了!
1.2 解決
那這個小問題最後是如何解決的呢?
老劉在某天飯點突然一激靈,終於明白了為什麼和有什麼用這兩個其實是可以相互轉換的!
在這個靈感下,老劉結合網上大佬的內容,對為什麼會有kafka訊息系統給出了這樣的答案。
首先為什麼會有kafka訊息系統這個問題,要先回答為什麼會有訊息系統,因為kafka是訊息系統的一個實現。
老劉舉例說明一下為什麼會有訊息系統,對訊息系統的用處進行形象的解釋。
這是第一個例子:
在巧克力的生產過程中,研磨車間把可可豆變成可可粉,再人工傳輸到加熱車間變為巧克力醬,在人工搬到罐裝車間,通過巧克力模型,變為各種形狀的巧克力。但是呢,人工搬運有點慢,我們就引入了傳送帶,省掉人工搬運過程。
接著又發現問題,每個車間生產效率是不一樣的,研磨車間賊快,加熱車間慢,而罐裝車間也快。在這種情況下,研磨車間產生的東西太多了,加熱車間忙不過來,這個時候就可以設定一個倉庫。
這個倉庫就相當於我們的訊息系統,俗稱訊息中介軟體,起到一個緩衝的作用,可以做到削峰填谷。
也相當於送快遞,當快遞到了,我現在沒有時間來取,快遞員就把快遞放在附件的超市裡,等我有空了就去取。
以上就是訊息系統具有的緩衝、削峰填谷功能。
現在講述第二個例子:
傳統模式下,當使用者下單後,訂單系統需要通知庫存系統,其實就是呼叫庫存系統的介面。但是,當庫存系統出現故障,無法訪問的時候,訂單減庫存就是失敗,導致訂單失敗,這就是訂單系統和庫存系統耦合。
那我們怎麼辦呢?
優秀的開發人員引入了訊息系統,使用者下單後,訂單系統完成持久化處理,將訊息寫入訊息系統,返回使用者下單成功。然後庫存系統採用拉/推的方式,獲取下單資訊,庫存系統就會根據下單資訊,進行庫存操作。
通過這樣的方式,訂單系統就和庫存系統成功解耦,這就是訊息系統的解耦合功能。
由於某些機構的資料以及很多部落格的答案都比較具有專業性,老劉實在難以理解,無法用自己的話解釋出來。
於是,老劉結合了很多例子對訊息系統的用處進行了形象的解釋,對為什麼會有訊息系統這個問題也有了大致的答案。對於這個小問題終於能有自己的理解了,不容易啊!
總結一下,對於為什麼會有訊息系統這個問題,我們可以有這樣的理解。
在實際開發過程中,常常有各種千奇百怪需求,突發情況也隨時可能發生,比如應用流量暴增、應用崩潰等,為了解決這些情況,優秀的開發人員實現各種訊息系統,比如RabbitMQ、RocketMQ、kafka,這些訊息系統基本都會有解耦、緩衝、削峰填谷等功能,通過這些功能可以幫助我們在日常開發過程中來應對這些問題。如果時間允許,可以在對每個功能舉例說明!
2. 總結
老劉以前寫部落格,純粹就是分享自學大資料開發的細節知識點,讓同樣是自學的夥伴查漏補缺。今天的部落格有多個目的,老劉寫了一個列表如下:
-
提醒所有自學開發找工作的人,無論是看資料還是瀏覽別人的部落格內容,千萬不要照搬別人的內容,別人寫什麼,就去背什麼,這樣太危險了!
-
對於任何知識點,無論多麼簡單,它都有大大的細節,自己嘗試能能用自己的理解把那些專業的知識點翻譯為自己的話!
-
表達對眾多直接複製貼上的部落格表達不滿,用心寫、用自己的理解寫,不好嗎?
最後,如果有任何遺漏或者錯誤的地方,聯絡公眾號:努力的老劉,歡迎各位英雄好漢、女中豪傑前來批評和指點!