微服務領域的軟體架構
在討論微服務時,經常出現有關軟體架構的問題。許多微服務的新手不確定如何討論架構以及如何做出決策。本文將解答這些問題,並分享一些其他建議。
整個系統的高階檢視
首先,無論您決定什麼是處理架構決策的好方法,您都需要知道您的系統是什麼樣的。
我從事過一些專案,其中真正的架構是“部落知識”,從一組開發人員傳遞到另一組開發人員,以及最新的高階邏輯架構圖是一個貼在牆上的系統。
為了真正做出精確的架構決策並重構您的系統,您真的需要知道您正在使用的是什麼。進入“盲目”狀態很容易犯錯並忽視副作用和依賴性。
我的第一個建議是,無論你決定什麼 - 首先要在建立高階邏輯架構圖方面付出一些努力。理想情況下,您還可以為資料流,安全性和系統的其他重要方面製作一些圖表。
使用圖表工作可能看起來像是一件苦差事,所以請確保與那些對團隊有重要且真正有用的人一起工作。
架構選擇
是什麼讓微服務系統的架構更難以討論?我相信這將是這兩件事:
- 快速變化
- 每一步都有很多選擇
隨著每一步的選擇數量增加,你不能只相信自己的運氣而不去考慮細枝末節。此外,隨著開發的快速推進,你應該遠離TOGAF等類似的想法。(根據我的拙見,你應該遠離TOGAF)。
使用架構決策記錄作為系統設計工具
架構決定(AD)是一種軟體設計選擇,針對功能性或非功能性的需求進行的選擇設計。(ADR GitHub組織的主頁)
ADR並不是全新的--Michael Nygard已經在2011年的部落格文章中對它們進行了描述,但我僅在2018年與他們聯絡。在2002年,ThoughtWorks將其作為技術採用雷達列為ADOPT級技術。
這整個想法是什麼?有不同的方法,但它大致歸結為:
- 對於您將採取的每個建築決策(AD),請遵循此流程。
- 對於每個AD,使用模板記錄:
- 上下文
- 動機
- 決策
- 狀態
- 後果
- 上述組合(或其他要求)
- 這些建立ADR(建築決策記錄)
- 將它們儲存在像Git儲存庫,Google文件,Wiki(適用於您的團隊的東西)的地方
這裡的核心思想是保持簡單,保持標準化,保持可訪問性。
我相信對於許多團隊來說,這正是我們所需要的。你想知道決定了什麼,何時以及為什麼。這不需要花費太多精力。
將這個想法更進一步並使用Git-您可以將架構決策作為人們討論的拉取請求。讓更多人參與和聽到的好方法!
分散式系統的穩定性
由於構建像微服務這樣的分散式系統比較難,我建議在引導整體架構和設計時新增一種額外的,更微妙的技術:消費者驅動合約Consumer Driven Contracts(CDC)。
如果您不熟悉這個概念,請檢視 https://docs.pact.io/ ,在那裡您可以閱讀Pact(一種流行的CDC工具)的介紹。
如果您以真正的分散式方式(多個團隊,多個服務)工作,您需要找到一種方法讓其他團隊瞭解對您和您的系統來說具有架構意義的東西。一種方法是使用普通的ADR,另一種方法是使用CDC。
需要傳統的軟體架構師嗎?
我認為很明顯,在使用微服務時,您需要考慮軟體架構。您還應該參與架構決策(在ADR的幫助下)並發展您的API(安全地使用CDC)。
這是否意味著你需要一位架構師?做:
- 更新高階架構圖
- 幫助創造和進步ADR
- 致力於跨團隊的API設計
- 與團隊一起解決更具挑戰性的問題(安全等)
我認為在一個足夠大的專案上這四點可以是一個人的一份全職工作。你不一定需要有這樣頭銜的人,但你肯定需要擁有架構技能的人。
總結
希望本文能夠讓您瞭解如何在微服務系統中實現架構工作。在微服務上工作比僅僅構建巨石單體更困難。這意味著您不僅需要一個優秀的開發團隊,還需要具有敏銳架構直覺和現代輕量級工作的人才能工作!
相關文章
- 軟體架構模式之微服務架構架構模式微服務
- 微服務與領域驅動設計,架構實踐總結微服務架構
- 微服務架構設計基礎之領域驅動設計微服務架構
- 單體架構&微服務架構&中臺服務架構架構微服務
- Java開發架構篇:領域驅動設計架構基於SpringCloud搭建微服務Java架構SpringGCCloud微服務
- 趣頭條-誠招微服務架構/業務架構/中介軟體架構/演算法微服務架構演算法
- 從單體到微服務,軟體架構演化總覽微服務架構
- 架構師之路 - 業務領域建模架構
- 按照業務領域畫資料架構圖 業務架構 資料架構架構
- 阿里架構師,講述基於微服務的軟體架構模式(附資料)阿里架構微服務模式
- 基於COLA架構建立運輸微服務應用和DDD領域建模架構微服務
- 從單體架構到分散式微服務架構的思考架構分散式微服務
- ??微服務架構:軟體開發的革命還是短暫潮流?微服務架構
- DSSA特定領域軟體體系結構
- 微服務2:微服務全景架構微服務架構
- [雲原生微服務架構](十)微服務架構的基礎知識微服務架構
- 單體架構、微服務和無伺服器架構架構微服務伺服器
- redis在微服務領域的貢獻Redis微服務
- 微服務業務架構的探索微服務架構
- 當今微服務盛行之架構師必經之路-領域驅動設計-下微服務架構
- 當今微服務盛行之架構師必經之路-領域驅動設計-上微服務架構
- 單體到微服務架構的涅槃重生之路?微服務架構
- 微服務架構帶來的分散式單體微服務架構分散式
- 微服務架構:構建PHP微服務生態微服務架構PHP
- 關於軟體架構和業務架構的思考架構
- 微服務架構初探微服務架構
- 微服務 dubbospring 架構微服務Spring架構
- 架構設計 | 基於Seata中介軟體,微服務模式下事務管理架構微服務模式
- SOA架構和微服務架構的區別架構微服務
- 奈飛Netflix如何在資料整合API領域使用六邊形架構與Clean架構切換到微服務架構? - Netflix TechBlogAPI架構微服務
- 架構之:微服務架構漫談架構微服務
- 架構演進之「微服務架構」架構微服務
- 微服務學習與思考(03):微服務總體架構圖解微服務架構圖解
- 微服務不是全部,只是特定領域的子集微服務
- 微服務架構:拆分單體應用的難點微服務架構
- 架構之:微服務和單體服務之爭架構微服務
- 微服務架構(一):什麼是微服務微服務架構
- 服務架構學習與思考(12):從單體架構到微服務架構的演進歷程架構微服務