日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

同步架構(gòu)和異步架構(gòu)的區(qū)別,你知道嗎?

來源: 責(zé)編: 時間:2024-01-02 09:31:04 226觀看
導(dǎo)讀就程序員而言,日后的職業(yè)發(fā)展可以走 3 個方向:專攻技術(shù)深度、轉(zhuǎn)團(tuán)隊管理、晉升架構(gòu)師。成為一名優(yōu)秀的架構(gòu)師,是大多數(shù)技術(shù)人的追求。但資深架構(gòu)師的出現(xiàn)幾率僅約為 0.3%。如果想在 3-5 年后穩(wěn)坐金字塔尖,必須有扎實的代

就程序員而言,日后的職業(yè)發(fā)展可以走 3 個方向:專攻技術(shù)深度、轉(zhuǎn)團(tuán)隊管理、晉升架構(gòu)師。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

成為一名優(yōu)秀的架構(gòu)師,是大多數(shù)技術(shù)人的追求。但資深架構(gòu)師的出現(xiàn)幾率僅約為 0.3%。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

如果想在 3-5 年后穩(wěn)坐金字塔尖,必須有扎實的代碼功底和項目積累,也要意識地培養(yǎng)技術(shù)廣度和架構(gòu)思維能力。多學(xué)習(xí)牛人經(jīng)驗也可獲益良多。nVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片nVi28資訊網(wǎng)——每日最新資訊28at.com

同步調(diào)用是指在請求發(fā)起后,調(diào)用方一直阻塞等待調(diào)用處理完成的過程。在所提供的例子中,客戶端代碼 ClientCode 需要執(zhí)行發(fā)送郵件的操作 sendEmail,這會觸發(fā)對 EmailService 的調(diào)用。nVi28資訊網(wǎng)——每日最新資訊28at.com

EmailService 將調(diào)用 SmtpEmailAdapter 類來處理請求,而該類會通過 SMTP 和 TCP 協(xié)議調(diào)用遠(yuǎn)程服務(wù),將請求發(fā)送到遠(yuǎn)程服務(wù)器。遠(yuǎn)程服務(wù)器收到消息后,會執(zhí)行一系列操作,然后將郵件發(fā)送出去,并返回結(jié)果。nVi28資訊網(wǎng)——每日最新資訊28at.com

Adapter 接收到返回后,再將結(jié)果返回給 EmailService。EmailService 收到返回結(jié)果后,再將其返回給 ClientCode。在整個 sendEmail 過程中,ClientCode 會一直阻塞等待最終調(diào)用結(jié)果的返回,以確定操作是成功還是失敗。由于這個等待過程是阻塞的,因此被稱為同步調(diào)用。nVi28資訊網(wǎng)——每日最新資訊28at.com

02  異步調(diào)用nVi28資訊網(wǎng)——每日最新資訊28at.com

異步調(diào)用與同步調(diào)用相反。在異步調(diào)用的過程中,以發(fā)送郵件的例子為例,用戶 ClientCode 調(diào)用 EmailService 后,EmailService 將調(diào)用請求發(fā)送到消息隊列,然后立即返回。nVi28資訊網(wǎng)——每日最新資訊28at.com

ClientCode 在收到返回后可以繼續(xù)向下處理,而不會繼續(xù)阻塞等待。實際上,消息被發(fā)送到隊列后,尚未被處理。在后續(xù)的消息消費階段,比 EmailService 的返回可能會稍晚一些。有一個消息隊列消費者 QueueConsumer 從消息隊列中取出消息,然后將其發(fā)送給 SmtpAdapter,即調(diào)用 SmtpAdapter。nVi28資訊網(wǎng)——每日最新資訊28at.com

處理邏輯與同步調(diào)用類似,SmtpAdapter 通過 SMTP 通信協(xié)議將消息發(fā)送到遠(yuǎn)程服務(wù)器,執(zhí)行郵件發(fā)送操作,通過 RemoteServer 進(jìn)行處理。處理完成后,收到返回結(jié)果后通知消息隊列 Queue。nVi28資訊網(wǎng)——每日最新資訊28at.com

