演進式架構

  • 演進能力是一種元特征和保護其他所有架構特征的架構封裝器
  • IEEE 的軟件架構定義中的4+1
    視圖模型。它關注不同角色的不同視角,將整個系統劃分成了邏輯視圖、開發視圖、進程視圖和物理視圖
  • 架構師確定了可審計性、數據、安全性、性能、合法性和伸縮性是該應用的關鍵架構特征。隨著業務需求不斷變化,每個架構特征都通過適應度函數來保護其完整性。
  • 康威描述道,在設計的最初階段,人們首先需要高瞻遠矚地思考如何將職責劃分為不同的模式。團隊分解問題的方式會左右他們之后的選擇,這便是康威定律。
    康威特別提醒軟件架構師,不要只關注軟件架構和設計,還應關注團隊之間委派、分配和協調工作的方式。
  • 演進式架構主要由三方面構成:增量變化、適應度函數和適當的耦合

適應度函數:

  • 全系統適應度函數允許架構師通過統一的機制思考不同的問題,捕捉和保留重要的架構特征。
  • 原子適應度函數與整體適應度函數、觸發式適應度函數與持續式適應度函數、靜態適應度函數與動態適應度函數、自動適應度函數與手動適應度函數\臨時適應度函數、針對特定領域的適應度函數
    盡早確定 適應度函數、預設式高于應急式、審查適應度函數

實施增量變更:

只有成功完成了架構設計、實現、升級和無法避免的變更后,甚至當架構能夠經受由前期未知的未知因素引起的反常事件(第6 章將介紹)帶來的考驗時,架構師才能評價架構的長期有效性
驅動敏捷軟件方法論的引擎是內置的反饋環,如測試、持續集成和迭代等。然而包含應用程序最終用戶的反饋環已經脫離了團隊的控制。使用假設驅動開發,我們能以一種前所未有的方式將最終用戶納入構建流程,從他們的行為中學習并構建出對其真正有價值的系統

架構耦合:

  • 模塊化-模塊意味著邏輯分組,而組件意味著物理劃分。
  • 架構的量子和粒度-架構量子則是具有高功能內聚并可以獨立部署的組件,它包括了支持系統正常工作的所有結構性元素。在單體架構中,量子就是整個應用程序,每個部分都高度耦合,因此開發人員必須對其進行整體部署。微服務架構在架構元素之間定義了物理限界上下文,封裝了所有可能變化的部分。這種架構就是為了增量變更而設計的。
  • 不同類型架構的演進能力
    -大泥團-非結構化單體、分層單體、模塊化的單體架構、微內核架構、事件驅動架構
  • 微服務架構通常遵循以下七個原則:
    1-圍繞業務領域建模,微服務的目標是創建有用的限界上下文,而不是讓開發人員構建更小的服務
    2-隱藏實現細節,微服務的技術架構封裝在基于業務領域的服務邊界中。每個領域形成一個物理限界上下文。服務間通過傳遞消息或資源來集成,而不是通過暴露實現細節集成
    3-自動化文化,支持持續交付
    4-高度去中心化,微服務形成了一種無共享架構,其目標是盡可能地減少耦合。通常重復好于耦合
    5-獨立部署,可以獨立部署每個服務(包括基礎設施),反映了服務間的物理限界上下文
    6-隔離失敗,每個服務都應該處理合理的錯誤場景并在可能的情況下將其恢復。
    7-高度可觀察
  • 微服務的主要目標是通過物理限界上下文來隔離領域及理解問題領域。因此,它的架構量子就是服務,這使得它成為了演進式架構的優秀示例
    常用于遷移的架構是基于服務的架構,有三個明顯的區別,分別是服務粒度、數據庫范圍和集成中間件。
    更大的服務粒度、數據庫作用域、集成中間件
  • 基于服務的架構內在的演進能力肯定比ESB 驅動的SOA 架構要好。開發人員偏離限界上下文的程度決定了架構量子的大小和破壞性耦合的數量。
  • “無服務”架構-BaaS(后端即服務)是那些明顯或從根本上依賴于第三方應用或云端服務的應用、FaaS(功能即服務)

