自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

項目里接入了MQ消息中間件以后,我摸魚的時間更長了~

開發(fā) 架構(gòu)
針對那種工作年限比較長的資深的同學,可能會開始就候選人所在公司使用的消息中間件,深入里面的技術(shù)細節(jié),比如讓你聊聊RocketMQ的架構(gòu)原理和核心源碼?

一、前情回顧

之前給大家聊了一下,面試時如果遇到消息中間件這個話題,面試官上來可能問的兩個問題:

  • 你們的系統(tǒng)架構(gòu)中為什么要引入消息中間件?
  • 系統(tǒng)架構(gòu)中引入消息中間件有什么缺點?

在問完這兩個問題之后,不同風格的面試官可能會展開不同的發(fā)問。

針對那種工作年限比較長的資深的同學,可能會開始就候選人所在公司使用的消息中間件,深入里面的技術(shù)細節(jié),比如讓你聊聊RocketMQ的架構(gòu)原理和核心源碼?

但是另外一種面試風格,會先從你們的項目和業(yè)務(wù)入手進行考察,比如像下面這樣:

  • 消息中間件在你們生產(chǎn)項目里具體是哪個業(yè)務(wù)場景下落地的?
  • 這個業(yè)務(wù)場景有什么技術(shù)挑戰(zhàn)?
  • 為什么必須要在這個業(yè)務(wù)場景里用消息中間件技術(shù)?
  • 具體使用消息中間件的時候是怎么來用的?

二、業(yè)務(wù)場景介紹

我們會落地到某個具體業(yè)務(wù)系統(tǒng)的某個場景下,看看如何使用消息中間件,然后其效果是什么。

業(yè)務(wù)場景的話,咱們就用大家都很熟悉的電商業(yè)務(wù)為例,這里為了便于理解,對其做了一定的抽象和簡化。

大家還是來考慮一個下訂單的業(yè)務(wù)流程,比如你下個訂單,此時需要干幾件事情:

  1. 更新訂單狀態(tài)為“待發(fā)貨”(耗時20ms)
  2. 扣減商品庫存(耗時100ms)
  3. 增加會員積分(耗時80ms)
  4. 附贈優(yōu)惠券(耗時50ms)
  5. 倉儲調(diào)度發(fā)貨(耗時幾十秒)。

說明一下:上述環(huán)節(jié),為了便于大家理解,做了簡化。實際真正復雜的電商系統(tǒng)里,整體環(huán)節(jié)和業(yè)務(wù)流程會比這個復雜很多倍,而且耗時也絕對不是上面那么簡單的。

老規(guī)矩!我們還是通過一張手繪圖,來看看這整個的業(yè)務(wù)流程:

如上圖,這個下訂單的業(yè)務(wù)流程中:

更新訂單狀態(tài)(20ms) + 扣減商品庫存(100ms) + 增加會員積分(80ms) + 附贈優(yōu)惠券(50ms) = 250ms。

也就是說,僅僅是這4個流程的話,也就200多毫秒的耗時。

200多毫秒的耗時,對用戶下單體驗來說是非常快速的,幾乎就是一瞬間就完成了,不會感到過多的停頓,也就是一下子就可以看到自己下單成功了。

但是,如果加上那個調(diào)度倉儲發(fā)貨呢?

那個環(huán)節(jié)需要讀取大量的數(shù)據(jù)、使用多倉庫/多貨位的調(diào)度算法、還要跟C/S架構(gòu)的倉儲系統(tǒng)進行網(wǎng)絡(luò)通信,因此我們這里假設(shè)這個環(huán)節(jié)可能會耗時數(shù)十秒。

一旦加上那個調(diào)度倉儲發(fā)貨的環(huán)節(jié)到這個下單流程里,就可能導致用戶要等頁面卡頓幾十秒后才會看到下單成功的提示,這個用戶體驗就相當?shù)牟盍恕?/span>

也就是說,訂單服務(wù)對倉儲調(diào)度發(fā)貨,僅僅是發(fā)送一個消息到MQ里,然后倉儲服務(wù)消費消息之后再慢慢的執(zhí)行調(diào)度算法,然后分配商品發(fā)貨任務(wù)給對應(yīng)的倉庫即可。

這樣的話,就可以把耗時幾十秒的倉儲調(diào)度發(fā)貨的環(huán)節(jié),從下單流程里摘除出去了。進而保證下單流程就僅僅是耗時200多毫秒而已。