在這個過程中,客戶端的調(diào)用(即應(yīng)用程序的調(diào)用)和實際的業(yè)務(wù)邏輯(發(fā)送郵件的操作)是異步的。在郵件發(fā)送操作的處理過程中,客戶端代碼已經(jīng)返回,它可以繼續(xù)執(zhí)行自己的后續(xù)操作,而不需要等待郵件的發(fā)送完成,這就是異步調(diào)用。nVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片nVi28資訊網(wǎng)——每日最新資訊28at.com

使用異步調(diào)用架構(gòu)的主要手段之一是通過消息隊列來構(gòu)建。以下是該架構(gòu)的圖示:nVi28資訊網(wǎng)——每日最新資訊28at.com

  1. 消息生產(chǎn)者(Message Producer):負(fù)責(zé)產(chǎn)生消息并將其發(fā)送到消息隊列。消息生產(chǎn)者是異步的,它發(fā)送完消息后就可以繼續(xù)執(zhí)行其他任務(wù),而不必等待消息被處理。
  2. 消息隊列(Message Queue):用于存儲和傳遞消息。消息隊列作為中介,接收生產(chǎn)者發(fā)送的消息,并將其提供給消費者。常見的消息隊列系統(tǒng)包括 RabbitMQ、Apache Kafka、ActiveMQ 等。
  3. 消息消費者(Message Consumer):從消息隊列中獲取消息并進(jìn)行相應(yīng)的業(yè)務(wù)邏輯處理。與消息生產(chǎn)者一樣,消息消費者也是異步的,它可以在獲取消息后立即開始處理,而無需等待消息的產(chǎn)生。

使用消息隊列構(gòu)建一個異步調(diào)用架構(gòu),你需要了解3種角色,一種是消息的生產(chǎn)者,一種是消息隊列,還有一種是消息的消費者。nVi28資訊網(wǎng)——每日最新資訊28at.com

消息的生產(chǎn)者是客戶端應(yīng)用程序代碼的一部分,用來初始化異步調(diào)用處理流程。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

在基于消息隊列的處理中,生產(chǎn)者的職責(zé)非常少,它要做的就是創(chuàng)建一個合法的消息,并把這個消息發(fā)送到消息隊列中,由應(yīng)用開發(fā)者決定生產(chǎn)者的代碼在哪里執(zhí)行,什么時候發(fā)送消息。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

消息隊列是消息發(fā)送的目的地,也是消息發(fā)給消費者的一個緩沖區(qū)。實現(xiàn)消息隊列的方法有很多種,可以使用共享文件夾,也可以利用關(guān)系數(shù)據(jù)庫或者 NoSQL 系統(tǒng)。nVi28資訊網(wǎng)——每日最新資訊28at.com

然而,最主要且常見的做法是使用專門的分布式消息隊列服務(wù)器。這些消息隊列服務(wù)器被設(shè)計用于高效地存儲、傳遞和處理大量的異步消息。它們提供了可靠性、可伸縮性和高性能的特性,以滿足不同應(yīng)用場景的需求。nVi28資訊網(wǎng)——每日最新資訊28at.com

一些流行的分布式消息隊列系統(tǒng)包括:nVi28資訊網(wǎng)——每日最新資訊28at.com

  1. RabbitMQ:一個開源的消息隊列系統(tǒng),實現(xiàn)了高級消息隊列協(xié)議(AMQP)。
  2. Apache Kafka:分布式流處理平臺,具有高吞吐量和可持久性的特點。
  3. ActiveMQ:一個開源的消息和集成模式服務(wù)器,實現(xiàn)了Java Message Service(JMS)規(guī)范。
  4. Amazon SQS(Simple Queue Service):由亞馬遜提供的托管消息隊列服務(wù)。
  5. Redis:一種內(nèi)存中數(shù)據(jù)結(jié)構(gòu)存儲,也可用作消息代理。

nVi28資訊網(wǎng)——每日最新資訊28at.com

業(yè)務(wù)架構(gòu)的第三個重要角色就是消息的消費者。消息的消費者從消息隊列中接受并處理消息,消息的消費者也是由應(yīng)用開發(fā)者實現(xiàn)的,但是它是一個異步處理的組件。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片nVi28資訊網(wǎng)——每日最新資訊28at.com

消息的消費者不需要知道生產(chǎn)者存在,它只依賴消息隊列中的消息。消息的消費者通常部署在獨立的服務(wù)器上,和消息的生產(chǎn)者完全隔離,并且可以通過添加硬件的方式進(jìn)行伸縮。nVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

