SpringCloud-同步異步通訊比較

本文詳細探討了同步通訊和異步通訊在信息傳遞中的區別,以及它們分別帶來的優勢和不足。通過對支付流程的案例分析,突顯了同步通訊可能面臨的阻塞和服務依賴問題,而異步通訊通過引入事件驅動模式和消息代理(Broker)成功解決了這些挑戰,實現了服務解耦、性能提升和流量削峰。然而,異步通訊也并非沒有考驗,對消息代理可靠性的依賴和系統架構的復雜性都是需要仔細權衡的因素。在實際應用中,選擇采用同步通訊還是異步通訊應當根據具體的業務場景和需求,以最優方式滿足系統的通訊要求。


一、同步通訊的優點和問題

1、同步通訊介紹

同步通訊是指在進行信息交流時,發送者和接收者在數據傳輸的過程中需要保持一致的時間步調,即發送者發出數據后需要等待接收者完成對數據的處理,然后再進行下一步操作。

如圖所示,支付完成后,支付服務需要依次請求訂單服務、倉儲服務、短信服務等等,需要等待上一個服務提供者的響應才可以走到下一個服務提供者,而且一旦遇到一個服務出問題,會導致整個流程都出現問題。


2、同步通訊的優點

優點詳細描述
可靠性高由于發送者和接收者的操作是同步進行的,可以更容易地確保數據的正確傳遞和處理,減少數據丟失或錯誤的可能性。
簡單明了同步通訊模型相對來說較為簡單,易于理解和實現。這使得在一些簡單的應用場景中更容易使用和維護。
控制靈活通過同步機制,可以更好地控制數據的流動和處理流程,適用于一些需要強調順序和精確控制的場景。

3、同步調用的問題

微服務間基于Feign的調用就屬于同步方式,存在一些問題。

  • 耦合度高,每次加入新的需求都要修,導致資源浪費。

  • 調用鏈中的每個服務在等待響應過程中不能釋放請求占用的資源,高并發場景下性能下降,會極度浪費系統資源。

  • 級聯失敗會導致調用者需要等待服務提供者的響應。如果服務提供者出現問題,所有調用方都會跟著出問題。

  • 如果調用鏈過長,則響應時間等于每次調用的時間之和。如同多米諾骨牌一樣,迅速改原來的代碼會導致整個微服務群故障。


二、異步通訊的優點和問題

1、異步通訊介紹

異步調用常見實現就是事件驅動模式。

如下圖,支付服務在完成支付以后,需要訂單服務、倉儲服務、短信服務各自完成自己的業務。

但是與同步調用不同,我們現在是事件兒驅動模式,不會像之前那樣由支付服務來調用這三個服務,而是引入了一個東西叫 Broker(消息代理)。

當用戶支付成功時,即觸發一個特定事件。這個事件隨后由我們的消息代理(broker)進行管理。訂單服務、倉儲服務和短信服務會向消息代理注冊,以表達對支付成功事件的關注,并請求在事件發生時得到通知。這種機制被稱為事件代理。

在訂閱方面,一旦成功完成訂閱,支付服務在未來檢測到有用戶支付成功時,將發布一個事件,宣告有人支付了,訂單號為1001。消息代理隨即發出通知,將消息傳遞給訂單服務、倉儲服務和短信服務。訂單服務會立即響應,更新訂單狀態;倉儲服務負責完成庫存扣減和發貨;而短信服務則負責發送相應的短信通知。

整個過程通過事件代理實現,確保各服務在業務事件發生時能夠協同工作。


2、異步通訊的優點

優點詳細描述
服務解耦異步通訊能夠實現服務之間的松耦合,使得各個服務能夠獨立演進,降低彼此之間的依賴性。
性能提升吞吐量提高,異步通訊可以提高系統的性能,通過異步處理消息,服務能夠并行執行,從而提高整體吞吐量。
無強依賴服務沒有強依賴,不擔心級聯失敗問題。異步通訊使得服務之間沒有強依賴關系,不同服務的失敗不會直接影響到其他服務,降低了級聯失敗的風險。
流量削峰異步通訊可以幫助應對突發性的高流量,通過消息隊列緩沖和異步處理,實現流量的平滑削峰,避免系統因瞬時高負載而崩潰。