演進式數據:

  • 是經過檢驗的、版本化的和增量的
  • 架構師必須考慮應用的所有耦合特征,其中包括類、包/ 命名空間、庫、框架、數據庫模式,以及事務上下文。在架構演進時,忽視其中任一維度(或維度間的交互)都將產生問題。
  • 在將單體架構遷移到某種更精細的架構時,應該從分離少量較大的服務開始。當構建一個全新的微服務架構時,開發人員應該盡量限制服務和數據上下文的大小。然后,不要僅按字面意思來理解微服務,對每個服務而言,小并不是必需的,能捕獲有用的限界上下文才是關鍵。
  • 數據的年齡和質量,識別真正有用的數據并將其保留下來,將舊數據作為參考但不將其納入演進式開發的主流。

構建可演進的架構:

  • 演進機制-通過下面三步來構建演進式架構
    識別受演進影響的架構維度、為每個維度定義適應度函數、使用部署流水線自動化適應度函數

  • 賦予現有架構演進能力取決于三個因素:組件耦合度、工程實踐成熟度,以及開發人員構建適應度函數的難易程度。

  • 團隊可以通過多種劃分方式將單體應用分解成服務。業務功能分組、事務邊界、部署目標

  • 演進模塊間的交互-拆分共享的依賴、通過JAR文件共享依賴、復制共享的庫以消除耦合點。共享就是耦合的一種形式,在微服務架構中這是非常不可取的

  • 演進式架構構建指南-去除不必要的可變性、讓決策可逆、演進優于預測、構建防腐層、服務模板、構建可犧牲架構、應對外部變化,傳遞依賴管理被視為有害的、更新庫與更新框架、持續交付優于快照、服務內部版本化

  • 演進式架構的陷阱和反模式-
    為供應商為王反模式-無論從技術還是從業務流程的角度來看,將外部工具或框架置于架構的核心會嚴重限制架構的演進能力

  • 陷阱:抽象泄漏 底層抽象破壞會導致意外的災難,即原始抽象泄漏,它是技術棧日漸復雜帶來的副作用之一。

  • 反模式:最后10%的陷阱 在抽象范圍的另一端存在著另一種復用陷阱,它隱藏在套裝軟件、平臺和框架中。

  • 反模式:代碼復用和濫用-開發人員為實現可復用所添加的鉤子越多,對代碼的基本可用性損害越大。

  • 微服務避免代碼復用,遵循重復優于耦合的理念。

  • 當耦合點妨礙了演進或其他重要的架構特征時,通過分叉或重復來打破耦合點。
    架構師必須持續評估架構特征的適應度,保證它們仍在提供價值,避免淪為反模式。

  • 陷阱:簡歷驅動開發 不要為了架構而構建架構,構建架構是為了解決問題。在選擇架構前,要始終理解問題域,不要本末倒置。

  • 增量變更 反模式:管理不當

  • 當開發人員構建單體架構時,管理決策將影響所有項目。因此,在選擇數據庫時,架構師必須了解每個項目需要的能力,并考慮最復雜的情況。

  • 陷阱:發布過慢 ,一個項目的生產周期決定了架構的演進速度。換句話說,演進速度和生產周期成正比

  • 業務問題 陷阱:產品定制 為每個客戶定制、永久的功能開關、產品驅動定制化

  • 反模式:報表

  • 陷阱:規劃視野

