Categories
程式開發

關於架構的幾件小事:架構是什麼


前言

這是我架構師系列的第0篇。這幾年經歷了很多很多的事情。有么蛾子的項目,有公司的重點項目,有加入公司的架構師組織,也有通過公司的架構師認證。業餘時間也有去學習攝影和藝術。在這個過程中,結識了很多很多人,有國內的、有國外的。他們給我的思想上帶來很大的衝擊。很多之前非常模糊的念頭,在我的腦海中漸漸清晰。我覺得是時候拿起筆來寫點什麼了。由於架構的理解多來自特定公司的理論體系和實踐,所以我對架構的理解可能和大家不大一樣。也歡迎大家交流。當然,攝影方面的也歡迎大家交流,我盡量使用自己拍的照片作為題圖。

架構TMD到底是啥

架構就像是那啥,每個人都在談論它,但從沒沒人真正的見過它。

我曾經被這個問題困擾了很長很長時間。甚至為了回答這個問題,我加入了現在所在的公司。在經過系統化的學習以及很多架構師交流之後。我意識到,架構它不是一個東西,它甚至可以和coding沒關係。架構是一種層次化思考的方法論。它將業務目標和具體的實施方法連接起來,通過多個層次描述出來,讓不同層次的人都可以理解這個共同的目標,並找到自己合適的位置。

這就是架構的複雜之處。每一個架構師,每一個項目,似乎產出的東西都不大一樣。甚至本身就有好多好多種架構師:系統架構師、軟件架構師、業務架構師、企業架構師… 即使是技術方面的架構師也有很多種:大數據架構師、應用架構師、前端架構師… 很難說一些技術化的組件圖就是架構,也很難說一行code 都沒有的組織結構圖不是架構。架構是這些東西的一個超集。具體的技術,具體的業務流程,都只是架構的一個面。架構就是由這些面組合起來的一個整體。我的理解,架構就是從具體術到了道的昇華。架構師是道,是體系的藍圖和指導,它落地成了具體的技術和對應的組織形式、流程。但是架構是有共性的,即使是不同的架構師,互相交流起來其實也沒多少障礙。大家基本可以迅速的明白對方的點,迅速的達成一致。因為大家在方法論層面是一致的。

層次化

沒有一種文檔能描述清楚一個架構設計。要想描述清楚一個架構設計,我們需要一大堆文檔,還需要從不同的高度來逐層闡述。

架構設計的輸出,一定是一個多種層次的輸出。正如一個企業的組織形式。一定是從高到低存在不同的層次。可能大家已經想到了,最高的架構設計其實是人的架構的設計、組織結構的設計。系統是組織結構的映射。所以大型企業特別關注與高層設計。一開始的出發點就錯了,那是沒辦法挽救的。架構設計也是一樣的。最高的層次就是業務目標的層次。然後圍繞這個業務目標,需要那麼人和系統對接,需要實現什麼樣的價值。內部需要有哪些模塊等,層層推進。在這個過程中,要和各種各樣的人和需求打交道。將不同的需求整合在一起,形成一個業務和性能都能接受的設計,讓大家認知都保持一致。

分層設計還有一個好處,就是可以將問題的複雜度限製到一個可以理解的範圍內。這也和人類思考的本質相一致,分層抽象化。實際上沒有任何一種文檔或者設計圖,能畫下上千個組件。即使有,這種文檔也是不可讀的。所以有的解決方案,洋洋灑灑幾百頁PPT也很正常。為了能將每一頁的信息量限制在一個可理解的範圍內,必須進行抽象和分層。

自證的、可落地的

空中樓閣不是架構,嚴謹的自證才是

OK,到現在咱們有層次化的一些文檔或者設計了。但是這不是重點。重點是這些層次化的文檔是需要連接起來的,是自證的。在邏輯上是嚴絲合縫的。也就是說,下一次層是上一層的延展,下一層是上一層的證明。其實我們在做架構工作的時候,也會經常的往前審視,經常發現上一層次的設計中存在各種問題,或者有遺漏。這個時候一般都會打回重寫。直到所有的衝突和遺漏都被處理掉了。所有的文檔和設計層層遞進,卻又互相映證。直到最後一層應該是一個可發布的、可執行的、可落地的。否則,始終是空中樓閣,那不是架構。當然,最後還應該用需求來驗證架構設計是否和之前的出發點一致。不能實現業務目標的系統,不管處理能力有多大,都是失敗的。

Beyond Technical is ART

攝影藝術來源於器材,高於器材。同樣架構構建在技術之上,但是高於技術。

這是一個我比較喜歡的品牌的廣告slogen。我是一個碼農出身的人。從前是碼農,現在是碼農,以後還是碼農。但是我現在越發的感覺到。技術人應該嘗試去跳出技術思考。 coding 只是解決問題的手段,但不是問題本身。攝影也是非常類似。技術的發展讓攝影變得容易了。但是鏡頭背後的腦袋變得越發重要。一個合格的攝影師,必須在拿起相機之前,就能在腦海中想像出成品的樣子。否則很難拍出好的片子。即使蒙出一兩張還可以的,也無法保證質量的重現。架構也是類似的。 coding 是解決問題的最後一公里。在這之前,架構師應該在腦海中,在文檔中,用不同的手段,面向不同的人描繪出項目應該有的樣子。 Beyond Technical is ART。架構也是ART。