3、步調用的問題

  • 依賴于Broker的可靠性、安全性、吞吐能力: 異步通訊架構中的消息隊列作為Broker,其可靠性、安全性和吞吐能力直接影響整個系統。如果消息隊列出現故障或不穩定,可能導致消息傳遞的延遲或丟失。

  • 架構復雜了,業務沒有明顯的流程線,不好追蹤管理: 異步通訊引入了消息隊列和異步處理機制,使得系統架構更加復雜。由于消息的異步傳遞,業務流程線不再直觀,可能導致追蹤和管理業務流程的困難,特別是在故障排查和調試時。


三、同異步通訊總結

同步通訊在信息傳遞中要求發送者和接收者保持一致的時間步調,雖然簡單直觀,但容易面臨服務依賴、阻塞等問題,尤其在微服務架構中可能導致級聯失敗。相反,異步通訊以事件驅動模式和消息代理的方式解決了同步通訊的局限性,實現了服務解耦、性能提升和流量削峰。然而,異步通訊也伴隨著對消息代理可靠性和系統架構復雜性的挑戰。

在實際應用中,選擇采用同步通訊還是異步通訊需根據具體的應用場景和需求,平衡各自的優缺點。同步通訊適用于簡單的、直觀的業務流程,而異步通訊則更適合復雜的、高并發的系統,尤其在需要實現松耦合、提高系統性能、處理大量并發請求的場景中表現出色。因此,綜合考慮業務特點和系統要求,合理選擇通訊方式對于構建可靠、高效的分布式系統至關重要。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714175.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714175.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714175.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server 開發環境配置教程(SSMS+SQL Prompt)

背景 記錄一下 SQL Server 常用開發軟件 體驗了各種數據庫IDE(DBeaver、Navicat、DataGrip)之后綜合下來還是感覺 SSMSSQL Prompt 對于 SQL Server 最好用,所以在此記錄一下配置過程 數據庫可視化管理工具SSMS 官方下載地址: https://learn.microsoft…

Java基礎數據結構之棧

一.什么是棧 棧是一種特殊的線性表,它只允許在固定的一端進行元素的添加與使用,且遵循先進后出的原則。添加取用元素的一端稱為棧頂,另一端稱為棧底。出棧和入棧都是操作棧頂元素 二.棧的模擬實現 棧的底層是一個數組 這是里面的成員變量以…

智能汽車加速車規級存儲應用DS2431P+TR 汽車級EEPROM 存儲器IC

DS2431PT&R是一款1024位1-Wire EEPROM芯片,由四頁存儲區組成,每頁256位。數據先被寫入一個8字節暫存器中,經校驗后復制到EEPROM存儲器。該器件的特點是,四頁存儲區相互獨立,可以單獨進行寫保護或進入EPROM仿真模式…

第2章 線性代數

目錄 1. 標量、向量、矩陣和張量2. 矩陣和向量相乘3. 單位矩陣和逆矩陣4. 線性相關和生成子空間5. 范數6. 特殊類型的矩陣和向量7. 特征分解8. 奇異值分解9. Moore-Penrose偽逆10. 跡運算11. 行列式 1. 標量、向量、矩陣和張量 標量(scalar):…

【 C++ 】特殊類設計

1、請設計一個類,不能被拷貝 拷貝只會出現在兩個場景中:拷貝構造函數以及賦值運算符重載,因此想要讓一個類禁止拷貝,只需讓該類不能調用拷貝構造函數以及賦值運算符重載即可。在C98和C11都有相對應的方法來解決此問題&#xff0c…

ssm172旅行社管理系統的設計與實現

** 🍅點贊收藏關注 → 私信領取本源代碼、數據庫🍅 本人在Java畢業設計領域有多年的經驗,陸續會更新更多優質的Java實戰項目希望你能有所收獲,少走一些彎路。🍅關注我不迷路🍅** 一 、設計說明 1.1 研究…

day03-Vue-Element

一、Ajax 1 Ajax 介紹 1.1 Ajax 概述 概念:Asynchronous JavaScript And XML,異步 的 JavaScript 和 XML。 作用: 數據交換:通過 Ajax 可以給服務器發送請求,并獲取服務器響應的數據。異步交互:可以在 不…

Java教程:SpringBoot項目如何對接Nacos實現服務發現治理,配置管理

–Nacos大家都知道,不懂的可以去官網或者網上查閱一下,本次給大家講解一下如何在SpringBoot項目中引入Nacos服務來進行服務治理與發現,配置管理等,在微服務當中是必不可少的,各個模塊之間可以通過Feign遠程調用&#x…

物聯網主機:為智能交通賦能

物聯網(IoT)技術的發展為智能交通領域帶來了許多創新的解決方案。而在物聯網應用中,物聯網主機起著關鍵的作用。本文將為大家介紹一款名為E6000的物聯網主機,它是一種多協議、多接口的物聯網主機,為智能交通系統的建設…

