康威定律,作為架構師還不會靈活運用?

Soft skills are always hard than hard skills. 軟技能比硬技能難。

老板聽說最近流行“微服務”,問架構師咱們的系統要不要來一套?老板又聽說最近流行“中臺系統”,問架構師咱們要不要搞起來?其實,這些問題不用老板問,關注技術發展趨勢的架構師每當聽到新的技術或解決方案,都會暗中思忖是否應用到系統中。然而,用或不用,總不能憑感覺吧。此時,如果你能靈活運用康威定律,那么做出的判斷將更加完美。

康威定律

康威定律是馬爾文·康威1967提出的:“設計系統的架構受制于產生這些設計的組織的溝通結構。”通俗的來講:產品必然是其(人員)組織溝通結構的縮影

跨部門溝通是非常難的,系統各個模塊的接口也反映了它們之間的信息流動和合作方式。

image

康威定律可謂軟件架構設計中的第一定律,起初只是在雜志上的發表,后經過《人月神話》這本軟件界圣經的引用,并命名為康威定律(Conway’s law),因此得以推廣。

只通過簡單的描述可能無法理解康威定律的精髓所在,原文中康威定律可總結為四個定律:

  • 第一定律 組織溝通方式會通過系統設計表達出來。
  • 第二定律 時間再多一件事情也不可能做的完美,但總有時間做完一件事情。
  • 第三定律 線型系統和線型組織架構間有潛在的異質同態特性。
  • 第四定律 大的系統組織總是比小系統更傾向于分解。

第一定律

Communication dictates design。
組織溝通方式決定系統設計。

這條定律重點是講組織架構和溝通對系統設計的影響。組織的溝通和系統的設計之間緊密相連,特別是復雜系統,解決好人與人的溝通才能有一個更好的系統設計。

《人月神話》中總結出了隨著人員的增加溝通成本呈指數增長的規律:溝通成本 = n(n-1)/2。舉例說明一下:

  • 5人項目組,需要溝通的渠道是 5*(5–1)/2 = 10
  • 15人項目組,需要溝通的渠道是15*(15–1)/2 = 105
  • 50人項目組,需要溝通的渠道是50*(50–1)/2 = 1,225
  • 150人項目組,需要溝通的渠道是150*(150–1)/2 = 11,175

這也是為什么互聯網公司都追求小團隊的原因之一。溝通的問題會帶來系統設計的問題,進而影響整個系統的開發效率和最終產品結果。

第二定律

There is never enough time to do something right, but there is always enough time to do it over。
時間再多一件事情也不可能做的完美,但總有時間做完一件事情。

人手永遠是不夠的,事情永遠是做不完的,但可以一件一件來。這不就是軟件行業中“敏捷開發”模式所解決的問題嗎。面對這樣的狀況,敏捷開發可以做到不斷迭代、持續交付、快速驗證和反饋,并持續改進。

再牛的開發也會寫出bug,再全面的測試覆蓋率也無法測出所有的問題。解決方案不是消滅這些問題,是容忍一些問題的存在,然后通過適當的設計(冗余、監控、高可用設計)當問題發生時能夠快速解決。

幾個開發人員的小公司,去追求微服務、去追求中臺架構,這是追求完美嗎?不是,是找死。

好的架構不是買來的,也不是設計出來的,而是根據業務落地生根長期演化來的。

第三定律

There is a homomorphism from the linear graph of a system to the linear graph of its design organization。
線型系統和線型組織架構間有潛在的異質同態特性。

這一定律是第一定律的具體應用。想象一下如果公司的組織架構是這樣的:團隊是分布式,每個團隊都包含產品、研發、測試、運維等角色。而此時系統是單塊的,項目溝通和協調的成本是巨大的,弄不好還會打起來。

image

如果將單塊的系統拆分成微服務,每個團隊負責自己的部分,對外提供對應的接口即可,互不干擾。系統效率將得到提升。這與軟件設計中的高內聚、低耦合是相通的。

image

直白的說就是想要什么的系統就搭建什么樣的團隊,有什么樣的團隊就搭建什么樣的系統。需要前后端分離的系統就搭建前后端分離的團隊,反之,擁有前后端分離的團隊,可以設計前后端分離的系統。當然,如果能統籌管理,擁有重組團隊或設計系統架構的權利,那就再好不過了。通常情況下讓兩者形成1:1的映射關系,更加高效。

