微服務中的設計模式

来源:https://www.cnblogs.com/viaiu/archive/2018/11/24/10011376.html
-Advertisement-
Play Games

微服務的目標是通過將應用程式分解為可以獨立部署的小型自治服務來提高應用程式版本的速度。微服務架構也帶來了一些挑戰,這些模式可以幫助緩解這些挑戰。設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。當然微服務中的雲設計模式也是對微服務中普遍存在的問題... ...


          說到設計模式,大家一般會想到,工廠、單例等24種基本設計模式,當然也會想到併發型模式,生產-消費者模式,線程池模式等,但是微服務中用到什麼設計模式了?前兩篇介紹了,挎鬥模式和代表模式,當然這一類設計模式屬於雲設計模式。AzureCAT模式和實踐團隊在Azure架構中心發佈了九種新的設計模式。在設計和實現微服務時,這九種模式特別有用。微服務越來越變的流行是記錄這些模式的動機。

下圖說明瞭如何在微服務架構中使用這些模式:

對於每種模式,我們都會描述問題,解決方案,何時使用模式以及實現註意事項。

  • Ambassador(代表模式) 可用於以一種與語言無關的方式卸載常見客戶端連接任務,如監視、記錄、路由、安全(如 TLS)。
  • Anti-corruption layer (防損層模式) 實現了新舊應用程式之間的外觀,以確保新應用程式的設計不受遺留系統依賴性的限制。使用此模式可確保應用程式的設計不受限於對外部子系統的依賴。 此模式最先由 Eric Evans 在 Domain-Driven Design(域驅動的設計)中描述。
  • Backends for Frontends (用於前端的後端模式) 創建單獨的後端服務,供特定的前端應用程式或介面使用。 要避免為多個介面自定義一個後端時,此模式十分有用。後端為不同類型的客戶端(如桌面和移動設備)創建單獨的後端服務。這樣,單個後端服務不需要處理各種客戶端類型的衝突要求。通過分離客戶特定的問題,這種模式可以幫助保持每個微服務的簡單性。
  • Bulkhead(隔艙模式)之所以稱為“隔艙”(Bulkhead),是因為它類似於船體的分段區。 如果船體受到破壞,只有受損的分段才會進水,從而可以防止船隻下沉。為每個工作負載或服務隔離關鍵資源,例如連接池,記憶體和CPU。通過使用隔板,單個工作負載(或服務)無法消耗所有資源,使其他資源匱乏。此模式通過防止由一個服務引起的級聯故障來提高系統的彈性。
  • Gateway Aggregation(網關聚合模式)使用網關可將多個單獨請求聚合成一個請求。 當客戶端必須向不同的後端系統發出多個調用來執行某項操作時,此模式非常有用使用網關可將多個單獨請求聚合成一個請求。 當客戶端必須向不同的後端系統發出多個調用來執行某項操作時,此模式非常有用。
  • Gateway Offloading(網關卸載方式)將共用或專用服務功能卸載到網關代理。 此模式可以通過將共用服務功能(如 SSL 證書的使用)從應用程式的其他部分移動到網關,簡化應用程式開發。
  • Gateway Routing(網關路由模式)使用單個終結點將請求路由到多個服務。 如果希望在單個終結點上公開多個服務,並根據請求路由到適當的服務,則此模式非常有用。
  • Sidecar(挎鬥模式 )將應用程式的幫助程式組件部署為單獨的容器或進程,以提供隔離和封裝。使用此模式還可以使用異構組件和技術來構建應用程式。
  • Strangler(絞殺者模式)通過將特定的功能片斷逐漸取代為新的應用程式和服務,逐步遷移舊系統。 隨著舊系統的功能被替換,新系統最終將取代舊系統的所有功能,抑制舊系統並使其停用。通過逐步用新服務替換特定功能來支持增量遷移。

              微服務的目標是通過將應用程式分解為可以獨立部署的小型自治服務來提高應用程式版本的速度。微服務架構也帶來了一些挑戰,這些模式可以幫助緩解這些挑戰。設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。當然微服務中的雲設計模式也是對微服務中普遍存在的問題,所提出的解決方案。我們是工程師,不是碼農,所以小伙伴們,學習一個東西一定要深入一點,勿在浮沙築高層,共勉!

             引用:https://azure.microsoft.com/zh-cn/blog/design-patterns-for-microservices/

 


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

-Advertisement-
Play Games
更多相關文章
  • 在上一篇 學習安卓開發[2] 在Activity中托管Fragment 中瞭解了使用Fragment的好處和方法,本次記錄的是在進行列表展示時RecyclerView的使用。 RecyclerView介紹 RecyclerView及其相關類 RecyclerView的應用 引入RecyclerVie ...
  • Reflect Reflect 對象和Proxy對象一樣, 為操作對象提供了新的API。 為什麼使用 Reflect的方式來操作對象? 將 Object 對象上一些明顯屬於內部的方法放到 Reflect對象上。比如 也可以使用 修改某些 Object 方法的返回結果 讓 Object 操作都變成函數 ...
  • [1]Sprite [2]Label [3]Spine [4]Button [5]Audio ...
  • tang先生 Django~1 一 什麼是web框架? 框架,即framework,特指為解決一個開放性問題而設計的具有一定約束性的支撐結構,使用框架可以幫你快速開發特定的系統,簡單的說,就是你用別人搭建好的舞臺來做表演。 對於所有的Web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實 ...
  • 什麼是ui-router ui-router是AngularUI庫最有用的組件之一(AngularUI庫由AngularJS社區構建)。它是一個第三方路由框架,允許通過狀態機制組織介面,而不是簡單的URL路由。 什麼是ocLoayLoad ocLoayLoad是AngularJS的模塊按需載入器。按 ...
  • setInterval()和setTimeout()方法都是js原生的定時方法,當然它們兩個的作用也是不同的,並且最近在做上下滾動公告欄的時候,發現了setInterval()非常令人抓狂的問題,那就是用setInterval()做的定時滾動會隨著瀏覽器頁面切換變得無法控制!為什麼會說無法控制呢,因 ...
  • @[toc] 轉載請註明出處 初識jQuery 為什麼要使用jQuery? 1.什麼是jquery? jQuery是js的一個庫,簡化了js代碼的書寫(註:jQuery語句中用逗號分隔各個css,因為一條css對應一個對象屬性,對象屬性之間是用逗號分隔而非分號) 舉例: 例1:簡化了獲取元素的語句 ...
  • 本文針對react navigation^3.0.0版本,版本不對的話,請不要看本文,直接看官方英文文檔 ​ 最近一直在學習RN,沒找到什麼好的視頻,所以一直看文檔,一路上來雖然遇到一些亂七八糟的bug,但是能比較友好的解決掉 直到我使用 ,這個官方文檔上說 的導航組件,搞的我心態爆照,調試了一下午 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...