日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 架構師社區(qū)
[導讀]來源:Java日知錄軟件設計模式是解決軟件設計中常見問題的通用、可復用的解決方案。設計模式讓我們可以分享通用詞匯并使用經實戰(zhàn)檢驗的方案,以免重復造輪子。現(xiàn)在,我將介紹一系列設計模式來實現(xiàn)這些最佳實踐。微服務架構的設計模式獨享數(shù)據庫(DatabaseperMicroservice)...

來源:Java日知錄軟件設計模式是解決軟件設計中常見問題的通用、可復用的解決方案。設計模式讓我們可以分享通用詞匯并使用經實戰(zhàn)檢驗的方案,以免重復造輪子。現(xiàn)在,我將介紹一系列設計模式來實現(xiàn)這些最佳實踐。

微服務架構的設計模式

獨享數(shù)據庫(Database per Microservice)

當一家公司將大型單體系統(tǒng)替換成一組微服務,首先要面臨的最重要決策是關于數(shù)據庫。單體架構會使用大型中央數(shù)據庫。即使轉移到微服務架構許多架構師仍傾向于保持數(shù)據庫不變。雖然有一些短期收益,但它卻是反模式的,特別是在大規(guī)模系統(tǒng)中,微服務將在數(shù)據庫層嚴重耦合,整個遷移到微服務的目標都將面臨失?。ɡ?,團隊授權、獨立開發(fā)等問題)。

更好的方法是為每個微服務提供自己的數(shù)據存儲,這樣服務之間在數(shù)據庫層就不存在強耦合。這里我使用數(shù)據庫這一術語來表示邏輯上的數(shù)據隔離,也就是說微服務可以共享物理數(shù)據庫,但應該使用分開的數(shù)據結構、集合或者表,這還將有助于確保微服務是按照領域驅動設計的方法正確拆分的。

微服務架構及其最重要的?10?個設計模式!
圖片
優(yōu)點

  • 數(shù)據由服務完全所有。

  • 服務的開發(fā)團隊之間耦合度降低。

缺點

  • 服務間的數(shù)據共享變得更有挑戰(zhàn)性。

  • 在應用范圍的保證 ACID 事務變得困難許多。

  • 細心設計如何拆分單體數(shù)據庫是一項極具挑戰(zhàn)的任務。

何時使用獨享數(shù)據庫

  • 在大型企業(yè)應用程序中。

  • 當團隊需要完全把控微服務以實現(xiàn)開發(fā)規(guī)模擴展和速度提升。

何時不宜使用獨享數(shù)據庫

  • 在小規(guī)模應用中。

  • 如果是單個團隊開發(fā)所有微服務。

可用技術示例

所有 SQL、 NoSQL 數(shù)據庫都提供數(shù)據的邏輯分離(例如,單獨的表、集合、結構、數(shù)據庫)。

延伸閱讀

微服務模式:獨享數(shù)據庫
https://microservices.io/patterns/data/database-per-service.html

分布式數(shù)據存儲
https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/distributed-data

事件源(Event Sourcing)

在微服務架構中,特別使用獨享數(shù)據庫時,微服務之間需要進行數(shù)據交換。對于彈性高可伸縮的和可容錯的系統(tǒng),它們應該通過交換事件進行異步通信。在這種情況,您可能希望進行類似更新數(shù)據庫并發(fā)送消息這樣的原子操作,如果在大數(shù)據量的分布式場景使用關系數(shù)據庫,您將無法使用兩階段鎖協(xié)議(2PL),因為它無法伸縮。而 NoSQL 數(shù)據庫因為大多不支持兩階段鎖協(xié)議甚至無法實現(xiàn)分布式事務。