第四定律

The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems。
大的系統組織總是比小系統更傾向于分解。

“話說天下大勢,分久必合,合久必分。”系統越復雜,越需要增加人手,人手越多,溝通成本也呈指數增長。分而治之便是大多數公司選擇的解決方案。分不同的層級,分不同的小團隊,讓團隊內部完成自治理,然后統一對外溝通。

小結

架構不僅僅需要技術,在大公司尤其需要政治,所謂的架構的政治。

楊波老師曾在他的文章《每個架構師都應該研究下康威定律》中提到:“政治指的是和他人協作將事情搞定的藝術,架構是一種社交活動,在技術的世界里,個人主義很容易被打敗,即使你的目的是好的技術是最優的,技術決策是政治決策(technical decisions are political decisions),一個技術產品,一波人可以做,另一波人也可以做,到底誰做的好,真不好說,不管誰做,都給業務套上了一副手銬。”

原文鏈接:《康威定律,作為架構師還不會靈活運用?》



---------------------
作者:程序新視界
來源:CSDN
原文:https://blog.csdn.net/wo541075754/article/details/102476828
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

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

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

相關文章

使用onclick跳轉到其他頁面。使用button跳轉到指定url

1. οnclick"javascript:window.location.hrefaa.htm" 2. οnclick"locationURL"3,。 οnclick"window.location.href?id11"轉載于:https://www.cnblogs.com/wujixing/p/5856087.html

Avalonia Beta 1對WPF做了很多改進

\看新聞很累?看技術新聞更累?試試下載InfoQ手機客戶端,每天上下班路上聽新聞,有趣還有料!\\\Avalonia將自己定義為“基于WPF(使用XAML、數據綁定以及lookless控件等)的跨平臺.NET UI框架。”在第…

WebView2 通過 PuppeteerSharp 實現RPA獲取壁紙 (案例版)

此案例是《.Net WebView2 項目,實現 嵌入 WEB 頁面 Chromium內核》文的續集。主要是針對WebView2的一些微軟自己封裝的不熟悉的API,有一些人已經對 PuppeteerSharp很熟悉了,那么,直接用 PuppeteerSharp的話,那就降低了…

[轉]2022 年 Java 行業分析報告

你好,我是看山。 前段時間介紹了從 Java8 到 Java17 每個版本比較有特點的新特性(收錄在 從小工到專家的 Java 進階之旅 專欄),今天看到 JRebel 發布了《2022 年 Java 發展趨勢和分析》,于是借此分析一下 Java 行業的現…

Mysql 數據庫學習筆記03 存儲過程

一、存儲過程:如下 通過 out 、inout 將結果輸出,可以輸出多個值。 * 調用存儲過程: call 存儲名稱(參數1,參數2,...); 如指定參數不符合要求,返回 Empty Set * 查詢存儲過…

android 代碼混淆模板

#指定代碼的壓縮級別 -optimizationpasses 5 #包明不混合大小寫 -dontusemixedcaseclassnames #不去忽略非公共的庫類 -dontskipnonpubliclibraryclasses#優化 不優化輸入的類文件 -dontoptimize#預校驗 -dontpreverify#混淆時是否記錄日志 -verbose# 混淆時所采用的算法 -opt…

vue+vuecli+webapck2實現多頁面應用

準備工作 在本地用vue-cli新建一個項目,首先安裝vue-cil,命令: npm install -g vue-cli 新建一個vue項目,創建一個基于"webpack"的項目,項目名為vuedemo: vue init webpack vuedemo 這里有一個地方需要改一下&#xff0…

一文把Docker、Kubernetes搞懂:什么是Docker?什么是Kubernetes?Docker和Kubernetes有什么關系和區別?通俗解釋Docker、Kubernetes

一、Docker解決的問題 1、統一標準 ● 應用構建 ○ Java、C、JavaScript——編程各異 ○ 打成軟件包 ○ .exe(類似Windows,最終也只是生產exe執行) ○ 使用docker build … 打包成 鏡像——這就類似于exe ● 應用分享 ○ 所有軟件的鏡像放到一…

