歡迎關注微信公衆號:石杉的架構筆記(id:shishan100)面試
![](http://static.javashuo.com/static/loading.gif)
個人新課**《C2C 電商系統微服務架構120天實戰訓練營》在公衆號儒猿技術窩**上線了,感興趣的同窗,能夠點擊下方連接瞭解詳情:算法
《C2C 電商系統微服務架構120天實戰訓練營》性能優化
1、前情回顧
以前給你們聊了一下,面試時若是遇到消息中間件這個話題,面試官上來可能問的兩個問題:服務器
- 大家的系統架構中爲何要引入消息中間件?
- 系統架構中引入消息中間件有什麼缺點?
關於這兩個問題的回答,能夠參見以前的兩篇文章:微信
在問完這兩個問題以後,不一樣風格的面試官可能會展開不一樣的發問。markdown
針對那種工做年限比較長的資深的同窗,可能會開始就候選人所在公司使用的消息中間件,深刻裏面的技術細節,好比讓你聊聊RocketMQ的架構原理和核心源碼?網絡
可是另一種面試風格,會先從大家的項目和業務入手進行考察,好比像下面這樣:架構
- 消息中間件在大家生產項目裏具體是哪一個業務場景下落地的?
- 這個業務場景有什麼技術挑戰?
- 爲何必需要在這個業務場景裏用消息中間件技術?
- 具體使用消息中間件的時候是怎麼來用的?
好!這篇文章,我們從第二種風格來聊聊。併發
2、業務場景介紹
咱們會落地到某個具體業務系統的某個場景下,看看如何使用消息中間件,而後其效果是什麼。app
業務場景的話,我們就用你們都很熟悉的電商業務爲例,這裏爲了便於理解,對其作了必定的抽象和簡化。
你們仍是來考慮一個下訂單的業務流程,好比你下個訂單,此時須要幹幾件事情:
- 更新訂單狀態爲「待發貨」(耗時20ms)
- 扣減商品庫存(耗時100ms)
- 增長會員積分(耗時80ms)
- 附贈優惠券(耗時50ms)
- 倉儲調度發貨(耗時幾十秒)。
說明一下:上述環節,爲了便於你們理解,作了簡化。實際真正複雜的電商系統裏,總體環節和業務流程會比這個複雜不少倍,並且耗時也絕對不是上面那麼簡單的。
老規矩!咱們仍是經過一張手繪圖,來看看這整個的業務流程:
如上圖,這個下訂單的業務流程中:
更新訂單狀態(20ms) + 扣減商品庫存(100ms) + 增長會員積分(80ms) + 附贈優惠券(50ms) = 250ms。
也就是說,僅僅是這4個流程的話,也就200多毫秒的耗時。
200多毫秒的耗時,對用戶下單體驗來講是很是快速的,幾乎就是一瞬間就完成了,不會感到過多的停頓,也就是一會兒就能夠看到本身下單成功了。
可是,若是加上那個調度倉儲發貨呢?
那個環節須要讀取大量的數據、使用多倉庫/多貨位的調度算法、還要跟C/S架構的倉儲系統進行網絡通訊,所以咱們這裏假設這個環節可能會耗時數十秒。
一旦加上那個調度倉儲發貨的環節到這個下單流程裏,就可能致使用戶要等頁面卡頓幾十秒後纔會看到下單成功的提示,這個用戶體驗就至關的差了。
按照以前一篇文章「Java進階面試系列之一」大家系統架構中爲什麼要引入消息中間件?的說法。對於這種場景,徹底適合使用消息中間件來進行異步化調用。
也就是說,訂單服務對倉儲調度發貨,僅僅是發送一個消息到MQ裏,而後倉儲服務消費消息以後再慢慢的執行調度算法,而後分配商品發貨任務給對應的倉庫便可。
這樣的話,就能夠把耗時幾十秒的倉儲調度發貨的環節,從下單流程裏摘除出去了。進而保證下單流程就僅僅是耗時200多毫秒而已。
至於那個耗時幾十秒的倉儲調度發貨環節,咱們經過異步的方式慢慢執行便可,不會影響用戶下單的體驗。
以上過程,咱們一樣來一張圖,你們直觀的感覺一下:
3、初步落地
好!接下來咱們就假設你們在實際生產中還沒用過消息中間件,我們從0開始,看看如何落地?
對於已經在生產中使用過消息中間件的小夥伴,不妨也看看,權當複習,溫故知新!
咱們以RabbitMQ爲例,假如你用的消息中間件是RabbitMQ,那麼咱們對這個消息中間件應該如何安裝和部署呢?
很簡單,RabbitMQ的官方文檔裏提供了很是詳細的安裝部署步驟,你能夠在本身的筆記本電腦本地安裝,也能夠在公司的服務器上部署。
如今假設你已經參考了官方文檔並安裝完成,那麼接下來在代碼層面應該怎麼來引入RabbitMQ以及在系統裏實現收發消息呢?
下面經過一些HelloWorld級別的代碼和一些簡單的示例圖,給你們演示一下RabbitMQ是如何收發消息的。
對於不少在實際生產中使用過MQ的同窗,這些代碼可能對實際生產中使用過MQ的同窗,顯得太簡單了。
不過考慮到不少初學者可能連用都沒有用過MQ,甚至是才據說消息中間件不久,因此筆者認爲這些demo代碼以及手工繪圖,仍是頗有必要。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
好!看完了代碼,這個時候,咱們能夠經過一張圖來想象一下兩個服務之間的通訊。
訂單服務你能夠啓動多個,不一樣的訂單服務均可以往一個RabbitMQ的queue裏推送消息。
倉儲服務你也能夠啓動多個,多個倉儲服務會採用round-robin的輪詢算法,每一個服務實例均可以從RabbitMQ queue裏消費到一部分的消息。
上面的圖裏,訂單服務在MQ專業術語中叫作**「生產者」**,英文是「Producer」,意思就是這個服務是專門負責生產消息投遞到MQ的。
倉儲服務在MQ專業術語中叫作**「消費者」**,英文是「Consumer」,意思就是這個服務專門是負責從MQ消費消息而後處理的。
這個時候,這套異步通訊的架構就能夠跑起來了。
好了,到目前爲止,雖然這個代碼還存在很多問題,可是不要緊,大致上咱們已經給一些不太熟悉MQ技術的同窗,從一個比較形象易於理解簡化後的電商業務場景出發,經過HelloWorld級別的示例代碼和手工繪圖,將MQ這個技術落地跑起來了。
更進一步,各位同窗徹底能夠參照這個文章裏的案例,思考一下:本身負責的項目裏,有沒有相似的業務場景可使用MQ的?
而後想辦法在本身的項目裏落地使用MQ的技術來作一下異步化,提高核心流程的性能。
這樣將來在跳槽面試的時候,才能夠作到遊刃有餘,有本身的一套東西能夠說。
END
【Java進階面試系列之四】哥們,若是消息中間件的消費者宕機了,會怎麼樣?【敬請期待】
若有收穫,請幫忙轉發,您的鼓勵是做者最大的動力,謝謝!
一大波微服務、分佈式、高併發、高可用的原創系列文章正在路上
歡迎掃描下方二維碼,持續關注:
石杉的架構筆記(id:shishan100)
十餘年BAT架構經驗傾囊相授
**> **推薦閱讀:** > > 一、[拜託!面試請不要再問我Spring Cloud底層原理](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Flink.juejin.im%2525252525252F%2525252525253Ftarget%2525252525253Dhttps%252525252525253A%252525252525252F%252525252525252Flink.juejin.im%252525252525252F%252525252525253Ftarget%252525252525253Dhttps%25252525252525253A%25252525252525252F%25252525252525252Fjuejin.im%25252525252525252Fpost%25252525252525252F5be13b83f265da6116393fc7) > > 二、[【雙11狂歡的背後】微服務註冊中心如何承載大型系統的千萬級訪問?](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Flink.juejin.im%2525252525252F%2525252525253Ftarget%2525252525253Dhttps%252525252525253A%252525252525252F%252525252525252Flink.juejin.im%252525252525252F%252525252525253Ftarget%252525252525253Dhttps%25252525252525253A%25252525252525252F%25252525252525252Fjuejin.im%25252525252525252Fpost%25252525252525252F5be3f8dcf265da613a5382ca) > > 三、[【性能優化之道】每秒上萬併發下的Spring Cloud參數優化實戰](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Flink.juejin.im%2525252525252F%2525252525253Ftarget%2525252525253Dhttps%252525252525253A%252525252525252F%252525252525252Flink.juejin.im%252525252525252F%252525252525253Ftarget%252525252525253Dhttps%25252525252525253A%25252525252525252F%25252525252525252Fjuejin.im%25252525252525252Fpost%25252525252525252F5be83e166fb9a049a7115580) > > 四、[微服務架構如何保障雙11狂歡下的99.99%高可用](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Flink.juejin.im%2525252525252F%2525252525253Ftarget%2525252525253Dhttps%252525252525253A%252525252525252F%252525252525252Flink.juejin.im%252525252525252F%252525252525253Ftarget%252525252525253Dhttps%25252525252525253A%25252525252525252F%25252525252525252Fjuejin.im%25252525252525252Fpost%25252525252525252F5be99a68e51d4511a8090440) > > 五、[兄弟,用大白話告訴你小白都能聽懂的Hadoop架構原理](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Flink.juejin.im%2525252525252F%2525252525253Ftarget%2525252525253Dhttps%252525252525253A%252525252525252F%252525252525252Flink.juejin.im%252525252525252F%252525252525253Ftarget%252525252525253Dhttps%25252525252525253A%25252525252525252F%25252525252525252Fjuejin.im%25252525252525252Fpost%25252525252525252F5beaf02ce51d457e90196069) > > 六、[大規模集羣下Hadoop NameNode如何承載每秒上千次的高併發訪問](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Flink.juejin.im%2525252525252F%2525252525253Ftarget%2525252525253Dhttps%252525252525253A%252525252525252F%252525252525252Flink.juejin.im%252525252525252F%252525252525253Ftarget%252525252525253Dhttps%25252525252525253A%25252525252525252F%25252525252525252Fjuejin.im%25252525252525252Fpost%25252525252525252F5bec278c5188253e64332c76) > > 七、【[性能優化的祕密】Hadoop如何將TB級大文件的上傳性能優化上百倍](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Flink.juejin.im%2525252525252F%2525252525253Ftarget%2525252525253Dhttps%252525252525253A%252525252525252F%252525252525252Flink.juejin.im%252525252525252F%252525252525253Ftarget%252525252525253Dhttps%25252525252525253A%25252525252525252F%25252525252525252Fjuejin.im%25252525252525252Fpost%25252525252525252F5bed82a9e51d450f9461cfc7) > > [八、](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Fjuejin.im%2525252525252Fpost%2525252525252F5bf2c6b6e51d456693549af4)[拜託,面試請不要再問我TCC分佈式事務的實現原理坑爹呀!](https://juejin.cn/post/6844903716089233416) [](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Fjuejin.im%2525252525252Fpost%2525252525252F5bf2c6b6e51d456693549af4) > > 九、[【坑爹呀!】最終一致性分佈式事務如何保障實際生產中99.99%高可用?](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Fjuejin.im%2525252525252Fpost%2525252525252F5bf2c6b6e51d456693549af4) > > 十、[拜託,面試請不要再問我Redis分佈式鎖的實現原理!](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Fjuejin.im%2525252525252Fpost%2525252525252F5bf3f15851882526a643e207) > > **十一、****[【眼前一亮!】看Hadoop底層算法如何優雅的將大規模集羣性能提高10倍以上?](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Flink.juejin.im%25252525253Ftarget%25252525253Dhttps%2525252525253A%2525252525252F%2525252525252Fjuejin.im%2525252525252Fpost%2525252525252F5bf5396f51882509a768067e)** > > **十二、****[億級流量系統架構之如何支撐百億級數據的存儲與計算](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Flink.juejin.im%252525252F%252525253Ftarget%252525253Dhttps%25252525253A%25252525252F%25252525252Fjuejin.im%25252525252Fpost%25252525252F5bfab59fe51d4551584c7bcf)** > > 1三、[億級流量系統架構之如何設計高容錯分佈式計算系統](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Flink.juejin.im%2525253Ftarget%2525253Dhttps%252525253A%252525252F%252525252Fjuejin.im%252525252Fpost%252525252F5bfbeeb9f265da61407e9679) > > 1四、[億級流量系統架構之如何設計承載百億流量的高性能架構](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Flink.juejin.im%25253Ftarget%25253Dhttps%2525253A%2525252F%2525252Fjuejin.im%2525252Fpost%2525252F5bfd2df1e51d4574b133dd3a) > > 1五、[億級流量系統架構之如何設計每秒十萬查詢的高併發架構](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Flink.juejin.im%252F%253Ftarget%253Dhttps%25253A%25252F%25252Fjuejin.im%25252Fpost%25252F5bfe771251882509a7681b3a) > > 1六、[億級流量系統架構之如何設計全鏈路99.99%高可用架構](https://link.juejin.im/?target=https%3A%2F%2Flink.juejin.im%3Ftarget%3Dhttps%253A%252F%252Fjuejin.im%252Fpost%252F5bffab686fb9a04a102f0022) > > 1七、[七張圖完全講清楚ZooKeeper分佈式鎖的實現原理](https://link.juejin.im/?target=https%3A%2F%2Fjuejin.im%2Fpost%2F5c01532ef265da61362232ed) > > 1八、[大白話聊聊Java併發面試問題之volatile究竟是什麼?](https://juejin.cn/post/6844903730303746061) > > 1九、[大白話聊聊Java併發面試問題之Java 8如何優化CAS性能?](https://juejin.cn/post/6844903731234865160) > > 20、[大白話聊聊Java併發面試問題之談談你對AQS的理解?](https://juejin.cn/post/6844903732061159437) > > 2一、[大白話聊聊Java併發面試問題之公平鎖與非公平鎖是啥?](https://juejin.cn/post/6844903732883226637) > > 2二、[大白話聊聊Java併發面試問題之微服務註冊中心的讀寫鎖優化](https://juejin.cn/post/6844903734267510798) > > 2三、[互聯網公司的面試官是如何360°無死角考察候選人的?(上篇)](https://juejin.cn/post/6844903734930046989) > > 2四、[互聯網公司面試官是如何360°無死角考察候選人的?(下篇)](https://juejin.cn/post/6844903735655661581) > > 2五、[Java進階面試系列之一:哥們,大家的系統架構中爲何要引入消息中間件?](https://juejin.cn/post/6844903736444207117) > > 2六、[【Java進階面試系列之二】:哥們,那你說說系統架構引入消息中間件有什麼缺點?](https://juejin.cn/post/6844903737123667975) > > 2七、[【行走的Offer收割機】記一位朋友斬獲BAT技術專家Offer的面試經歷](https://juejin.cn/post/6844903741213130765)**