松耦合和緊耦合的架構設計、性能對比

来源:http://www.cnblogs.com/laxcus/archive/2016/07/18/5681611.html
-Advertisement-
Play Games

在最近的一次大數據技術討論會上,有一家公司的技術高管談到松耦合和緊耦合的性能表現的話題。正好Laxcus大數據管理系統的設計,從0.x、1.x到2.x版本,也經歷了從緊耦合到松耦合的發展過程。做為親歷者,對這兩種架構的設計和運行效果,我們有清楚的瞭解和認識。下麵就說一說這件事。寫此博文,也希望給做系... ...


  在最近的一次大數據技術討論會上,有一家公司的技術高管談到松耦合和緊耦合的性能表現的話題。正好Laxcus大數據管理系統的設計,從0.x、1.x到2.x版本,也經歷了從緊耦合到松耦合的發展過程。做為親歷者,對這兩種架構的設計和運行效果,我們有清楚的瞭解和認識。下麵就說一說這件事。寫此博文,也希望給做系統設計的兄弟們,尤其是做高併發、複雜數據計算的同行提供一點參考。

  先說緊耦合,這種架構是我們在Laxcus 0.x、1.x中採用的。如下圖所示,緊耦合架構本質是一個Client/Server模型。客戶機發起請求給伺服器,伺服器收到,根據請求做出應答,然後反饋給客戶機。這種架構最典型的應用就是我們每天都用到的WEB服務。優點嘛,就是簡單。架構簡單、設計簡單、開發周期短、能夠快速投入部署和應用。在Laxcus集群的早期運行中,這些特點都得到有力的驗證。

緊耦合架構

  但是到了後期,隨著Laxcus集群規模的不斷擴大,訪問量的不斷增加,尤其是數據計算量、計算時間成倍數的增長後,緊耦合架構漸漸不堪重負,缺點開始不斷暴露出來,主要有以下幾個方面:

  1. 無法支持大規模的計算業務。因為大數據業務對電腦資源占比普遍很大,導致多任務並行能力有限。舉個例子,我們曾在一臺Pentium IV 2.G + 2G的機器上測試一項小規模的數據處理業務。當並行任務量達到100多個的時候,電腦已經發生超載現象。

  2. 電腦載荷無法控制。換句話說,就是電腦不能控制超載現象,而超載對硬體傷害非常大,這會嚴重降低電腦穩定運行能力和使用壽命。

  3. 任務執行過程中管理難度大。任務在執行過程中不受管控。

  4. 對網路資源消耗大。同步操作在數據發送和數據返回之間,有很大一段是空閑的,這種空閑占用是對網路資源的極大浪費。

  5. 安全控制力度差。因為伺服器直接暴露給客戶機,容易引髮網絡攻擊行為。

  6. 程式代碼之間關聯度過高,不利於模塊化處理。

  7. 以上現象最終導致系統穩定性變差。

  這些問題出現後,我們開始考慮修改系統設計。經過多番考量、比較、權衡之後,我們決定改用松耦合架構重新規劃系統設計。新框架是在原來Client/Server模型之上的改進,即在Client/Server模型之間加入一個代理(Agent),把CS模型變成CAS模型。在新的架構下,客戶機的角色不變,代理伺服器承擔起與客戶機通信,和對客戶機的識別判斷工作,伺服器位於代理伺服器後面,對客戶機來說不可見,它只負責數據處理工作。另外我們也把CS模型的同步操作改為CAS的代理處理。

  在設計新架構的同時,我們還發現,如果要適應松耦合架構,原來在緊耦合架構下運行的程式代碼,因為現在的工作方式發生了發生了變化,它們幾乎都要重寫。這可是一個龐大的工程,需要消耗大量的人力、時間去修改和調試。所以我們在松耦合架構之上,結合代理伺服器,又設計了一套Invoke/Produce機制。這是另一種代理方案,是針對數據處理進行抽象化處理和分組分級管理。原來的數據處理和業務邏輯套用這套機制後,程式代碼基本不用修改,轉移到CAS模型上運行就可以了。 

 

