萬劍歸宗—架構設計中的抽象思維與具象思維

新項目上線,用戶量不斷增加,工作中繼續不斷髮現問題,解決問題。花一點時間來總結一下自己對架構設計的理解。

 

小小的打個廣告。這篇文章是發佈在neil的微信公衆號上。neil的文章都會第一時間發佈在微信公衆號上。歡迎小夥伴們關注。

                      

微信公衆號:互聯網與作曲家 

 

 

  • 武俠小說中的“萬劍歸宗”----極致的抽象思維

 

一點題外話。自己從小就是武俠迷,金庸古龍的經典作品都看過很多遍。最喜歡的女主,是《倚天屠龍記》中的趙敏:敢愛敢恨,邵敏郡主。其扮演者黎姿,是我心目中兩位女神之一,性格與趙敏非常相似。另一位女神是周慧敏。最喜歡的男主,當屬楊過:楊康之子,“有過則改之”,曾經年少輕狂;洗盡鉛華之後,神鵰大俠悟出黯然銷魂掌,力挽狂瀾。

 

武俠小說中,武功的最高境界都是“無招勝有招”,一切有具象的招式都是下乘。到了這種境界,草木皆可傷人。金庸小說中描寫劍魔獨孤求敗,其武功修爲有四個階段。第四個階段臻至化境,“四十歲之後不滯於物,草木竹石均可爲劍。自此精進,漸入無劍勝有劍之境。” 從利劍,到軟劍,再到無鋒重劍,最後是草木竹石皆可爲劍,其實就是一個將具體事物不斷抽象的過程。最開始時,武功需要用劍的鋒利去展現;接着變成只需要軟劍;然後連劍刃也不需要了,重劍無鋒,大巧不工;達到最高境界後,掌握了武力的真諦,可以將武功通過任何形式展現出來,“無劍勝有劍”。類比到架構設計上來,從最開始的C語言輸出hello world, 到執着於“PHP是不是最好的語言”,再到對各種設計模式,架構思維瞭如指掌,最高境界就是能夠應對任何複雜的業務需求,將架構設計做得像藝術品一樣。什麼時候能達到這種境界啊。流着口水YY中......

 


  • 看山是山,看山不是山,看山還是山

 

宋代禪宗大師青原行思提出參禪的三重境界:參禪之初,看山是山,看水是水;禪有悟時,看山不是山,看水不是水;禪中徹悟,看山仍然山,看水仍然是水。直白一點就是說:人之初,性本善,大家剛開始的時候都是一張白紙,都很單純,即,看山是山;隨着閱歷逐漸豐富,經歷過一些滄桑後,感覺這個世界太艱難了,累覺不愛,看水不是水;心態繼續蛻變,返璞歸真後,重新以單純的角度來看待這個世界,頓悟,看山仍然是山,看水仍然是水。這是這三重境界的本意。

 

這句禪語還可以用於抽象思維與具象思維的聯繫。“看山是山”,即分析具體問題;“看山不是山”,就是將具體的問題進行提煉,抽象,形成一套架構設計和解決方案,可以適用於所有類似的具體問題;“看山還是山”,就是一個驗證解決方案的過程。將抽象出的架構用於解決具體的問題,根據效果來不斷改進,優化原有的設計。這是一個從具象思維到抽象思維再回到具象思維的過程,我認爲任何架構的設計都是基本符合這個過程的,抽象分析和具體分析,二者缺一不可。舉個工作中的例子:同事A針對一個問題設計出了兩套解決方案,這兩套方案本身是完全對立的,而且由於問題的複雜性,兩套方案都無法完美解決問題,需要評估各自的效果。同事A僅僅從抽象的理論上分析,兩套方案的效果是一樣的。但實際情況卻是:因爲不同位置的曝光率不同,會導致兩套方案的效果出現極大的差距。可以簡單總結下:抽象理論分析與具體問題分析都需要進行,並且二者的效果是互補的。

 

  • 大道至簡

 

大道至簡,國外叫做奧卡姆剃刀原理,即解決方案應該趨於簡單而不是趨於複雜。這個原則說起來容易,做起來卻無比艱難。軟件工程的問題越來越複雜,沒有辦法依賴簡單的答案來解決。提一下“沒有銀彈”這篇經典的論文。該論文討論了次要複雜度和必要複雜度。次要複雜度是指由人們本身所產生的問題,比如使用C++,java還是python. 這類問題是可以被比較快速地解決的。必要複雜度是指軟件本身要解決的問題,比如複雜的業務場景,海量用戶訪問等等。設計模式有很多種,但沒有一種是萬能的。從複雜的問題中提取要點,不斷進行抽象,再結合具體問題進行分析,在保證滿足業務需求的前提下,儘可能地簡化方案,優化方案,再考慮到未來可能變化的業務場景,避免過度設計。這大概就是架構師的功力所在了吧。

 

  • 架構設計中的二八原則

 

二八原則適用於很多地方:20%的時間完成80%的工作,剩下20%的工作可能需要80%的時間才能完成。架構設計中需要考慮到各種異常情況的處理,很多時候異常情況的處理纔是最花費時間的。但我認爲異常處理可能是非常關鍵的。我們花20%時間完成了80%的工作,同樣的,競爭對手也可以在很短的時間內完成80%的工作。那麼,最後20%就是我們的可能的優勢所在。好的用戶體驗,不只是讓用戶用得舒服,還需要不會讓用戶感到不舒服。那麼,對異常情況的處理,可能正是保證體驗的關鍵所在。

 

  • 最近用到的架構思想

 

  1. 配置化 配置化帶來高度靈活性

  2. 模塊解耦合 每個模塊只做一件事,保持單純

  3. 讀寫分離 提高性能的關鍵

  4. cache 離業務層越近,cache命中程度越高,但可複用性越低

  5. 讀寫一致性 海量服務優先保證性能,會故意損失一部分實時的數據一致性,但會絕對保證最終數據是一致的

 

今日薦歌:

《Over My Head》Sum 41

《真正Hip Hop》 歐陽靖

《老伴》 李榮浩

 

本文章歡迎轉載,轉載請註明微信公衆號和作者。微信公衆號:互聯網與作曲家. 作者:neil 版權所有,翻版必究!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章