微服務設計模式(上)
女主宣言
本文旨在讓大家瞭解微服務體系結構的設計模式以克服微服務所帶來的挑戰。文章會分為上下兩篇,上篇包含1、分解模式2、整合模式,下篇包含3、資料庫模式4、可觀測性模式5、橫切關注點的模式。
PS:豐富的一線技術、多元化的表現形式,盡在“HULK一線技術雜談”,點關注哦!
微服務體系結構已經成為現代應用程式開發的實際選擇。雖然它解決了某些問題,但它不是一顆銀彈。它也有一些缺點,在使用這種體系結構時,有許多問題必須解決。這就需要學習這些問題中的通用模式,並使用可重用的解決方案來解決它們。因此,需要討論微服務的設計模式。在深入研究設計模式之前,我們需要了解微服務體系結構的構建原則:
可伸縮性
可用性
彈性
獨立的,自主的
分散治理
故障隔離
自動預配
透過DevOps持續交付
應用所有這些原則帶來了一些挑戰和問題。讓我們討論這些問題和它們的解決方案。
1 分解模式
a、根據業務能力分解
問題
微服務就是讓服務鬆散耦合,應用單一職責原則。然而,將應用程式分解成更小的部分必須邏輯地完成。如何將應用程式分解為小型服務?
解決方案
一種策略是根據業務能力分解。業務能力是企業為了產生價值而做的事情。給定業務的功能集取決於業務型別。例如,保險公司的能力通常包括銷售、營銷、承保、理賠處理、開票、合規等。每個業務能力都可以被看作是一種服務,只是它是面向業務的,而非技術性的。
b、根據子域分解
問題
使用業務功能分解應用程式可能是一個很好的開始,但是您會遇到所謂的“上帝類”,它們不容易分解。這些類在多個服務中很常見。例如,Order類將用於Order管理、Order收入、Order交貨等等。我們如何分解它們?
解決方案
對於“上帝類”問題,DDD(領域-驅動 設計)起到了拯救作用。它使用子域和有界上下文概念來解決這個問題。DDD將為企業建立的整個領域模型分解為子領域。每個子域都有一個模型,該模型的作用域稱為有界上下文。每個微服務都將圍繞有界上下文開發。
備註:識別子域並不是一項簡單的任務。這需要對業務有所瞭解。與業務功能一樣,子領域是透過分析業務及其組織結構以及識別不同的專業領域來識別的。
c、扼殺者模式
問題
到目前為止,我們討論的設計模式是對greenfield的應用程式進行分解,但是我們所做的80%的工作是對brownfield應用程式進行分解,brownfield應用程式是大型的、單一的應用程式。將上面所有的設計模式應用到它們上是很困難的,因為將它們分解成更小的部分同時使用是一個很大的任務。
解決方案
勒死人的模式來了。勒死人的模式是基於一種藤蔓的類比,藤蔓纏繞著一棵樹。這個解決方案很適合web應用程式,在web應用程式中,一個呼叫來回進行,對於每個URI呼叫,可以將服務分解為不同的域並作為獨立的服務託管。我們的想法是一次做一個領域。這將建立兩個獨立的應用程式,它們並排放在同一個URI空間中。最終,新重構的應用程式將“扼殺”或替換原始應用程式,直到您最終可以關閉單片應用程式為止。
2 整合模式
a、API閘道器模式
問題
當應用程式分解為更小的微服務時,有幾個問題需要解決:
如何呼叫多個微型服務來提取生產者資訊。
在不同的通道(如桌面、移動裝置和平板電腦)上,應用程式需要不同的資料來響應相同的後端服務,因為UI可能不同。
不同的使用者可能需要不同格式的可重用微服務的響應。誰將進行資料轉換或欄位操作?
如何處理不同型別的協議,有些協議可能不受生產者微服務的支援。
解決方案
API閘道器有助於解決微服務實現引起的許多問題,而不僅僅侷限於上述問題。
API閘道器是任何微服務呼叫的單一入口點。
它可以作為代理服務將請求路由到相關的微服務,抽象生產者的詳細資訊。
它可以將請求分散到多個服務,並聚合結果傳送回消費者。
一刀切的api不能解決所有使用者的需求;該解決方案可以為每種特定型別的客戶機建立細粒度的API。
它還可以將協議請求(例如AMQP)轉換為另一個協議(例如HTTP),反之亦然,以便生產者和消費者能夠處理它。
它還可以減輕微服務的身份驗證/授權責任。
b、聚合器模式
問題
我們已經討論瞭如何解決API閘道器模式中的聚合資料問題。然而,我們將在這裡整體地討論它。在將業務功能分解為幾個較小的邏輯程式碼片段時,有必要考慮如何協作每個服務返回的資料。這種責任不能留給消費者,因為那時它可能需要了解生產者應用程式的內部實現。
解決方案
聚合器模式有助於解決這個問題。它討論了我們如何聚合來自不同服務的資料,然後將最終的響應傳送給消費者。這可以透過兩種方式實現:
複合微服務將呼叫所有所需的微服務,合併資料,並在傳送回之前轉換資料。
API閘道器還可以將請求劃分為多個微服務,並在將資料傳送給使用者之前聚合資料。
如果要應用任何業務邏輯,建議選擇組合微服務。否則,API閘道器就是已建立的解決方案。
c、客戶端UI組合模式
問題
當透過分解業務功能/子域來開發服務時,負責使用者體驗的服務必須從多個微服務中提取資料。在單片世界中,從UI到後端服務只有一個呼叫來檢索所有資料並重新整理/提交UI頁面。然而,現在情況就不一樣了。我們需要知道怎麼做。
解決方案
使用微服務,UI必須被設計成具有螢幕/頁面的多個部分/區域的骨架。每個部分將呼叫單個後端微服務來提取資料。這被稱為組合特定於服務的UI元件。像AngularJS和ReactJS這樣的框架很容易做到。這些螢幕稱為單頁應用程式(SPA)。這使得應用程式能夠重新整理螢幕的特定區域,而不是整個頁面。
總結
在本篇中,我們給大家介紹了分解模式和整合模式,在下篇文章中將會給大家帶來資料庫模式、可觀測性模式和橫切關注點的模式。希望對大家在理解微服務方面有所幫助。
HULK一線技術雜談
由360雲平臺團隊打造的技術分享公眾號,內容涉及雲端計算、資料庫、大資料、監控、泛前端、自動化測試等眾多技術領域,透過夯實的技術積累和豐富的一線實戰經驗,為你帶來最有料的技術分享
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555491/viewspace-2220626/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微服務設計模式(下)微服務設計模式
- 微服務架構和設計模式 - DZone微服務微服務架構設計模式
- 微服務解耦設計模式 - Neeraj微服務解耦設計模式
- 架構設計思想-微服務架構設計模式架構微服務設計模式
- 微服務中的Sidecar設計模式解析微服務IDE設計模式
- 一起玩轉微服務(3)——微服務架構設計模式微服務架構設計模式
- [翻譯]微服務設計模式 - 3. 按業務功能拆分模式微服務設計模式
- 微服務設計中的API閘道器模式微服務API模式
- 《微服務架構設計模式》讀書筆記 | 第9章 微服務架構中的測試策略(上)微服務架構設計模式筆記
- 架構設計:微服務模式下,實現灰度釋出模式架構微服務模式
- [翻譯]微服務設計模式 - 1. 單體應用模式微服務設計模式
- 《微服務架構設計模式》讀書筆記 | 第5章 微服務架構中的業務邏輯設計微服務架構設計模式筆記
- 前端微服務化解決方案3-工程設計模式前端微服務設計模式
- 微服務設計指南微服務
- Redis如何簡化實現微服務的設計模式 – thenewstackRedis微服務設計模式
- 《微服務架構設計模式》讀書筆記 | 第8章 外部API模式微服務架構設計模式筆記API
- Salesforce構建可觀察微服務的五種設計模式Salesforce微服務設計模式
- 架構設計 | 基於Seata中介軟體,微服務模式下事務管理架構微服務模式
- [翻譯]微服務設計模式 - 5. 服務發現 - 服務端服務發現微服務設計模式服務端
- java springcloud 微服務設計方案JavaSpringGCCloud微服務
- 微服務可用性設計微服務
- 使用SpringBoot+PostgreSQL物化檢視實現微服務設計模式 - vinsguruSpring BootSQL微服務設計模式
- 設計模式-觀察者模式上設計模式
- 《微服務架構設計模式》讀書筆記 | 第3章 微服務架構中的程式間通訊微服務架構設計模式筆記
- 《微服務架構設計模式》讀書筆記 | 第7章 在微服務架構中實現查詢微服務架構設計模式筆記
- 微服務設計學習(一)關於微服務和如何建模服務微服務
- 《微服務架構設計模式》讀書筆記 | 第4章 使用Saga管理事務微服務架構設計模式筆記
- 《微服務架構設計模式》讀書筆記 | 第2章 服務的拆分策略微服務架構設計模式筆記
- 設計微服務的最佳實踐微服務
- spring cloud微服務架構設計SpringCloud微服務架構
- 一. Go微服務--隔離設計Go微服務
- 微服務系列 2:微服務化框架的模型和治理能力設計微服務框架模型
- 服務端指南 | 微服務初級設計指南服務端微服務
- 構建微服務的三種重要模式 - DZone微服務微服務模式
- 16種JavaScript設計模式(上)JavaScript設計模式
- SACC2018:微服務架構設計微服務架構
- 微服務領域驅動設計 - semaphoreci微服務
- 設計模式 | Catalog設計模式,抵禦業務方需求變動設計模式