以對話的方式擴充套件架構的實踐 - Andrew
這是來自martinfowler.com的Andrew Harmel-Law文章,大意如下,詳情點選標題:
架構設計不必是獨白;不是從少數人的思想和口中自上而下地傳遞的。這篇文章描述了另一種構建架構的方法;作為一系列對話,由分散和授權的決策技術驅動,並由四個學習和對齊機制支援:決策記錄、諮詢論壇、Team-sourced原則和技術雷達。
軟體架構的“傳統”方法(即非編碼、決策、圖表繪製)對我來說很難發揮最好的作用。
有沒有替代方案?
在本文中,我將介紹這種替代思維方式以及相關的工具和實踐集,它們使我能夠顛覆“軟體架構師”的傳統角色,同時將軟體架構實踐帶到開發團隊的前沿。更重要的是,我將解釋如何在這種替代方法中,每個人都可以安全有效地進行他們需要的架構,而不會讓一切陷入混亂。
軟體交付朝著不斷增加的團隊自治的方向發展,這加劇了對更多架構思維與架構決策的替代方法相結合的需求。
一個關鍵問題:一小群架構師如何養活大量飢餓的、價值流對齊的團隊?我們需要的是一種可行的方法來應對團隊自治和由此產生的架構的人類規模挑戰。
透過“諮詢流程”做出決策
傳統的、自上而下的架構,由精選的全能架構師做出所有決策,與這種分散的模型背道而馳。“然而”,挑戰是“仍然需要做出決策——這就是架構”。
這些架構決策仍然必須經過深思熟慮。
建議流程是這種無政府主義的、分散的架構方法的核心要素。它最大的特點是非常簡單。它包含一個規則和一個限定符:
規則:任何人都可以做出架構決策。
限定符:在做出決定之前,決策者必須諮詢兩個群體:第一個是將受到決定有意義影響的每個人。第二個是在正在做出決定的領域具有專業知識的人。
這就是整個諮詢流程。
...
對話的基本作用
事件風暴的發明者阿爾貝託·布蘭多里尼 (Alberto Brandolini) 曾說過一句著名的話,“是開發人員有了自己的假設(根據)他們才能投入生產”,他是對的;重要的是開發人員對目標架構的理解,而不是首席架構師的頭腦或圖表中的內容。
這個問題由來已久。Eric Evans 在“領域驅動設計:解決軟體核心的複雜性”中解決了這個問題,最近我的同事 Erik Dörnenberg 在他的演講“沒有架構師的架構”中談到了它。
對我來說,最重要的是這種架構,在那些編寫程式碼的人的頭腦中。在採用這種分散的方法時,架構決策的實踐更加分散,這個問題在很多方面都得到了緩解。
採用諮詢流程為任何人提供了決策空間,但它也將對話、尋求專業知識的責任和考慮影響置於核心位置。這種方法的其餘要素,每個要素都支援核心要素,重點是確保這些對話儘可能及時、集中和有效。其中有四種:
- 一個思考和記錄的工具:第一個支援元素是架構決策記錄或 ADR。這些是輕量級文件,經常與它們描述的人工製品一起儲存在原始碼儲存庫中。
- 談話的時間和地點;
- 照亮和引導統一方向的燈;
- 一種感知當前技術格局和氣候的手段。
相關文章
- MySQL 高擴充套件架構構建百萬線上系統實踐MySql套件架構
- 微服務架構擴充套件FreeStyle微服務架構套件
- 使用Kotlin + Jersey + Jetty + MongoDB建立可擴充套件的RESTful API - AndrewKotlinJettyMongoDB套件RESTAPI
- 簡要剖析:可擴充套件的微服務架構套件微服務架構
- 谷歌的三大可擴充套件核心架構谷歌套件架構
- Flink SQL 在快手的擴充套件和實踐SQL套件
- Chrome DevTools Inspector 擴充套件實踐Chromedev套件
- 讀構建可擴充套件分散式系統:方法與實踐15可擴充套件系統的基本要素套件分散式
- 3 種擴充套件 Kubernetes 能力的方式套件
- spring bean 擴充套件方式SpringBean套件
- Django與微服務架構:構建可擴充套件的Web應用Django微服務架構套件Web
- 微服務架構:自動擴充套件簡介微服務架構套件
- mysql資料庫應付大流量網站的的3種架構擴充套件方式介紹MySql資料庫網站架構套件
- 讀構建可擴充套件分散式系統:方法與實踐09可擴充套件資料庫基礎套件分散式資料庫
- 擴充套件 GRTN:雲原生趨勢下的 RTC 架構演進套件架構
- 用擴充套件的方式在 PHP 中使用 Kafka套件PHPKafka
- 用 TDD 的方式為 Laravel 開發擴充套件Laravel套件
- Mac 下使用 pecl 安裝 PHP 的 swoole 擴充套件實踐MacPHP套件
- Mac下使用Pecl安裝PHP的Swoole擴充套件實踐MacPHP套件
- 【軟體架構篇】常見可擴充套件模式架構套件模式
- MOSN 多協議擴充套件開發實踐協議套件
- MySQL中InnoDB引擎對索引的擴充套件MySql索引套件
- C++ 對C的擴充套件有哪些C++套件
- 聊聊 Spring 的 XML Schema 擴充套件機制的使用方式SpringXML套件
- 使用 Postgres 的全文搜尋構建可擴充套件的事件驅動搜尋架構套件事件架構
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- Chrome 擴充套件的開發實戰Chrome套件
- 開源 [輪子] Laravel 專案架構擴充套件包Laravel架構套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- SOFABoot 擴充套件點初體驗 | SOFALab 實踐系列boot套件
- 構建高可用性、高效能和可擴充套件的Zabbix Server架構套件Server架構
- Tokenformer:基於引數標記化的高效可擴充套件Transformer架構ORM套件架構
- 正則的擴充套件套件
- SRAM的容量擴充套件套件
- 重構 - 設計API的擴充套件機制API套件
- JMeter 擴充套件外掛實現對自定義協議的支援JMeter套件協議
- PHP FFI詳解 - 一種全新的PHP擴充套件方式PHP套件
- PHP擴充套件開發就是一個自己的PHP擴充套件PHP套件