Building Evolutionary Architectures : Support Constant Change 心得歸納1

CH.1 軟體架構

ZONGRU Li
Sep 19, 2022

可能技術筆記寫多了,剛好看到大神影片提到這本書

突然地覺得可以拿來歸納一下過去四年半到五年左右的金融業IT經驗

也是時候從過往經驗提煉一些有價值的部分

過程可能用我自己的想法來描述我看到的,不完全是按照書上的描述

以上只是無關緊要的碎碎念

書中部分的”-ility(什麼什麼性)”

常見的如性能,安全性,可擴展性...etc各種"-ility"

在設計的時候可能會需要考慮多個,但是往往會有那一個最重要的"-ility"

找出最重要的XXXility

這本書就要額外加入一個不常被考慮的 — 可演進性(Evolvability)

一切都在演變,怎麼長期規劃?

  • 例如這幾年Docker的容器應用
  • 即便Linux夠用下作業系統的金錢成本歸零,但是DevOps的實踐(PuppetChef)自動供應機器帶來Linux運維成本歸零
  • 所以將可變性植入架構中達成架構演進的動態平衡

有了架構還得防止它隨時間劣化

  • 高階特性中的"可演進性"的副作用 →保護重要的架構特性
  • 完成持續型架構
  • 演進式架構定義:

演進式架構可支援橫跨多個維度且引導式的漸進變更

漸進變更

  • 即團隊如何建構軟體及如何佈署
  • 允許小規模的漸進變更的架構會比較容易演進(例如服務API的升級遷移)

引導式變更

  • 即引導架構的變更
  • 借進化計算(evolutionary computing)的適應度函數(fitness function)
  • 適應度函數:"潛在的設計方案離既定目標有多遠"
  • 每次軟體的變更的適應,透過一個或多個適應度函數以確保要保護的重要特性

多個架構維度

  • 架構師不能只考慮技術架構
  • 例如資料庫實體的結構關係會隨時間演進,過程中要額外考慮到安全性
  • 所以單單資料庫牽涉到的軟體架構的可演進性牽涉的維度:
  • 1.技術:架構的實作(框架,程式庫,實作語言等)
  • 2.資料:schema(架構定義),資料布局,優化計畫等
  • 3.安全性:安全策略,方針,找出缺陷的工具
  • 4.運維/系統:簡單講就是基礎設施
  • 以上將滿足(可擴展性,安全性,分佈,交易)
  • 亦即架構師要考慮滿足多個"-ility"的維度進行演進
  • 專案架構範圍=軟體需求+其他維度(或我理解的滿足各種維度)
  • 架構是需求與其他維度組成,每個維度都被適應度函數保護

Conway定律

  • Melvin Conway:設計系統的組織...產生的設計都被限制了,它們只是那些組織的溝通結構的複製品
  • 技術人員將問題分解成更小的區塊來委託工作時即引入協調問題
  • 職能silo(穀倉)組織中是沒有考慮工程效率的
  • i.e.有人想改變一樣東西,但那樣是別人擁有的,那人就很難改變它
  • 例如過往我在金融業因專案提表單去與infra,資安做相關資源調整或申請
  • 從格局上誇飾地來看
  • 開發團隊就好像一間公司
  • infra就好像另一間公司
  • 資安也是一間獨立的公司
  • 每間公司(團隊)間的溝通成本極大,完全不是夥伴的關係,甚至是對立的
  • 所以漸漸有些公司改採服務邊界來組織團隊,團隊結構最好可以反映問題大小與範圍(逆Conway調度,Inverse Conway Maneuver)
  • 簡而言之 →讓團隊結構符合目標架構
  • 我想法上就是一個團隊有開發,有infra,有資安
  • 團隊直接完全滿足上面專案提單的需求的商業與技術的每個層面

為何要演進?

  • 架構師必須支援真正的變更而非臨時應急的解決方案
  • i.e.作為架構師要關心的是整體的可演進系統

最後我不禁想起以前聽過公司核心轉換選商時的廠商Demo

是不是五年前那個使用hibernateJava系統,且有中台的系統等等的架構圖

當一攤開來就已經代表已經沒用了!?

那架構圖只能用來應用財務等單位報帳使用!?

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet