業內解讀:微服務是如何在軟體架構市場上占據了一席之地的?

来源:http://www.cnblogs.com/zhaowmm/archive/2016/06/12/5577658.html
-Advertisement-
Play Games

在過去幾年中,微服務悄然卻堅定地在擁擠的軟體架構市場上占據了一席之地。與傳統單一整體式架構有所不同,微服務架構並不是將應用作為單體來構建的。雖然單一整體式架構本來是很可靠的,但相關的問題越來越多,特別是在更多應用採用雲端部署的方式之後。微服務架構屬於模塊化的結構,它並非是由拼插在一起的組件堆成,而是 ...


  在過去幾年中,微服務悄然卻堅定地在擁擠的軟體架構市場上占據了一席之地。與傳統單一整體式架構有所不同,微服務架構並不是將應用作為單體來構建的。雖然單一整體式架構本來是很可靠的,但相關的問題越來越多,特別是在更多應用採用雲端部署的方式之後。微服務架構屬於模塊化的結構,它並非是由拼插在一起的組件堆成,而是將軟體分解打散為不同的服務,從而形成組件化結構。因此在微服務架構中,整個應用就像一套彼此獨立、可部署、可伸縮的服務,甚至為使用不同語言編寫不同服務提供了靈活性。此外,這種方式也有助於跨團隊間的並行開發。

  很明顯,隨著業界轉向微服務架構,適用於單一整體式架構的測試方案也需要轉變。考慮到以微服務構建的應用在功能和性能上都更出眾,微服務測試也必須覆蓋各個層面以及層面間服務,同時還要保持輕量級。然而,由於微服務開發本質上是分散式的,相關測試也經常會有很大挑戰,下麵列出了其中一些:

  如果測試團隊傾向使用Web API測試工具——這類工具常在SOA測試中使用,在微服務測試中就會產生問題。由於在微服務架構中,各個服務由不同團隊開發,想要在測試時及時提供所有服務會頗具挑戰性;

  在測試生命周期的各個點上,確定恰當的測試量也是一種挑戰;

  測試與數據驗證中的提取日誌十分複雜;

  考慮到開發的敏捷與非集成性,提供專門的測試環境也是一種挑戰。

  Mike Cohn的測試金字塔(Testing Pyramid)在測試方案制定時非常有用,可以協助確定所需的測試量。根據這個金字塔,在測試時採用自下而上的方法,並將各個階段所需的自動化工作量納入考量,會有助於解決上面提到的那些挑戰。

  單元測試

  單元測試的範圍局限在服務內部,它是圍繞著一組相關聯的案例編寫的。由於單元測試的數量較多,理論上應當是以自動化方式執行的。在微服務中執行單元測試時,必須將協作型單元測試(Sociable unit testing)與孤立型單元測試(Solitary unit testing)相結合,通過觀察其狀態變化來檢查模塊行為,並查看對象以及其依賴項之間的交互情況。然而,測試者需要確保在單元測試中,當單元“行為”受限時,“實現”不會受到測試的限制——可以通過不斷將單元測試的價值與維護成本/實現受限的成本相對比來做到這一點。

  集成測試:

  儘管單獨測試模塊非常重要,但測試各個模塊能否正確交互,並測試其作為子系統的交互性以查看介面的缺陷也同樣重要,這項工作可以通過集成測試來完成。集成測試的目的在於:通過集成模塊檢查路徑暢通與否,來確認模塊與外部組件的交互情況。執行“網關集成測試”與“持續集成測試”能確保在找到外部組件間的邏輯回歸與斷裂之處時迅速獲得反饋,從而有助於評估各個單獨模塊中所含邏輯的正確性。

  組件測試:

  微服務中的組件測試要求:使用測試替代與內部API端點,通過替換外部協作的組件,獨立對各個組件執行測試。組件測試提供給測試者一個受控的測試環境,並幫助他們從消費者角度引導測試,允許綜合測試,提高測試的執行次數,並通過儘量減少可移動部件而降低整體構件的複雜性。組件測試也能確認微服務的網路配置是否正確,以及是否能夠對網路請求進行處理。

  契約測試:

  上述三種測試對模塊提供了高測試覆蓋率,但並未測試到外部依賴是否支持端對端的業務流。而契約測試會測試外部服務的邊界,以查看服務調用的輸入/輸出,並測試該服務能否符合契約預期。將所有的消費者契約測試結果集合起來,有助於維護者在需要時對服務作出變更(不影響消費者),並十分有助於在定義新服務提供支持。

  端對端測試:

  除了測試服務之外,測試者還需要確保無論使用何種架構構建,應用都必須達到業務目標,同時我們還要測試集成系統運行的完整性。因此在微服務測試方案中,端對端測試占據了重要的角色。除此之外,考慮到在微服務架構中有一些執行相同行為的可移動部件,端對端測試時需要找出覆蓋缺口,並確保在架構重構時業務功能不會受到影響。

  結論:

  微服務中的測試必須在顆粒度上更加細緻,同時避免因過於敏感而浪費時間。要想制定強大的測試方案,測試者需要恰當定義服務、明確指定界限。考慮到軟體行業正在向微服務傾斜,這些應用的測試者可能得在服務級別上對流程與測試的實施方式直接進行修改。這樣一來,他們不僅能夠正確地測試各個組件,也能在集成應用與交付優質產品時有更多時間集中精力執行端對端測試。


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