在這些場景,可以基于事件的架構使用事件源模式。在傳統(tǒng)數(shù)據庫中,直接存儲的是業(yè)務實體的當前“狀態(tài)”,而在事件源中任何“狀態(tài)”更新事件或其他重要事件都會被存儲起來,而不是直接存儲實體本身。這意味著業(yè)務實體的所有更改將被保存為一系列不可變的事件。因為數(shù)據是作為一系列事件存儲的,而非直接更新存儲,所以各項服務可以通過重放事件存儲中的事件來計算出所需的數(shù)據狀態(tài)。

微服務架構及其最重要的?10?個設計模式!
圖片
優(yōu)點

  • 為高可伸縮系統(tǒng)提供原子性操作。

  • 自動記錄實體變更歷史,包括時序回溯功能。

  • 松耦合和事件驅動的微服務。

缺點

  • 從事件存儲中讀取實體成為新的挑戰(zhàn),通常需要額外的數(shù)據存儲(CQRS 模式)。

  • 系統(tǒng)整體復雜性增加了,通常需要領域驅動設計。

  • 系統(tǒng)需要處理事件重復(冪等)或丟失。

  • 變更事件結構成為新的挑戰(zhàn)。

何時使用事件源

  • 使用關系數(shù)據庫的、高可伸縮的事務型系統(tǒng)。

  • 使用 NoSQL 數(shù)據庫的事務型系統(tǒng)。

  • 彈性高可伸縮微服務架構。

  • 典型的消息驅動或事件驅動系統(tǒng)(電子商務、預訂和預約系統(tǒng))。

何時不宜使用事件源

  • 使用 SQL 數(shù)據庫的低可伸縮性事務型系統(tǒng)

  • 在服務可以同步交換數(shù)據(例如,通過 API)的簡單微服務架構中。

可用技術示例

事件存儲:EventStoreDB, Apache Kafka, Confluent Cloud, AWS Kinesis, Azure Event Hub, GCP Pub/Sub, Azure Cosmos DB, MongoDB, Cassandra. Amazon DynamoDB

框架:?Lagom, Akka, Spring, akkatecture, Axon,Eventuate

延伸閱讀

事件驅動
https://martinfowler.com/eaaDev/EventSourcing.html

事件驅動模式-云設計模式
https://docs.microsoft.com/en-us/azure/architecture/patterns/event-sourcing

微服務模式:事件驅動
https://microservices.io/patterns/data/event-sourcing.html

命令和查詢職責分離(CQRS)

如果我們使用事件源,那么從事件存儲中讀取數(shù)據就變得困難了。要從數(shù)據存儲中獲取實體,我們需要處理所有的實體事件。有時我們對讀寫操作還會有不同的一致性和吞吐量要求。

這種情況,我們可以使用 CQRS 模式。在該模式中,系統(tǒng)的數(shù)據修改部分(命令)與數(shù)據讀取部分(查詢)是分離的。而 CQRS 模式有兩種容易令人混淆的模式,分別是簡單的和高級的。

在其簡單形式中,不同實體或 ORM 模型被用于讀寫操作,如下所示:

微服務架構及其最重要的?10?個設計模式!
圖片
它有助于強化單一職責原則和分離關注點,從而實現(xiàn)更簡潔的設計。

在其高級形式中,會有不同的數(shù)據存儲用于讀寫操作。高級的 CQRS 通常結合事件源模式。根據不同情況,會使用不同類型的寫數(shù)據存儲和讀數(shù)據存儲。寫數(shù)據存儲是“記錄的系統(tǒng)”,也就是整個系統(tǒng)的核心源頭。

微服務架構及其最重要的?10?個設計模式!
圖片
對于讀頻繁的應用程序或微服務架構,OLTP 數(shù)據庫(任何提供 ACID 事務保證的關系或非關系數(shù)據庫)或分布式消息系統(tǒng)都可以被用作寫存儲。對于寫頻繁的應用程序(寫操作高可伸縮性和大吞吐量),需要使用寫可水平伸縮的數(shù)據庫(如全球托管的公共云數(shù)據庫)。標準化的數(shù)據則保存在寫數(shù)據存儲中。