至于那個耗時幾十秒的倉儲調(diào)度發(fā)貨環(huán)節(jié),我們通過異步的方式慢慢執(zhí)行即可,不會影響用戶下單的體驗。

以上過程,我們同樣來一張圖,大家直觀的感受一下:

三、初步落地

好!接下來我們就假設(shè)大家在實際生產(chǎn)中還沒用過消息中間件,咱們從0開始,看看如何落地?

對于已經(jīng)在生產(chǎn)中使用過消息中間件的小伙伴,不妨也看看,權(quán)當復習,溫故知新!

我們以RabbitMQ為例,假如你用的消息中間件是RabbitMQ,那么我們對這個消息中間件應(yīng)該如何安裝和部署呢?

很簡單,RabbitMQ的官方文檔里提供了非常詳細的安裝部署步驟,你可以在自己的筆記本電腦本地安裝,也可以在公司的服務(wù)器上部署。

現(xiàn)在假設(shè)你已經(jīng)參考了官方文檔并安裝完成,那么接下來在代碼層面應(yīng)該怎么來引入RabbitMQ以及在系統(tǒng)里實現(xiàn)收發(fā)消息呢?

下面通過一些HelloWorld級別的代碼和一些簡單的示例圖,給大家演示一下RabbitMQ是如何收發(fā)消息的。

對于很多在實際生產(chǎn)中使用過MQ的同學,這些代碼可能對實際生產(chǎn)中使用過MQ的同學,顯得太簡單了。

不過考慮到很多初學者可能連用都沒有用過MQ,甚至是才聽說消息中間件不久,所以筆者認為這些demo代碼以及手工繪圖,還是很有必要。

好!看完了代碼,這個時候,我們可以通過一張圖來想象一下兩個服務(wù)之間的通信。

訂單服務(wù)你可以啟動多個,不同的訂單服務(wù)都可以往一個RabbitMQ的queue里推送消息。

倉儲服務(wù)你也可以啟動多個,多個倉儲服務(wù)會采用round-robin的輪詢算法,每個服務(wù)實例都可以從RabbitMQ queue里消費到一部分的消息。

?上面?的圖里,訂單服務(wù)在MQ專業(yè)術(shù)語中叫做“生產(chǎn)者”,英文是“Producer”,意思就是這個服務(wù)是專門負責生產(chǎn)消息投遞到MQ的。

倉儲服務(wù)在MQ專業(yè)術(shù)語中叫做“消費者”,英文是“Consumer”,意思就是這個服務(wù)專門是負責從MQ消費消息然后處理的。

這個時候,這套異步通信的架構(gòu)就可以跑起來了。

好了,到目前為止,雖然這個代碼還存在不少問題,但是沒關(guān)系,大體上我們已經(jīng)給一些不太熟悉MQ技術(shù)的同學,從一個比較形象易于理解簡化后的電商業(yè)務(wù)場景出發(fā),通過HelloWorld級別的示例代碼和手工繪圖,將MQ這個技術(shù)落地跑起來了。

更進一步,各位同學完全可以參照這個文章里的案例,思考一下:自己負責的項目里,有沒有類似的業(yè)務(wù)場景可以使用MQ的?

然后想辦法在自己的項目里落地使用MQ的技術(shù)來做一下異步化,提升核心流程的性能。

這樣未來在跳槽面試的時候,才可以做到游刃有余,有自己的一套東西可以說。

責任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2022-07-26 00:00:00

MQ消息中間件

2020-07-03 08:53:35

消息中間件MQ

2016-09-12 18:01:05

IBM

2015-08-11 11:16:36

淘寶中間件

2022-11-02 10:08:46

分布式高并發(fā)消息中間件

2021-12-14 10:39:12

中間件ActiveMQRabbitMQ

2024-03-28 12:55:00

消息中間件RocketMQ

2022-08-09 08:31:29

RocketMQ消息中間件

2023-05-08 08:09:26

路由元信息謂詞

2022-07-25 06:46:24

MQ中間件消息中間件

2019-07-19 07:56:13

消息隊列消息代理消息中間件

2022-11-18 07:54:02

Go中間件項目

2023-10-16 12:25:48

2024-01-24 08:19:02

Stream應(yīng)用場景注解

2022-02-13 23:04:28

RedisRabbitMQKafka

2022-10-21 10:48:17

消息中間件互聯(lián)網(wǎng)應(yīng)用協(xié)議

2016-11-11 21:00:46

中間件

2022-05-10 09:24:44

中間件應(yīng)用方案
點贊
收藏

51CTO技術(shù)棧公眾號