antvX6 - Vue自定義節點,并實現多種畫布操作,拖拽、縮放、連線、雙擊、檢索等等

一、 首先 antv x6 分為兩個版本 低版本和高版本 我這里是使用的2.0版本 并且搭配了相關插件 例如:畫布的圖形變換、地圖等 個人推薦 2.0版本,高版本配置多,可使用相關插件多,但是文檔描述小,仍在更新, 低…

小d和圖片壓縮

題目描述 小ddd和她對象小紅去海洋館玩了,但是由于小ddd拍照技術不好,他對象說把她拍的像嘎子! 小ddd看了看,發現是小紅最近長痘痘了,于是他為了討小紅開心,讓痘痘看不見,自學了圖像壓縮這個技…

裝飾器模式 詳解 設計模式

裝飾器模式 它允許你在不改變對象結構的情況下,動態地將新功能附加到對象上。 結構: 抽象組件(Component):定義了原始對象和裝飾器對象的公共接口或抽象類,可以是具體組件類的父類或接口。具體組件&…

固定排班計劃

目錄 1.按發車時間排序。 2.排班日期默認當天時間。 3.編輯不可修改線路和排班日期。 4.線路、車號、司機是否匹配,不匹配不可入庫(和其他表比),線路、發車時間、司機、車號、日期、上下行相同不可入庫(和自己表比…

GO語言學習筆記(與Java的比較學習)(一)

GO的優缺點: 此處引用華為云開發者聯盟的一篇文章: GO語言的亮點很明顯: GoDoc。 GoDoc的靜態語言分析能力很強大,可以直接從代碼和注釋生成漂亮的文檔。這一點區別于其他的類似工具如JavaDoc, PHPDoc或者JSDoc。這些工具需要添加…

如何在群暉Docker運行本地聊天機器人并結合內網穿透發布到公網訪問

文章目錄 1. 拉取相關的Docker鏡像2. 運行Ollama 鏡像3. 運行Chatbot Ollama鏡像4. 本地訪問5. 群暉安裝Cpolar6. 配置公網地址7. 公網訪問8. 固定公網地址 隨著ChatGPT 和open Sora 的熱度劇增,大語言模型時代,開啟了AI新篇章,大語言模型的應用非常廣泛,包括聊天機…

C# Socket通信從入門到精通(21)——TCP發送文件與接收文件 C#代碼實現

1、前言 我們在開發上位機軟件的過程中經常需要發送文件,本文就是介紹如何利用tcp客戶端發送文件、tcp服務器端接收文件,而且本文介紹的方法可以自動發送一個文件夾下的所有子目錄以及所有文件,經驗來自于實際項目,具備非常有價值的參考意義! 2、發送文件以及C#代碼 被發…

LeetCode第48天 買賣股票的最佳時機 買賣股票的最佳時機II 動態規劃

121. 買賣股票的最佳時機 class Solution { public:int maxProfit(vector<int>& prices) {// int res 0 ;// int low INT_MAX;// for (int i 0; i < prices.size(); i) {// low min(low, prices[i]);// res max(res, prices[i]-low);// }// return r…

低密度奇偶校驗碼LDPC(八)——QC-LDPC譯碼器FPGA設計概要

往期博文 低密度奇偶校驗碼LDPC&#xff08;一&#xff09;——概述_什么是gallager構造-CSDN博客 低密度奇偶校驗碼LDPC&#xff08;二&#xff09;——LDPC編碼方法-CSDN博客 低密度奇偶校驗碼LDPC&#xff08;三&#xff09;——QC-LDPC碼概述-CSDN博客 低密度奇偶校驗碼…

Linux系統--------內核參數調優、一鍵安裝nginx、tomcat調優

一、內核參數調優 默認的Linux內核參數考慮的是最通用場景&#xff0c;不符合用于支持高并發訪問的Web服務器的定義&#xff0c;根據業務特點來進行調整&#xff0c;當Nginx作為靜態web內容服務器、反向代理或者提供壓縮服務器的服務器時&#xff0c;內核參數的調整都是不同的…

Spring面試系列-02

1. Spring 中自動裝配有那些局限性? 自動裝配的局限性 重寫:仍需用<constructor-arg>和<property>配置來定義依賴,意味著總要重寫自動裝配。 基本數據類型:不能自動裝配簡單的屬性,例如基本數據類型、String字符串、和類。 模糊特性:自動裝配不如顯式裝配…