實踐演進式架構:

  • 以領域為中心的團隊應該是全功能的,這意味著每個項目角色都由該項目組成員承擔
  • 架構師設計架構來消除不當耦合,以簡化增量變更。、全功能團隊的目標之一便是消除協調摩擦
  • 圍繞業務能力組織團隊:按照業務能力而非職能來組織團隊
  • 產品高于項目
  • 團隊成員間的連接數:盡量減少開發團隊之間的連接數。
  • 團隊的耦合特征-文化、事不過三,三則重構
  • 試驗文化-從外部吸收想法、鼓勵明確的改進、進行探針試驗并穩定下來、創造創新時間、采用基于集合的開發方式、連接工程師和最終用戶
  • 公司為何決定構建演進式架構
    可預測性與可演進性、規模、高級業務能力、以生產周期為業務指標

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38831.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習:特征工程之特征預處理

目錄 特征預處理 1、簡述 2、內容 3、歸一化 3.1、魯棒性 3.2、存在的問題 4、標準化 ?所屬專欄:人工智能 文中提到的代碼如有需要可以私信我發給你😊 特征預處理 1、簡述 什么是特征預處理:scikit-learn的解釋: provide…

linux系統服務學習(六)FTP服務學習

文章目錄 FTP、NFS、SAMBA系統服務一、FTP服務概述1、FTP服務介紹2、FTP服務的客戶端工具3、FTP的兩種運行模式(了解)☆ 主動模式☆ 被動模式 4、搭建FTP服務(重要)5、FTP的配置文件詳解(重要) 二、FTP任務…

Python基礎語法入門(第二十天)——文件操作

一、基礎內容 在Python中,路徑可以以不同的表現形式進行表示。以下是一些常用的路徑表現形式: 1. 絕對路徑:它是完整的路徑,從根目錄開始直到要操作的文件或文件夾。在Windows系統中,絕對路徑以盤符開始,…

【學會動態規劃】環形子數組的最大和(20)

目錄 動態規劃怎么學? 1. 題目解析 2. 算法原理 1. 狀態表示 2. 狀態轉移方程 3. 初始化 4. 填表順序 5. 返回值 3. 代碼編寫 寫在最后: 動態規劃怎么學? 學習一個算法沒有捷徑,更何況是學習動態規劃, 跟我…

CSS 兩欄布局和三欄布局的實現

文章目錄 一、兩欄布局的實現1. floatmargin2. flaotBFC3. 定位margin4. flex 布局5. grid布局 二、三欄布局的實現1. float margin2. float BFC3. 定位 margin(或者定位BFC)4. flex布局5. 圣杯布局6. 雙飛翼布局 一、兩欄布局的實現 兩欄布局其實就是左側定寬,…

高層建筑全景vr火災隱患排查模擬培訓軟件助力群眾防范火災傷害

隨著城市化進程的加快,樓宇建筑的數量也在不斷增加。然而,樓宇消防安全問題也日益突出。為了提高樓宇員工和居民的消防安全意識,樓宇VR消防安全教育培訓應運而生。VR安全培訓公司深圳華銳視點制作的樓宇vr消防安全教育培訓,包括消…

谷粒商城第十一天-完善商品分組(主要添上關聯屬性)

目錄 一、總述 二、前端部分 2.1 改良前端獲取分組列表接口及其調用 2.2 添加關聯的一整套邏輯 三、后端部分 四、總結 一、總述 前端部分和之前的商品品牌添加分類差不多。 也是修改一下前端的分頁獲取列表的接口,還有就是加上關聯的那一套邏輯,…

nginx負載均衡與反向代理與正向代理

負載均衡:通過反向代理來實現 正向代理的配置方法。 正向代理: 工作原理:用戶端直接訪問不了,需要通過代理服務器來訪問web服務器,用戶端先訪問代理服務器,再訪問web服務器。web服務器響應給代理服務器&a…

【C語言】調試技巧

目錄 一、什么是bug? 二、調試 1.一般調試的步驟 2.Debug 和 Release 三、調試環境準備 四、調試時要查看的信息 1.查看臨時變量的值 2.查看內存信息 3.查看調用堆棧 4.查看反匯編信息 5.查看寄存器 五、練習 六、常見的coding技巧 七、const的作用 八、編程常見…