對搜索(例如 Apache Solr、Elasticsearch)或讀操作(KV 數(shù)據庫、文檔數(shù)據庫)進行優(yōu)化的非關系數(shù)據庫常被用作讀存儲。許多情況會在需要 SQL 查詢的地方使用讀可伸縮的關系數(shù)據庫。非標準化和特殊優(yōu)化過的數(shù)據則保存在讀存儲中。

數(shù)據是從寫存儲異步復制到讀存儲中的,所以讀存儲和寫存儲之間會有延遲,但最終是一致的。

優(yōu)點

  • 在事件驅動的微服務中數(shù)據讀取速度更快。

  • 數(shù)據的高可用性。

  • 讀寫系統(tǒng)可獨立擴展。

缺點

  • 讀數(shù)據存儲是弱一致性的(最終一致性)。

  • 整個系統(tǒng)的復雜性增加了,混亂的 CQRS 會顯著危害整個項目。

何時使用 CQRS

  • 在高可擴展的微服務架構中使用事件源。

  • 在復雜領域模型中,讀操作需要同時查詢多個數(shù)據存儲。

  • 在讀寫操作負載差異明顯的系統(tǒng)中。

何時不宜使用 CQRS

  • 在沒有必要存儲大量事件的微服務架構中,用事件存儲快照來計算實體狀態(tài)是一個更好的選擇。

  • 在讀寫操作負載相近的系統(tǒng)中。

可用技術示例

寫存儲:EventStoreDB, Apache Kafka, Confluent Cloud, AWS Kinesis, Azure Event Hub, GCP Pub/Sub, Azure Cosmos DB, MongoDB, Cassandra. Amazon DynamoDB

讀存儲: Elastic Search, Solr, Cloud Spanner, Amazon Aurora, Azure Cosmos DB, Neo4j

框架: Lagom, Akka, Spring, akkatecture, Axon, Eventuate

延伸閱讀

bliki:CQRS
https://martinfowler.com/bliki/CQRS.html

CQRS模式 - Azure 架構中心
https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs

微服務模式:命令和查詢職責分離(CQRS)
https://microservices.io/patterns/data/cqrs.html

Saga

如果微服務使用獨享數(shù)據庫,那么通過分布式事務管理一致性是一個巨大的挑戰(zhàn)。你無法使用傳統(tǒng)的兩階段提交協(xié)議,因為它要么不可伸縮(關系數(shù)據庫),要么不被支持(多數(shù)非關系數(shù)據庫)。

但您還是可以在微服務架構中使用 Saga 模式實現(xiàn)分布式事務。Saga 是 1987 年開發(fā)的一種古老模式,是關系數(shù)據庫中關于大事務的一個替代概念。但這種模式的一種現(xiàn)代變種對分布式事務也非常有效。Saga 模式是一個本地事務序列,其每個事務在一個單獨的微服務內更新數(shù)據存儲并發(fā)布一個事件或消息。Saga 中的首個事務是由外部請求(事件或動作)初始化的,一旦本地事務完成(數(shù)據已保存在數(shù)據存儲且消息或事件已發(fā)布),那么發(fā)布的消息或事件則會觸發(fā) Saga 中的下一個本地事務。

微服務架構及其最重要的?10?個設計模式!
圖片
如果本地事務失敗,Saga 將執(zhí)行一系列補償事務來回滾前面本地事務的更改。

Saga 事務協(xié)調管理主要有兩種形式:

  • 事件編排 Choreography:分散協(xié)調,每個微服務生產并監(jiān)聽其他微服務的事件或消息然后決定是否執(zhí)行某個動作。

  • 命令編排 Orchestration:集中協(xié)調,由一個協(xié)調器告訴參與的微服務哪個本地事務需要執(zhí)行。

優(yōu)點

  • 為高可伸縮或松耦合的、事件驅動的微服務架構提供一致性事務。

  • 為使用了不支持 2PC 的非關系數(shù)據庫的微服務架構提供一致性事務。