Python-高階函數

#encodingUTF-8import sys # 高階函數高階函數實際上是參數可接受函數的函數即參數為函數的函數 # map()map()接收兩個參數,一個是函數,一個是序列,將此函數分別作用于該序列的每個元素,返回處理后的序列結果def c2(x): return x…

程序員雙手飛快敲鍵盤的時候是在敲代碼嗎?

當你看到一個程序員的兩只手在鍵盤上上下翻飛,行云流水的時候,多半不是在敲擊代碼大概率是在跟產品經理撕逼討論需求另一種可能就是在跟測試打口水仗10%幾率是在論壇碼字摸魚或者和人家開噴了。1%幾率是在跟MM聊天可以手速飛快而不需要停下思考的代碼&am…

erlang-17版本的編碼方式

最近在騰訊云租了個云主機:鏡像提供方:選擇服務市場 :多語言環境(Centos 7.0 64位 Python Perl Ruby Erlang ) 他們集成軟件安裝的是erlang-17版本,我之前用erlang-16版本一直沒遇到什么問題; 這…

幾分鐘上線一個網站 真是神器

1、ToolJet 簡介 ToolJet 是一個開源的低代碼框架,可以快速構建和部署內部工具,而無需工程團隊付出太多努力。您可以連接到您的數據源,例如數據庫(如 PostgreSQL、MongoDB、Elasticsearch 等)、API 端點(To…

翻譯:用戶變量(User-Defined Variable)(已提交到MariaDB官方手冊)

本文為mariadb官方手冊:User-Defined Variables的譯文。 原文:https://mariadb.com/kb/en/user-defined-variables/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/user-defined-variables/ 用戶變量是指由用戶創建&#xff0…

移植Python3到TQ2440(一)

平臺 硬件:TQ2440 64MB內存 256MB NandFlashbootloader:U-Boot 2015.04kernel:linux-4.9Python: Python-3.6.0工具鏈:arm-none-linux-gnueabi-gcc 4.8.3概述 現在樹莓派很火,在樹莓派上面用戶可以通過Python來控制板…

WinForm(六)組合布局屬性

WinForm是基于控件的,不像codemark的架構,可以非常靈活的用mark來布局,它只能用控件布局屬性和窗口控件來完成對UI的布局。容器控件有一組控件叫容器控件,對布局特別有作用,它們分別是:TableLayoutPanel&am…

Qt 網絡編程

QT 網絡編程 TCP 編程 模塊引入 QT network 頭文件 #include <QTcpServer> // TCP服務器端使用 #include <QTcpSocket> // TCP服務器和客戶端都使用 編程流程 服務端 1&#xff09;實例化 QTcpServer 對象 -----------------------------> socket 2&#x…

HDU 5037 Frog(2014年北京網絡賽 F 貪心)

開始就覺得有思路&#xff0c;結果越敲越麻煩。。。   題意很簡單&#xff0c;就是說一個青蛙從0點跳到m點&#xff0c;最多可以跳l的長度&#xff0c;原有石頭n個&#xff08;都僅表示一個點&#xff09;。但是可能跳不過去&#xff0c;所以你是上帝&#xff0c;可以隨便在哪…

Kafka高性能高吞吐的原因總結

1、磁盤順序讀寫 保證了消息的堆積 順序讀寫 磁盤會預讀,預讀即在讀取的起始地址連續讀取多個頁面&#xff0c;主要時間花費在了傳輸時間,而這個時間兩種讀寫可以認為是一樣的。 隨機讀寫 因為數據沒有在一起&#xff0c;將預讀浪費掉了&#xff0c;需要多次尋道和旋…

日利率

2019獨角獸企業重金招聘Python工程師標準>>> 利率計算 轉載于:https://my.oschina.net/u/3342652/blog/1649028

linux下使用tar命令

解壓語法&#xff1a;tar [主選項輔選項] 文件或者目錄 使用該命令時&#xff0c;主選項是必須要有的&#xff0c;它告訴tar要做什么事情&#xff0c;輔選項是輔助使用的&#xff0c;可以選用。主選項&#xff1a;c 創建新的檔案文件。如果用戶想備份一個目錄或是一些文件&…