點對點模型是一種消息傳遞模型,其中消費者和生產(chǎn)者只需知道消息隊列的名稱。在這種模型中,生產(chǎn)者將消息發(fā)送到消息隊列,而消息隊列的另一端有多個消費者競爭消費消息。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

每個到達(dá)消息隊列的消息只會被路由到一個消費者,因此每個消費者看到的是全部消息的一個子集。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

在這張圖中,有多個消息生產(chǎn)者和多個消息消費者。多個生產(chǎn)者將消息發(fā)送到消息隊列,而多個消費者在消息隊列中競爭性地消費消息。nVi28資訊網(wǎng)——每日最新資訊28at.com

每條消息只會被一個消費者消費,每個消費者只會消費消息隊列中的一部分消息。這種點對點的模型適用于需要確保每條消息只被一個接收者處理的場景,以及在消息生產(chǎn)者和消費者之間實現(xiàn)解耦的需求。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

在發(fā)布訂閱模型中,消息可能被發(fā)送到不止一個消費者,生產(chǎn)者發(fā)送消息到一個主題,而不是隊列中。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

消息被發(fā)布到主題后,就會被克隆給每一個訂閱它的消費者,每個消費者接收一份消息復(fù)制到自己的私有隊列。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

消費者可以獨立于其他消費者使用自己訂閱的消息,消費者之間不會競爭消息。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

常用的分布式消息隊列都支持發(fā)布訂閱模型,也就是說消息的發(fā)布訂閱模型是分布式消息隊列的一個功能特性。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

兩種消息傳遞模型通常會根據(jù)業(yè)務(wù)需求和特點進(jìn)行選擇。點對點模型適用于一些耗時較長、邏輯相對獨立的業(yè)務(wù)場景,例如發(fā)送郵件。因為發(fā)送郵件是一個比較耗時的操作,應(yīng)用程序?qū)τ卩]件發(fā)送是否成功并不太關(guān)心,而且發(fā)送郵件的邏輯相對獨立。在這種情況下,應(yīng)用程序只需要把郵件消息放入消息隊列中就可以立即返回。消費者則只需從消息隊列中取出郵件消息進(jìn)行處理,通過遠(yuǎn)程服務(wù)器將郵件發(fā)送出去。由于每封郵件只需要被發(fā)送一次,因此消息只需要被一個消費者消費即可。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

相反,對于一些需要多個消費者協(xié)同處理的、涉及多個步驟的業(yè)務(wù),例如新用戶注冊,通常會選擇發(fā)布訂閱模型。新用戶注冊成功后,可能需要發(fā)送激活郵件、歡迎短信,將用戶注冊數(shù)據(jù)寫入數(shù)據(jù)庫,并將新用戶信息發(fā)送給關(guān)聯(lián)企業(yè)的系統(tǒng),以實現(xiàn)一次注冊即可登錄多個關(guān)聯(lián)產(chǎn)品的需求。在這種情況下,可以使用按主題發(fā)布的方式,即發(fā)布訂閱模型。新用戶注冊消息可以發(fā)布到一個主題,多個消費者可以訂閱這個主題,分別處理不同的任務(wù),如發(fā)送郵件、發(fā)送短信、寫入數(shù)據(jù)庫等。這種模型允許多個消費者同時對同一消息進(jìn)行處理,實現(xiàn)了業(yè)務(wù)邏輯的解耦和靈活性的提高。nVi28資訊網(wǎng)——每日最新資訊28at.com

nVi28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-55165-0.html同步架構(gòu)和異步架構(gòu)的區(qū)別,你知道嗎?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 什么是塊元素、行元素以及行內(nèi)塊元素

下一篇: 2023時間序列預(yù)測熱門研究點總結(jié)

標(biāo)簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 蕉岭县| 霞浦县| 水富县| 弥勒县| 玉门市| 济阳县| 农安县| 宜城市| 广德县| 关岭| 谷城县| 固镇县| 阿拉尔市| 华池县| 运城市| 东城区| 湘西| 商城县| 汤原县| 扬中市| 漳平市| 虎林市| 蒙城县| 兴安县| 台北县| 卢龙县| 灵寿县| 河西区| 固始县| 特克斯县| 巩义市| 历史| 舟山市| 温州市| 军事| 剑川县| 三门峡市| 咸宁市| 磐安县| 嵊泗县| 西丰县|