-Advertisement-
Play Games
更多相關文章
  • /* * ctime.h * * Created on: May 19, 2016 * Author: root */ #ifndef CTIME_H_ #define CTIME_H_ #include "common/micro_type.h" #define OFFSET_SECOND 946 ...
  • * String類是不可變類,只要對String進行修改,都會導致新的對象生成。 * StringBuffer和StringBuilder都是可變類,任何對字元串的改變都不會產生新的對象。 在實際使用時,如果經常需要對一個字元串進行修改,例如插入、刪除等 * 但StringBuffer和String ...
  • 實習階段每天都閑著沒事,今天看了一天的Python。以前聽說過python非常簡潔,就像讀英文一樣簡單,而且我貌似以前在google的招聘信息上看到過python。今天一看,相比起C#,C,java還有vb,python確實非常簡潔。 於是,花半小時把python的簡潔之處總結一下,也算是個學習小結 ...
  • 在mysql客戶端與mysql服務端之間,存在著一個字元集轉換器。 character_set_client =>gbk:轉換器就知道客戶端發送過來的是gbk格式的編碼 character_set_connection=>gbk:將客戶端傳送過來的數據轉換成gbk格式 character_set_r ...
  • 在學習c++的過程中,也曾經學習java,就發現java有類的嵌套,而看的c++的書,從來沒有哪個講c++的類可以嵌套,於是就試了一下,看是否c++可以嵌套類(編譯環境vc++6.0) 於是有了下麵的代碼: 1 #include <iostream> 2 using namespace std; 3 ...
  • 提到線程安全,可能大家的第一反應是要確保介面對共用變數的操作要具體原子性。實際上,在多線程編程中我們需要同時關註可見性、順序性和原子性問題。本篇文章將從這三個問題出發,結合實例詳解volatile如何保證可見性及一定程式上保證順序性,同時例講synchronized如何同時保證可見性和原子性,最後對... ...
  • 1.意圖 為其它對象提供一種代理以控制對這個對象的訪問。 2.別名 Surrogate. 3.動機 通過Proxy可以達到對一個對象的訪問控制。 4.適用性 遠程代理 為一個對象在不同地址空間提供局部代表。 虛代理 根據需要創建開銷很大的對象。 保護代理 控制對原始對象的訪問。 智能指引 取代了指針 ...
  • 回到目錄 讓大叔興奮的自動化註冊 對於領域事件之前說過,在程式啟動時訂閱(註冊)一些事件處理程式,然後在程式的具體位置去發佈(觸發)它,這是傳統的pub/sub模式的體現,當然也沒有什麼問題,為了讓它支持分散式的場景,我們引用了redis這種存儲介質,這一切都早已集成到了Lind.DDD架構中,對些 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...