做架构也得讲武德
這里是Z哥的個人公眾號
每周五11:45 按時送達
當然了,也會時不時加個餐~
我的第「169」篇原創敬上
大家好,我是Z哥。今天分享一篇對「架構」這件事的隨想。
我想,做「架構」是每個熱愛技術的技術人在不斷追求想進入的領域。但是很多人可能工作了很多年也沒能真正參與到做架構這件事上。
所以,很多人對做架構這件事的感知停留在網上很多大牛分享的文章里。
但是,如果你只是看網上的文章其實對架構的理解會非常容易跑偏的,主要原因有兩點。
第一點,世界是在不斷發展和迭代的。技術也是人類文明的一部分,所以自然也會隨著時間的推移不斷進化。
而很多講架構的文章喜歡和新技術掛上鉤,一個沒用到新技術的“架構”,會讓很多人覺得有點out,缺乏吸引力。
但是新技術的推出,要么是用來解決過去無法解決的問題,要么是可以提高當前解決問題的效率。正如當前的你在20年前做程序員,基于當時的編程環境,開發效率肯定不如現在,這是毋庸置疑的。
也正因為如此,每一項新技術的出現,背后必然對應著一個典型的問題場景。能最大化發揮這項新技術價值的地方也應該是這個場景。
如果我們僅僅停留在這項新技術本身去考慮它有什么用,那么就很容易就會陷入到“拿著錘子找釘子”的情況里。特別是出于對「架構」的崇拜,“我怎么才能用上這個技術”會成為腦海中第一重要的目標。
第二點,不管是創造新技術的人還是分享新技術使用經驗的人,對他們來說肯定得對外展示新技術好的一面。如果寫不好的一面,這不是拆自己臺么,或者擔心表現出自己不會用、丟臉么。
如果你有心的話,當你在網上搜某個技術的相關資料的時候其實很容易觀察到這個現象,講優點的文章比講缺點、講遇到什么坑的文章多得多。
這會造成的影響就是過度拉高“旁觀者”對新技術的預期,認為它是很牛逼的,能解決很多問題。
那么正確對待「架構」的態度應該是什么呢?
我根據我自己做架構5年踩坑的經驗總結了以下3點。希望能幫助你少踩甚至是避開我踩過的坑。
/01 ?回到現實的問題中/
任何技術應該都只是解決問題的可選項之一,并沒有所謂的唯一選擇。只有你回到的現實中,從實際的問題出發去考慮,你才能規避掉你對某項技術所帶的偏見。(當然,提前是你還得對每項技術有基本的了解)
比如,之前我團隊里有個小伙伴覺得Saga模式非常酷,他認為用它來實現數據的寫操作又快又準,還能大大降低資源競爭問題,是所有項目應該考慮的第一選擇。于是,他在一個新項目中用上了。
但是,最終系統上線后,頁面操作的響應的確挺快,但是由于數據的滯后產生了一系列問題,讓系統使用者苦不堪言。
/02? 大多數時候,「減」都比「加」好/
我問你兩個詞語,你知道「簡單」和「容易」的區別嗎?
在我看來它們有很大的區別,我的理解是,「簡單」是形容事物的,「容易」是描述做一件事的過程。所以,我們做架構這件事,要追求的是「簡單」而不是「容易」。雖然很多時候「容易」會讓你用的時候覺得很「簡單」,但那不是真的簡單,最多算得上是局部的“簡單”。(這段話有點繞,細品一下應該還是很容易理解的)
所以,想要架構變得「簡單」,自然是做減法比做加法好。但是現實中,往往相反,更多人樂忠于增加什么新技術,引入什么新技術。畢竟做加法有可能不用考慮“歷史問題”,而要做減法不得不考慮“歷史問題”,很明顯前者更「容易」。
/03? 時刻保持風險意識/
大多數情況下,后續暴露出風險的地方大多數是一些非功能性的點。比如,數據經常出錯,訪問量一大數據同步就延遲的厲害,甚至宕機。
這些點說起來簡單,但是需要考慮的細節非常多。類似于「木桶原理」,只要你的整體架構中有一塊短板拖了后腿,大大小小的問題就會接踵而來。
更加麻煩的是,這些問題還不容易解決,甚至需要做大量的推倒重新設計才能解決。
雖然說,不管怎么樣依舊無法100%規避風險,但是時刻帶著風險意識問自己:“這里這樣設計可能會有什么問題?”必然會大大降低風險系數。
另外,對待已經察覺到的潛在風險絕對不能草率,認為未來不一定會發生,先將就著。規模越大的系統,越符合墨菲定律所提到規律——“凡是可能出錯的事有很大幾率會出錯”,而且時間會大大提前。
暫時就想到這么多,這個話題其實很大,后續有新的思考再分享給大家一起討論。
好了,總結一下。
這篇呢,Z哥和你分享了我對架構這件事的隨想。
首先,對待一個陌生的技術,預期不能過于樂觀。因為以下兩點會潛移默化地讓你產生偏見。
對自己不了解的技術的崇拜感。
你能查到的對外分享講優點的遠大于講缺點和坑的。
對待架構這件事我給出的3個建議是:
回到現實的問題中。
大多數時候,「減」都比「加」好。
時刻保持風險意識。
希望對你有所啟發。
架構是“平衡”的藝術,祝你早日找到你的“平衡感”。
推薦閱讀:
聊聊單元測試
心想技術驅動業務,卻在背道而馳
原創不易,如果你覺得這篇文章還不錯,就「在看」或者「分享」一下吧。鼓勵我的創作 :)
如果你有關于軟件架構、分布式系統、產品、運營的困惑
可以試試點擊「閱讀原文」
總結
- 上一篇: .Net orm 开源项目 FreeSq
- 下一篇: api-hook,更轻量的接口测试工具