缺點

  • 需要處理瞬時故障,并且提供等冪性。

  • 難以調試,而且復雜性隨著微服務數(shù)量增加而增加。

何時使用 Saga

  • 在使用了事件源的高可伸縮、松耦合的微服務中。

  • 在使用了分布式非關系數(shù)據庫的系統(tǒng)中。

何時不宜使用 Saga

  • 使用關系數(shù)據庫的低可伸縮性事務型系統(tǒng)。

  • 在服務間存在循環(huán)依賴的系統(tǒng)中。

可用技術示例

Axon, Eventuate, Narayana

延伸閱讀

Saga分布式事務-Azure設計模式
https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga

微服務模式:Sagas
https://microservices.io/patterns/data/saga.html

Saga 模式:微服務中的應用程序事務
https://blog.couchbase.com/saga-pattern-implement-business-transactions-using-microservices-part/

面向前端的后端 (BFF)

在現(xiàn)代商業(yè)應用開發(fā),特別是微服務架構中,前后端應用是分離和獨立的服務,它們通過 API 或 GraphQL 連接。如果應用程序還有移動 App 客戶端,那么 Web 端和移動客戶端使用相同的后端微服務就會出現(xiàn)問題。因為移動客戶端和 Web 客戶端有不同的屏幕尺寸、顯示屏、性能、能耗和網絡帶寬,它們的 API 需求不同。

面向前端的后端模式適用于需要為特殊 UI 定制單獨后端的場景。它還提供了其他優(yōu)勢,比如作為下游微服務的封裝,從而減少 UI 和下游微服務之間的頻繁通信。此外,在高安全要求的場景中,BFF 為部署在 DMZ 網絡中的下游微服務提供了更高的安全性。

微服務架構及其最重要的?10?個設計模式!
圖片
優(yōu)點

  • 分離 BFF 之間的關注點,使得我們可以為具體的 UI 優(yōu)化他們。

  • 提供更高的安全性。

  • 減少 UI 和下游微服務之間頻繁的通信。

缺點

  • BFF 之間代碼重復。

  • 大量的 BFF 用于其他用戶界面(例如,智能電視,Web,移動端,PC 桌面版)。

  • 需要仔細的設計和實現(xiàn),BFF 不應該包含任何業(yè)務邏輯,而應只包含特定客戶端邏輯和行為。

何時使用 BFF

  • 如果應用程序有多個含不同 API 需求的 UI。

  • 出于安全需要,UI 和下游微服務之間需要額外的層。

  • 如果在 UI 開發(fā)中使用微前端。

何時不宜使用 BFF

  • 如果應用程序雖有多個 UI,但使用的 API 相同。

  • 如果核心微服務不是部署在 DMZ 網絡中。

可用技術示例

任何后端框架(Node.js,Spring,Django,Laravel,F(xiàn)lask,Play,…)都能支持。

延伸閱讀

Sam Newman - 面向前端的后端
https://samnewman.io/patterns/architectural/bff/

面向前端的后端模式 - 云設計模式
https://docs.microsoft.com/en-us/azure/architecture/patterns/backends-for-frontends

微服務模式:API 網關模式
https://microservices.io/patterns/apigateway.html

API 網關

在微服務架構中,UI 通常連接多個微服務。如果微服務是細粒度的(FaaS) ,那么客戶端可能需要連接非常多的微服務,這將變得繁雜和具有挑戰(zhàn)性。此外,這些服務包括它們的 API 還將不斷進化。大型企業(yè)還希望能有其他橫切關注點(SSL 終止、身份驗證、授權、節(jié)流、日志記錄等)。

一個解決這些問題的可行方法是使用 API 網關。API 網關位于客戶端 APP 和后端微服務之間充當 facade,它可以是反向代理,將客戶端請求路由到適當?shù)暮蠖宋⒎?。它還支持將客戶端請求扇出到多個微服務,然后將響應聚合后返回給客戶端。它還支持必要的橫切關注點。

