什麼是鬆散耦合的架構?

来源:https://www.cnblogs.com/wintersun/archive/2022/12/03/16947627.html
-Advertisement-
Play Games

散耦合的架構是一種軟體應用程式開發模式,其中多個組件相互連接,但並不嚴重依賴對方。這些組件共同創建了一個總的網路或系統,儘管每個服務都是為執行單一任務而創建的獨立實體。鬆散耦合架構的主要目的是創建一個不會因為單個組件的失敗而失敗的系統。面向服務的架構(SOA)通常由鬆散耦合的架構組成。 鬆散耦合架構 ...


      散耦合的架構是一種軟體應用程式開發模式,其中多個組件相互連接,但並不嚴重依賴對方。這些組件共同創建了一個總的網路或系統,儘管每個服務都是為執行單一任務而創建的獨立實體。鬆散耦合架構的主要目的是創建一個不會因為單個組件的失敗而失敗的系統。面向服務的架構(SOA)通常由鬆散耦合的架構組成。

      鬆散耦合架構的例子
考慮一個實例,你在一個程式中創建了兩個類,A和B。當A類的方法調用B類的方法或使用B類中定義的變數實例時,兩個類是緊密耦合的。然而,當A類依賴於B類的介面而不是B類中定義的方法時,兩個類是鬆散耦合的。

img-2

       以上是一個使用鬆散耦合系統的訂餐應用程式的例子。該應用程式包含不同的服務,如訂單服務、餐廳服務、送貨服務和客戶服務。當客戶訂購食品時,訂單服務負責處理。餐廳服務接收這些數據並準備好食物,而送餐服務則處理送餐部分。客戶服務在需要時為客戶提供協助。在這種情況下,每個單獨的服務並不嚴重依賴其他任何服務。所有服務都通過API進行通信,以便發送和接收所需的信息。因此,當一個服務崩潰時,它可以立即被替換,而不會幹擾到應用程式的其他組件。同樣,訂單服務可以在高峰期或季節中自動擴展。

      鬆散耦合的架構與緊密耦合的架構
鬆散耦合與緊密耦合的架構是一個需要思考的重要問題。在軟體開發領域,耦合是指一個對象對另一個對象的依賴性。一個對象對另一個對象的瞭解程度或一個對象對另一個對象的依賴程度決定了系統是鬆散耦合還是緊密耦合。當依賴程度很低時,我們說它是鬆散耦合的。基本上,這意味著一個對象知道其他對象通過API暴露出來的東西。同樣地,當一個系統的變化不會迫使另一個系統發生變化時,兩個系統就是鬆散耦合的。

鬆散耦合系統中的每個服務都被設計成具有單一的目的或責任,可以獨立部署、管理、擴展和移除。每個服務都包含一個用於通信的介面(REST API)。由於每個服務可以使用不同的編程語言、平臺、技術和框架,所以很容易對單個服務進行修改、執行測試、擴展服務和刪除服務而不影響系統。鬆散耦合的架構容納了廣泛的API和與介面解耦的可互操作的資源模式。

      另一方面,緊耦合架構中的對象嚴重依賴於系統的其他組件。每個對象必須與其他對象或組件協作和協調,以完成一個功能。在這種情況下,一個類的邏輯被另一個類所調用。這意味著一個對象或類需要另一個對象或類來完成一項任務。因此,每個類都承擔著多種責任,對一個類的改變也迫使一個或多個其他類發生改變。

img1-1

微服務在鬆散耦合的架構中的重要性
       微服務是一種架構設計,有利於將應用程式開發成小型獨立的服務,這些服務運行自己的流程,並使用輕量級協議和消息系統進行通信,使其與平臺無關,與語言無關。每個服務都是獨立的、可測試的、高度可維護的、可獨立部署的,並且實現了一種業務能力。最重要的是,每個服務都由一個小團隊來維護、部署、創建和擁有。微服務是面向服務的架構的一個明顯的變體,它利用了鬆散耦合的架構方法。事實上,鬆散耦合是微服務架構的關鍵組成部分。

微服務架構對於創建一個鬆散耦合的系統是非常重要的,因為耦合在軟體系統設計中是不可避免的。例如,在一個電子商務門戶中,訂單服務應該使用API與客戶服務或交付服務進行通信。也就是說,微服務允許你儘可能地保持這種耦合性。

