Java生鮮電商平臺-消息隊列如何給複雜系統解耦(小程序/APP)
說明:Java生鮮電商平臺-消息隊列如何給複雜系統解耦,大家在做程序開發的時候,常用的消息隊列是:RabbitMQ,Kakfa之類的,本文只是介紹下消息隊列給複雜系統解耦的方式.
大型互聯網系統,業務邏輯較爲複雜,或者由於海量、高併發等場景增加了技術架構的復 雜性,這時候需要對複雜系統做解耦,這裏就要用到消息中間件來給系統做解耦。
首先,我們來了解幾個概念。
耦合性(Coupling),也叫耦合度,是對模塊間關聯程度的一個度量。耦合的強弱取決於模 塊間接口的複雜性、調用模塊的方式以及通過界面傳送數據的多少。模塊間的耦合度是指模塊 之間的依賴關係,包括控制關係、調用關係、數據傳遞關係。一般來說,模塊間聯繫越多,其 耦合性越強,同時表明其獨立性越差。軟件設計中通常用耦合度和內聚度,作爲衡量模塊獨立 程度的標準。劃分模塊的一個準則就是高內聚低耦合。
消息中間件,是利用高效可靠的消息傳遞機制進行平臺無關的數據交流,並基於數據通信 來進行分佈式系統的集成。通過提供消息傳遞和消息排隊模型,它可以在分佈式環境下擴展進 程間的通信。消息隊列主要由以下作用:異步處理、流量削峯、應用解耦。
異步處理。生產端不需要等待消費端響應,直接返回,提高了響應時間和吞吐量。
流量削峯。打平高峯期的流量,消費端可以根據自己的速度處理,同時也無需在高峯期增 加太多資源,提高資源利用率。
應用解耦。生產端和消費端不需要相互依賴。 下面分別對消息中間件的應用場景做介紹: 一、異步處理
場景說明:用戶下訂單後,需要發郵件和短信進行確認,傳統的做法有兩種,一是串行的方 式;二是並行的方式。
1) 串行方式:將訂單信息寫入數據庫後,發送郵件,再發送短信,以上三個任務全部完成 後才返回給客戶端。 這裏有一個問題是,郵件、短信並不是必須的,它只是一個通知,而這種做法讓客戶端等待沒有必要等待的事件。
2) 並行方式:將訂單信息寫入數據庫後,發送郵件的同時,發送短信,以上三個任務完成 後,返回給客戶端,並行的方式能提高處理的時間。
假設三個業務節點分別使用 50ms,串行方式使用時間 150ms,並行使用時間 100ms。雖然並行已經提高的處理時間,但是,前面說過,郵件和短信對用戶正常使用網站沒有任何影響, 客戶端沒有必要等待其發送完成才顯示下單成功,應該是寫入數據庫後就返回。
如果採用一般的同步方式處理,系統性能會很慢。
異步-線程池
消息中間件-異步方式
引入消息隊列後,把發送郵件,短信等不是必須的業務邏輯,進行異步處理。
由此可以看出,引入消息隊列後,用戶的響應時間就等於寫入數據庫的時間+寫入消息隊列 的時間,引入消息隊列後處理後,響應時間是串行的 3 倍,是並行的 2 倍。
二、應用解耦
場景:某寶雙 11 購物狂歡節,用戶下單後,訂單系統需要通知庫存系統,做鎖庫存操作, 傳統的做法就是訂單系統調用庫存系統的接口。
下單異步處理
- 這種做法有一個缺點:當庫存系統出現故障時,訂單就會失敗。訂單系統和庫存系統高耦 合,解決的辦法是引入消息隊列。
- 訂單系統:用戶下單後,訂單系統完成持久化處理,將消息寫入消息隊列,返回用戶訂單 下單成功。
- 庫存系統:訂閱下單的消息,獲取下單消息,進行庫操作。
- 如果庫存系統出現故障,消息隊列也能保證消息的可靠投遞,不會導致消息丟失。
三、流量削峯
流量削峯,一般在秒殺系統中應用廣泛。
場景:某東購物網站秒殺活動,一般會因爲流量過大,導致應用掛掉,爲了解決這個問題, 可以在應用前端加入消息隊列。
作用:
1) 可以控制活動人數,超過一定閥值的訂單直接丟棄。
2) 可以緩解短時間的高流量壓垮系統。改造後的處理流程如下:
用戶的請求,服務器收到之後,首先寫入消息隊列,加入消息隊列長度超過最大值,則直 接拋棄用戶請求或跳轉到錯誤頁面。
秒殺業務根據消息隊列中的請求信息,再做後續處理。
以上,介紹了通過消息中間件的方式,給複雜系統解耦,通過消息中間件的引入,還可以 幫助系統提升響應能力、提高可用性,消息中間件是當今架構技術中,很常用的一種工具,希 望大家能夠花時間去研究和實踐。
結語
覆盤與總結.
總結:
做Java生鮮電商平臺的互聯網應用,無論是生鮮小程序還是APP,消息隊列如何給複雜系統解耦架構設計是非常重要的,本文只是起一個拋磚引玉的作用,
希望用生鮮小程序的搭建J消息隊列如何給複雜系統解耦架構設計實戰經驗告訴大家一些實際的項目經驗,希望對大家有用.
QQ:137071249
共同學習QQ羣:793305035