微服務架構及其最重要的?10?個設計模式!
圖片
優(yōu)點

  • 在前端和后端服務之間提供松耦合。

  • 減少客戶端和微服務之間的調用次數(shù)。

  • 通過 SSL 終端、身份驗證和授權實現(xiàn)高安全性。

  • 集中管理的橫切關注點,例如,日志記錄和監(jiān)視、節(jié)流、負載平衡。

缺點

  • 可能導致微服務架構中的單點故障。

  • 額外的網絡調用帶來的延遲增加。

  • 如果不進行擴展,它們很容易成為整個企業(yè)應用的瓶頸。

  • 額外的維護和開發(fā)費用。

何時使用 API 網關

  • 在復雜的微服務架構中,它幾乎是必須的。

  • 在大型企業(yè)中,API 網關是中心化安全性和橫切關注點的必要工具。

何時不宜使用 API 網關

  • 在安全和集中管理不是最優(yōu)先要素的私人項目或小公司中。

  • 如果微服務的數(shù)量相當少。

可用技術示例

Amazon API 網關, Azure API 管理, Apigee, Kong, WSO2 API 管理器

延伸閱讀

微服務模式:API 網關模式
https://microservices.io/patterns/apigateway.html

API 網關-Azure 架構中心
https://docs.microsoft.com/en-us/azure/architecture/microservices/design/gateway

Strangler

如果想在運行中的項目中使用微服務架構,我們需要將遺留的或現(xiàn)有的單體應用遷移到微服務。將現(xiàn)有的大型在線單體應用程序遷移到微服務是相當有挑戰(zhàn)性的,因為這可能破壞應用程序的可用性。

一個解決方案是使用 Strangler 模式。Strangler 模式意味著通過使用新的微服務逐步替換特定功能,將單體應用程序增量地遷移到微服務架構。此外,新功能只在微服務中添加,而不再添加到遺留的單體應用中。然后配置一個 Facade (API 網關)來路由遺留單體應用和微服務間的請求。當某個功能從單體應用遷移到微服務,F(xiàn)acade 就會攔截客戶端請求并路由到新的微服務。一旦遷移了所有的功能,遺留單體應用程序就會被“扼殺(Strangler)”,即退役。

微服務架構及其最重要的?10?個設計模式!
圖片
*Md Kamaruzzaman *的 Strangler

優(yōu)點

  • 安全的遷移單體應用程序到微服務。

  • 可以并行地遷移已有功能和開發(fā)新功能。

  • 遷移過程可以更好把控節(jié)奏。

缺點

  • 在現(xiàn)有的單體應用服務和新的微服務之間共享數(shù)據存儲變得具有挑戰(zhàn)性。

  • 添加 Facade (API 網關)將增加系統(tǒng)延遲。

  • 端到端測試變得困難。

何時使用 Strangler

  • 將大型后端單體應用程序的增量遷移到微服務。
何時不宜使用 Strangler

  • 如果后端單體應用很小,那么全量替換會更好。

  • 如果無法攔截客戶端對遺留的單體應用程序的請求。

可用技術示例

API 網關后端應用框架。

延伸閱讀

bliki:StranglerFig 應用程序
https://martinfowler.com/bliki/StranglerFigApplication.html

Strangler 模式 - 云設計模式
https://docs.microsoft.com/en-us/azure/architecture/patterns/strangler-fig

微服務模式:Strangler 應用程序
https://microservices.io/patterns/refactoring/strangler-application.html

斷路器

在微服務架構中,微服務通過同步調用其他服務來滿足業(yè)務需求。服務調用會由于瞬時故障(網絡連接緩慢、超時或暫時不可用) 導致失敗,這種情況重試可以解決問題。然而,如果出現(xiàn)了嚴重問題(微服務完全失?。敲次⒎諏㈤L時間不可用,這時重試沒有意義且浪費寶貴的資源(線程被阻塞,CPU 周期被浪費)。此外,一個服務的故障還會引發(fā)整個應用系統(tǒng)的級聯(lián)故障。這時快速失敗是一種更好的方法。

在這種情況,可以使用斷路器模式挽救。一個微服務通過代理請求另一個微服務,其工作原理類似于電氣斷路器,代理通過統(tǒng)計最近發(fā)生的故障數(shù)量,并使用它來決定是繼續(xù)請求還是簡單的直接返回異常。

微服務架構及其最重要的?10?個設計模式!
圖片
*Md Kamaruzzaman *的斷路器

斷路器可以有以下三種狀態(tài):

  • 關閉:斷路器將請求路由到微服務,并統(tǒng)計給定時段內的故障數(shù)量,如果超過閾值,它就會觸發(fā)并進入打開狀態(tài)。

  • 打開:來自微服務的請求會快速失敗并返回異常。在超時后,斷路器進入半開啟狀態(tài)。

  • 半開:只有有限數(shù)量的微服務請求被允許通過并進行調用。如果這些請求成功,斷路器將進入閉合狀態(tài)。如果任何請求失敗,斷路器則會進入開啟狀態(tài)。

優(yōu)點

  • 提高微服務架構的容錯性和彈性。

  • 阻止引發(fā)其他微服務的級聯(lián)故障。

缺點

  • 需要復雜的異常處理。

  • 日志和監(jiān)控。

  • 應該支持人工復位。

何時使用斷路器

  • 在微服務間使用同步通信的緊耦合的微服務架構中。

  • 如果微服務依賴多個其他微服務。

何時不宜使用斷路器

  • 松耦合、事件驅動的微服務架構。

  • 如果微服務不依賴于其他微服務。

可用技術示例

API 網關,服務網格,各種斷路器庫(Hystrix, Reselience4J, Polly)。

延伸閱讀

bliki:斷路器
https://martinfowler.com/bliki/CircuitBreaker.html

斷路器模式 - 云設計模式
https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker

微型服務模式:斷路器
https://microservices.io/patterns/reliability/circuit-breaker.html

外部化配置

每個業(yè)務應用都有許多用于各種基礎設施的配置參數(shù)(例如,數(shù)據庫、網絡、連接的服務地址、憑據、證書路徑)。此外在企業(yè)應用程序通常部署在各種運行環(huán)境(Local、 Dev、 Prod)中,實現(xiàn)這些的一個方法是通過內部配置。這是一個致命糟糕實踐,它會導致嚴重的安全風險,因為生產憑證很容易遭到破壞。此外,配置參數(shù)的任何更改都需要重新構建應用程序,這在在微服務架構中會更加嚴峻,因為我們可能擁有數(shù)百個服務。

更好的方法是將所有配置外部化,使得構建過程與運行環(huán)境分離,生產的配置文件只在運行時或通過環(huán)境變量使用,從而最小化了安全風險。

優(yōu)點

  • 生產配置不屬于代碼庫,因而最小化了安全漏洞。

  • 修改配置參數(shù)不需要重新構建應用程序。

缺點

  • 我們需要選擇一個支持外部化配置的框架。
何時使用外部化配置

  • 任何重要的生產應用程序都必須使用外部化配置。
何時不宜使用外部化配置

  • 在驗證概念的開發(fā)中。
可用技術示例

幾乎所有企業(yè)級的現(xiàn)代框架都支持外部化配置。

延伸閱讀

微服務模式:外部化配置
https://microservices.io/patterns/externalized-configuration.html

一次構建,到處運行:外部化你的配置
https://reflectoring.io/externalize-configuration/

消費端驅動的契約測試

在微服務架構中,通常有許多有不同團隊開發(fā)的微服務。這些微型服務協(xié)同工作來滿足業(yè)務需求(例如,客戶請求),并相互進行同步或異步通信。消費端微服務的集成測試具有挑戰(zhàn)性,通常用?TestDouble?以獲得更快、更低成本的測試運行。但是 TestDouble 通常并不能代表真正的微服務提供者,而且如果微服務提供者更改了它的 API 或 消息,那么 TestDouble 將無法確認這些。另一種選擇是進行端到端測試,盡管它在生產之前是強制性的,但卻是脆弱的、緩慢的、昂貴的且不能替代集成測試(Test Pyramid)。

在這方面消費端驅動的契約測試可以幫助我們。在這里,負責消費端微服務的團隊針對特定的服務端微服務,編寫一套包含了其請求和預期響應(同步)或消息(異步)的測試套件,這些測試套件稱為顯式的約定。對于微服務服務端,將其消費端所有約定的測試套件都添加到其自動化測試中。當特定服務端微服務的自動化測試執(zhí)行時,它將一起運行自己的測試和約定的測試并進行驗證。通過這種方式,契約測試可以自動的幫助維護微服務通信的完整性。

優(yōu)點

  • 如果提供程序意外更改 API 或消息,可以被快速的自動發(fā)現(xiàn)。

  • 更少意外、更健壯,特別是包含大量微服務的企業(yè)應用程序。

  • 改善團隊自主性。

缺點

  • 需要額外的工作來開發(fā)和集成微服務服務端的契約測試,因為他們可能使用完全不同的測試工具。

  • 如果契約測試與真實服務情況不匹配,將可能導致生產故障。

何時使用需求驅動的契約測試

  • 在大型企業(yè)業(yè)務應用程序中,通常由不同的團隊開發(fā)不同服務。
何時不宜使用消費端驅動的契約測試

  • 所有微服務由同一團隊負責開發(fā)的小型簡單的應用程序。

  • 如果服務端微服務是相對穩(wěn)定的,并且不處在活躍的開發(fā)狀態(tài)。

可用技術示例

Pact, Postman, Spring Cloud Contract

延伸閱讀

需求驅動契約:一種服務演進模式
https://martinfowler.com/articles/consumerDrivenContracts.html

微服務模式:服務集成契約測試
https://microservices.io/patterns/testing/service-integration-contract-test.html

什么是消費端驅動的契約測試?
https://pactflow.io/what-is-consumer-driven-contract-testing/

總結

在現(xiàn)代大規(guī)模企業(yè)軟件開發(fā)中,微服務架構能夠幫助開發(fā)擴展規(guī)模并帶來很多長期收益。但是微服務架構并不是隨處可用的銀彈,如果應用在錯誤的應用程序類型,微服務架構將弊大于利。希望采用微服務架構的開發(fā)團隊應該遵循最佳實踐,并使用一系列可重用的、久經錘煉的設計模式。

微服務架構中至關重要的設計模式是獨享數(shù)據庫。實現(xiàn)這種設計模式具有挑戰(zhàn)性,需要其他幾種密切相關的設計模式(事件驅動、 CQRS、 Saga)來支持。在具有多個客戶端(Web、 Mobile、 Desktop、 Smart Devices)的典型業(yè)務應用程序中,客戶端和微服務之間的通信量可能是很大的,并且需要統(tǒng)一的安全控制,在這種情況面向前端的后端和?API 網關的設計非常有用。此外,斷路器模式可以大大地幫助應對這類應用程序的錯誤處理場景。遷移遺留的單體應用到微服務是極具挑戰(zhàn)性的,而?Strangler?模式可以幫助做到這點。消費端驅動的契約測試是微服務集成測試的基礎模式。另外外部化配置是任何現(xiàn)代化應用程序開發(fā)中的一種必備模式。

這個系列并不全面,在實際情況中您可能需要其他的設計模式,但這個系列能為您提供一個關于微服務架構設計模式的極好介紹。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