微服務由一組協作的服務組成,它們使用不同的耦合方法一起工作。

運行時耦合。一個服務的可用性影響另一個服務的可用性的程度。
設計時耦合。一個服務的變化會引發另一個服務的變化的程度。
基礎設施耦合。一個服務的資源消耗影響另一個服務的資源消耗的程度。
每種耦合方法都帶來了自己的挑戰。例如,運行時耦合會在變化發生時降低可用性。因此,在微服務架構中,你會遇到一個很長的調用隊列。

當你實施設計時耦合時,API的一個小變化需要改變所有與該API交互的服務。因此,所有與這些服務有關的團隊都必須合作並討論這個變化。因此,保持設計時耦合儘可能的鬆散是很重要的,特別是當不同的協作團隊參與進來的時候。

微服務使設計時耦合模型很容易實現鬆散耦合,同時使你能夠使用精益開發和DevOps CI/CD最佳實踐有效地處理耦合挑戰。

哪些AWS服務可用於鬆散耦合的架構?
亞馬遜簡單排隊服務(SQS)和簡單通知服務(SNS)是強大的機制,可以幫助你建立高度可擴展和鬆散耦合的架構,在平臺、網路和操作層面上進行耦合:
亞馬遜簡單排隊服務(SQS)。當客戶下訂單時,接收該訂單的應用程式將其作為消息發送到SQS。該消息被排隊,並由AWS Lambda等函數消費。一旦消息被處理,它就會被自動刪除。
亞馬遜簡單通知服務(SNS)。以 "發佈-訂閱 "的模式工作,其中應用程式將訂單消息發送到SNS主題,然後在不同的端點上複製,以便並行運行進程。
  AWS Lambda。無伺服器計算引擎。
  AWS Fargate。用於無伺服器計算的容器即服務。
  AWS AutoScaling。自動縮放服務。
  亞馬遜S3。存儲服務。
  亞馬遜API網關。API管理服務。
  AWS CloudWatch。用於管理SQS中的消息。

img-3

鬆散耦合的架構場景
       與緊耦合架構不同的是,松耦合架構在單個節點上大量運行較小的作業,併在節點內進行並行化,而緊耦合架構運行的是成千上萬個相互依賴的並行進程或內核,以進行計算。由於進程之間的依賴性不高,失去一個節點並不影響整體功能。作業要麼稍後處理,要麼被刪除。

在選擇鬆散耦合的架構時,必須考慮以下幾個方面:

計算--底層的EC2實例類型應該根據應用程式的記憶體與計算比率來確定。
網路--在鬆散耦合的情況下,帶寬和延遲問題不是一個問題,因為並行運行的進程不需要太多的互動。
存儲--每個鬆散耦合的應用程式都有不同的存儲要求。因此,要考慮數據集大小和數據傳輸要求。
部署--鑒於鬆散耦合的應用程式在安裝在不同可用區的核心上運行,它們可以使用AWS Parallel Cluster或AWS Batch進行有效部署。

具有鬆散耦合架構的AWS無伺服器方案
       無伺服器計算是一種雲原生軟體開發方法,可以幫助企業輕鬆、無縫地構建和運行應用程式,而沒有配置和管理伺服器的負擔。伺服器仍然被使用,但由雲計算供應商管理。這裡的問題是,收費不是基於伺服器的數量或帶寬,而是基於使用率。它使企業能夠以現收現付的方式購買後端伺服器,只為使用的服務付費。

無伺服器計算有兩種模式。

1. 功能即服務。一種允許你根據事件運行代碼的服務,沒有複雜的基礎設施管理。應用程式以無狀態模式運行,其中伺服器和客戶端是鬆散耦合的,因此是獨立、靈活、可擴展和容錯的。

關於計算引擎,AWS Lambda是AWS的一個流行的無伺服器FaaS工具。對於基於容器的工作負載,可以使用AWS Fargate。對於事件觸發,我們推薦使用Amazon SQS、AWS SNS和Eventbridge。

2. 後臺即服務。運行伺服器端邏輯的任務被外包給一個雲供應商。AWS BaaS工具包括用於記錄的Amazon Elasticsearch Service、用於分析的AWS Kinesis和用於IAM的AWS Cognito。

