軟體架構ABC
前段時間出去面了幾家公司,一家家聊下來,大部分還算可以從容應對,但也有的就被吊打得體無完膚o(╯□╰)o。整體來看,基礎知識還算被大多數公司所認可,但一旦涉及架構或設計,自己基本上就只有被吊打的份了,所以今天我們就來聊聊架構。
什麼是架構
架構這個詞似乎被說爛了,但真要問什麼是架構,我竟真的一時語塞。事實上,對於什麼是架構,可能很多架構師都會有他自己的看法。有一個笑話是這麼說的:
Architecture is like teenage sex,everybody talks about it,nobody really knows what it is.
而維基百科上是這麼說的:
Software architecture refers to the high level structures of a software system and the discipline of creating such structures and systems.
翻譯成中文,大概是這麼個意思:
軟體架構是指軟體系統的頂層結構,以及建立這樣一個結構和系統的準則。
這麼聽起來感覺還是有點虛,翻譯成人話怎麼說呢?個人非常贊同李運華老師的理解,他說系統架構要包含兩方面的內容:
- 明確系統中包含哪些個體
- 明確系統中個體運作和團體協作的規則
用一個大家更好理解的例子也許就是組織架構。
在一個企業的組織架構中,會有HR團隊、產品團隊、技術團隊、市場團隊等等,而技術團隊中又可以細分為前端團隊、後端團隊和測試團隊。
那麼企業組織架構的目的就是明確整個企業的人員構成、每個團隊的職責以及跨團隊合作的一些規則。
為什麼要做架構設計
講明白架構的概念,那對一個軟體系統,為什麼要做架構設計呢?
我們還是從企業的組織架構講起。
企業創立初期,可能就三五個人,這個時候是沒有什麼組織架構可言的。因為創始團隊什麼活都要幹,人事、行政、產品、技術都得一肩挑,設計、開發、測試、運維全得自己上。
如果運氣比較好,產品得到市場認可,公司規模會慢慢擴大,企業業務也會愈發複雜。這個時候如果每個人都還得人事、行政、產品、技術一肩挑,設計、開發、測試、運維自己上,那不就亂套了嘛。於是分工就產生了,也就慢慢會形成自己的組織架構。
可以看到,企業組織架構的產生,一個很大的原因,是為了解決企業規模擴大之後帶來的人員職責不清晰、效率低下的問題。
其實軟體架構同樣如此。
對於一些簡單的系統,可能使用者量就幾百上千,業務也不復雜,這個時候也談不上什麼架構設計。只有當系統日趨複雜時,才能體現出架構設計的重要性。
所以,李運華老師說
架構設計是為了解決複雜度帶來的問題。
怎麼做架構設計
既然架構設計的主要目的是為了解決複雜度帶來的問題,那麼對於一個軟體系統,其複雜度來源於哪裡?一般來說,大致有這麼幾個方面:
- 高效能
- 高可用
- 可擴充套件
- 安全
所以架構設計主要也就是圍繞這幾個方面展開。但由於本人目前對架構認識有限,所以這裡並不打算針對每一點具體展開,就簡單畫個腦圖吧,算是指導自己在架構進階路之路上的一份學習指南。

image.png
腦圖中的大部分內容來源於李運華老師的《從零開始學架構》,非常好的一本書,也推薦對架構感興趣的同學找來看看。
最近還看了另外一本評價頗高的《架構整潔之道》,不過相比李運華老師的書,Bob大叔似乎更加務虛,可能是自己level還不夠吧,讀起來有點霧裡看花的感覺。
大家在學習架構上有什麼好的經驗,也歡迎與我交流。
更多技術文章,咱們公眾號見,我在公眾號裡等你~

image.png