2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

異步調用更好嗎?相比同步調用有哪些優勢?

更新時間:2023-09-26 來源:黑馬程序員 瀏覽量:

什么是同步調用什么是異步調用

微服務一旦拆分,必然涉及到服務之間的相互調用,調用者發起請求后需要等待服務提供者執行業務返回結果后,繼續執行后面的業務。調用者在調用過程中處于阻塞狀態,因此我們成這種調用方式為同步調用,也可以叫同步通訊。但在很多場景下,我們可能需要采用異步通訊的方式,我們來看看什么是同步通訊和異步通訊。

同步通訊:就如同打視頻電話,雙方的交互都是實時的。因此同一時刻你只能跟一個人打視頻電話。

異步通訊:就如同發微信聊天,雙方的交互不是實時的,你不需要立刻給對方回應。因此你可以多線操作,同時跟多人聊天。

兩種方式各有優劣,打電話可以立即得到響應,但是你卻不能跟多個人同時通話。發微信可以同時與多個人收發微信,但是往往響應會有延遲。

所以,如果我們的業務需要實時得到服務提供方的響應,則應該選擇同步通訊(同步調用)。而如果我們追求更高的效率,并且不需要實時響應,則應該選擇異步通訊(異步調用)。

同步調用存在三個問題:

第一,拓展性差 我們目前的業務相對簡單,但是隨著業務規模擴大,產品的功能也在不斷完善。 在大多數電商業務中,用戶支付成功后都會以短信或者其它方式通知用戶,告知支付成功。假如后期產品經理提出這樣新的需求,你怎么辦?是不是要在上述業務中再加入通知用戶的業務? 某些電商項目中,還會有積分或金幣的概念。假如產品經理提出需求,用戶支付成功后,給用戶以積分獎勵或者返還金幣,你怎么辦?是不是要在上述業務中再加入積分業務、返還金幣業務? 。。。 最終你的支付業務會越來越臃腫:

 也就是說每次有新的需求,現有支付邏輯都要跟著變化,代碼經常變動,不符合開閉原則,拓展性不好。

第二,性能下降 由于我們采用了同步調用,調用者需要等待服務提供者執行完返回結果后,才能繼續向下執行,也就是說每次遠程調用,調用者都是阻塞等待狀態。最終整個業務的響應時長就是每次遠程調用的執行時長之和,假如每個微服務的執行時長都是50ms,則最終整個業務的耗時可能高達300ms,性能太差了。

第三,級聯失敗 由于我們是基于OpenFeign調用交易服務、通知服務。當交易服務、通知服務出現故障時,整個事務都會回滾,交易失敗。 這其實就是同步調用的級聯失敗問題。

而要解決這些問題,我們就必須用異步調用的方式來代替同步調用。

異步調用優勢和特點

異步調用方式其實就是基于消息通知的方式,一般包含三個角色:

消息發送者:投遞消息的人,就是原來的調用方

消息Broker:管理、暫存、轉發消息,你可以把它理解成微信服務器

消息接收者:接收和處理消息的人,就是原來的服務提供方

在異步調用中,發送者不再直接同步調用接收者的業務接口,而是發送一條消息投遞給消息Broker。然后接收者根據自己的需求從消息Broker那里訂閱消息。每當發送方發送消息后,接受者都能獲取消息并處理。 這樣,發送消息的人和接收消息的人就完全解耦了。

還是以余額支付業務為例:

除了扣減余額、更新支付流水單狀態以外,其它調用邏輯全部取消。而是改為發送一條消息到Broker。而相關的微服務都可以訂閱消息通知,一旦消息到達Broker,則會分發給每一個訂閱了的微服務,處理各自的業務。

假如產品經理提出了新的需求,比如要在支付成功后更新用戶積分。支付代碼完全不用變更,而僅僅是讓積分服務也訂閱消息即可:

不管后期增加了多少消息訂閱者,作為支付服務來講,執行問扣減余額、更新支付流水狀態后,發送消息即可。業務耗時僅僅是這三部分業務耗時,僅僅100ms,大大提高了業務性能。

另外,不管是交易服務、通知服務,還是積分服務,他們的業務與支付關聯度低。現在采用了異步調用,解除了耦合,他們即便執行過程中出現了故障,也不會影響到支付服務。

綜上,異步調用的優勢包括:

耦合度更低

性能更好

業務拓展性強

故障隔離,避免級聯失敗

當然,異步通信也并非完美無缺,它存在下列缺點:

完全依賴于Broker的可靠性、安全性和性能

架構復雜,后期維護和調試麻煩

分享到:
在線咨詢 我要報名
和我們在線交談!