有三種類型的無伺服器調用方法:

同步調用--當客戶端請求需要立即響應時使用。
非同步調用--當你不希望客戶端等待響應,而是在流程完成後通過通知提醒客戶端時使用。
流式調用--用於以相同的速度進行上游、處理和下游的數據。
談到無伺服器計算,帶有非同步方法的松耦合架構是一個不錯的選擇。也就是說,不要忘了確保它是故障快速的,並能正確地扇出。

結論
       軟體技術迅速變化,迫使組織不斷適應新的技術和趨勢。當涉及到鬆散耦合與緊密耦合的架構時,信息流和服務之間的協調在緊密耦合的架構中會更好。然而,在對你的應用程式進行修改時,它們會限制你的靈活性。鬆散耦合的架構是當下的需要。它不僅允許你即時交換或擴展組件,而且還能幫助你在不影響現有系統的可用性和性能的情況下增加新的功能。通過微服務、精益開發和DevOps實踐,鬆散耦合的架構讓你在競爭中保持優勢,甚至領先。



今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管管,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟體工程的迷思
企業項目化管理介紹
軟體項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共用
高效能的團隊建設
項目管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
互聯網資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變

如有想瞭解更多軟體設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關註我的微信訂閱號:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發佈在我的獨立博客中-Petter Liu Blog。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一:背景 1.講故事 這周有個朋友找到我,說他的程式出現了記憶體緩慢增長,沒有回頭的趨勢,讓我幫忙看下到底怎麼回事,據朋友說這個問題已經困擾他快一周了,還是沒能找到最終的問題,看樣子這個問題比較刁鑽,不管怎麼說,先祭出 WinDbg。 二:WinDbg 分析 1. 托管還是非托管泄露 一直關註這個系列 ...
  • Linux 命令及其參數繁多,大多數人都是無法記住全部功能和具體參數意思的。在 linux 終端,面對命令不知道怎麼用,或不記得命令的拼寫及參數時,我們需要求助於系統的幫助文檔; linux 系統內置的幫助文檔很詳細,通常能解決我們的問題,我們需要掌握如何正確的去使用它們。 ...
  • Linux系統環境監測 Linux系統環境主要監測CPU、記憶體、磁碟I/O和網路流量。 1. CPU (1) 查看CPU的負載情況:uptime 可以通過uptime查看系統整體的負載情況。 如果伺服器的CPU為1核心,則1分鐘的系統平均負載 >=3 說明負載過高,如果伺服器的CPU為4核心,則lo ...
  • 1.2 Hadoop簡介 1.2.1 什麼是Hadoop ​ Hadoop 是一個適合大數據的分散式存儲和計算平臺 ​ 如前所述,狹義上說Hadoop就是一個框架平臺,廣義上講Hadoop代表大數據的一個技術生態 圈,包括很多其他軟體框架 ​ Hadoop生態圈技術棧 ​ Hadoop(HDFS + ...
  • 導讀: 今天為大家介紹京東零售大數據的雲原生平臺化實踐,主要包括以下幾大方面內容: 雲原生的定義和理解 雲原生相關技術的演化 京東大數據在雲原生平臺化上的實踐 雲原生應用平臺的發展 分享嘉賓:劉仲偉 京東 架構師 編輯整理:張明宇 廣州某銀行 出品社區:DataFun 01/雲原生的定義和理解 1. ...
  • 一、學習路線 1.HTML5+CSS3 黑馬程式員pink老師前端入門教程,零基礎必看的h5(html5)+css3+移動端前端視頻教程_嗶哩嗶哩_bilibili 2.JavaScript JavaScript基礎語法-dom-bom-js-es6新語法-jQuery-數據可視化echarts黑馬 ...
  • JQuery03 4.jQuery選擇器03 4.4表單選擇器 應用實例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表單選擇器應用實例</title> <script type="text/javasc ...
  • 一、什麼是防禦式編程 防禦性編程是一種細緻、謹慎的編程方法(習慣)。我們在寫代碼時常會有“以防萬一”的心態,把以防萬一有可能出現的情況提前考慮進去,規避以免以防萬一齣現帶來的問題。 應用防禦性編程技術,你可以偵測到可能被忽略的錯誤,防止可能會導致災難性後果的“小毛病”的出現,在時間的運行過程中為你節 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...