松耦合架構

  新架構設計和代碼修改完成後,我們在原來的集群上,和緊耦合架構做了各種對比測試。結果表現是出其的好,不僅解決了緊耦合架構上存在的所有問題,而且其中很多技術指標還超出了我們的預估,主要表現以下一些方面:

  1. 多任務並行處理能力獲得極大提升。同樣是上述那個數據處理,緊耦合架構只能支持最大約100多個並行,而轉到松耦合架構上,達到了8700多個。這還只是在Pentium IV 2.0晶元上的表現,放到Core 2平臺,並行處理任務很輕鬆地超過10000個。

  2. 實現負載自適應機制。(根據當時運行環境,松耦合架構分配並行工作任務,避免超載現象)。

  3. 實現了運行任務的隨機控制。 (松耦合架構對運行中的工作任務進行隨機調整和控制,進一步避免了持續超載現象)。

  4. 基本杜絕了網路攻擊行為。由於代理伺服器的隔絕和篩查作用,同時結合其它安全管理手段,外部攻擊在代理伺服器處就被識別和過濾掉了,這樣就保護了後面的伺服器不受影響。

  5. Invoke/Produce機制改善了程式結構的模塊化,有利於實現複雜的數據業務處理。

  6. 非同步操作減少了網路資源消耗和操作關聯。

  7. 綜合以上措施,它們共同增強了系統穩定性。

 

  最後用一張表格對兩種架構做個對比,做為兩種架構性能特點的總結。有關Laxcus詳細介紹,請見《Laxcus大數據管理系統》一文。

 

緊耦合架構

松耦合架構

工作方式

同步

非同步

程式關聯依賴

業務邏輯關係

集中控制

分散控制

設計難度

容易

比較複雜

響應能力

和並行工作量成反比

時效表現

實時

無要求

業務適用範圍

簡單計算

複雜計算

安全

應用領域

小規模並行處理環境

大規模、超大規模並行處理環境

系統穩定性

 


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

-Advertisement-
Play Games
更多相關文章
  • 1.php利用mysqldump備份資料庫,代碼如下: 2.通過bat運行以上php文件,bat文件內容如下: 其中: e:/wamp/php5.4.44/php.exe :php安裝路徑; e:/wamp/backup.php :要運行的php文件; zzy :要備份的資料庫; 30 :備份數據保 ...
  • 添加Jedis依賴 我們可以使用以下三種方式來添加Jedis依賴。 1、下載jar文件 從http://search.maven.org/下載最近的jedis包和Apache Commons Pool 2 2.0依賴包。 2、從源碼中構建 以下方式會構建最新的Jedis版本。 首先、克隆GitHub ...
  • 在上一章節Spring學習筆記1——IOC: 儘量使用註解以及java代碼中,已經搭建了項目的整體框架,介紹了IOC以及mybatis。第二節主要介紹SpringMVC中的表單數據驗證以及文件上傳,歡迎訪問https://github.com/everseeker0307/register。 一、表 ...
  • web.xml 添加下麵的就可以了 ...
  • 話說我們做程式員的,都應該多少是個懶人,我們總是想辦法驅使我們的電腦幫我們幹活,所以我們學會了各式各樣的語言來告訴電腦該做什麼——儘管,他們有時候也會誤會我們的意思。 ...
  • 一、Spring IOC 容器支持自動裝配 Bean,所謂自動裝配是指,不需要通過 <property> 或 <constructor-arg> 為 Bean 的屬性註入值的過程。 二、配置: 在 <bean> 的 autowire 屬性里指定自動裝配的模式。預設為 no 。可以通過 <beans> ...
  • Java中ScheduleThreadPoolExecutor主要用於執行延遲任務或者按照一定的頻率執行任務。其中scheduleAtFixedRate函數是按照一定頻率執行任務,scheduleWithFixedDelay可以根據延遲一定時間再執行任務。本文將參考ScheduleThreadPoo ...
  • 首先可以去http://www.oracle.com/technetwork/java/javase/downloads下載jdk安裝包。目前jdk已經更新到了8u91/8u92的版本,不過此處我用的jdk版本仍然是jdk8u51,下麵介紹其安裝步驟與環境變數的配置 雙擊應用程式jdk-8u51-w ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...