Linux - MongoDB 數據庫自動退出服務問題/閃退

問題:MongoDB 自動退出服務問題 原因: 由于 Mongodb 服務,使用過多系統內存,導致系統強制停止 Mongodb 服務。 解決方法: 在 mongodb.conf 配置文件內,添加新配置內容: wiredTigerCacheSi…

POI與EasyExcel--寫Excel

簡單寫入 03和07版的簡單寫入注意事項: 1. 對象不同:03對應HSSFWorkbook,07對應XSSFWorkbook 2. 文件后綴不同:03對應xls,07對應xlsx package com.zrf;import org.apache.poi.hssf.usermodel.HSSFWorkbook; import …

如何應用項目管理軟件進行敏捷開發管理

敏捷開發(Agile Development)是一種軟件開發方法論,強調在不斷變化的需求和環境下,通過迭代、協作和自適應的方式來開發軟件。敏捷方法的目標是提供更快、更靈活、更高質量的軟件交付,以滿足客戶需求并實現項目成功。 …

服務器數據恢復-EqualLogic存儲RAID5數據恢復案例

服務器數據恢復環境: 一臺DELL EqualLogic存儲中有一組由16塊SAS硬盤組建的RAID5陣列。存儲存放虛擬機文件,采用VMFS文件系統,劃分了4個lun。 服務器故障&檢測&分析: 存儲設備上有兩個硬盤指示燈顯示黃色,存儲…

【Windows 常用工具系列 6 -- CSDN字體格式(字體、顏色、大小)、背景色設置】

文章目錄 背景字體大小設置字體顏色設置字體類型背景色 上篇文章:Windows 常用工具系列 5 – Selenium IDE的使用方法 下篇文章:Windows 常用工具系列 7 – 禁用win10自帶的微軟輸入法 背景 Markdown是一種輕量級標記語言,它的目標是實現“…

1022.從根到葉的二進制之和

目錄 一、題目 二、代碼 一、題目 二、代碼 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nu…

基于java計算機類考研交流平臺設計與實現

摘要 高校的大學生考研是繼高校的高等教育更上一層的表現形式,教育的發展是我們社會的根本,那么信息技術的發展又是改變我們生活的重要因素,生活當中各種各樣的場景都存在著信息技術的發展。信息技術發展WEB信息化的到來讓人們的生活感受到了…

vue項目的實用性總結

1、mockjs 基本使用 ★ 安裝:npm i mockjs。 在src/mock/index.js內容如下: import Mock from mockjs //制訂攔截規則 Mock.mock(http://www.0313.com,get,你好啊)記得在main.js中引入一下,讓其參與整個項目的運行。 只要發出去的是get類型…

家紡行業小程序商城搭建指南

家紡行業作為一個不可或缺的消費領域,近年來備受關注。隨著互聯網的發展,小程序商城成為家紡行業拓展市場的新利器。搭建一個家紡行業小程序商城并不是一件困難的事情,只需要按照以下幾個步驟進行操作,就能輕松上手。 首先&#x…

Java后端框架模塊整合

提示:使用Java后端開發框架能夠提高開發效率、代碼質量,提升可擴展性,降低開發成本和易于維護。 文章目錄 前言MyBatis 框架知識Spring 框架知識SpringMVC 框架知識SpringBoot 框架知識 前言 提示:這里可以添加本文要記錄的大概內…

2023-08-15 LeetCode每日一題(字符串中的查找與替換)

2023-08-15每日一題 一、題目編號 833. 字符串中的查找與替換二、題目鏈接 點擊跳轉到題目位置 三、題目描述 你會得到一個字符串 s (索引從 0 開始),你必須對它執行 k 個替換操作。替換操作以三個長度均為 k 的并行數組給出:indices, sources, tar…