新項目上線,用戶量不斷增長,工做中繼續不斷髮現問題,解決問題。花一點時間來總結一下本身對架構設計的理解。html
武俠小說中的「萬劍歸宗」----極致的抽象思惟java
一點題外話。本身從小就是武俠迷,金庸古龍的經典做品都看過不少遍。最喜歡的女主,是《倚天屠龍記》中的趙敏:敢愛敢恨,邵敏郡主。其扮演者黎姿,是我心目中兩位女神之一,性格與趙敏很是類似。另外一位女神是周慧敏。最喜歡的男主,當屬楊過:楊康之子,「有過則改之」,曾經年少輕狂;洗盡鉛華以後,神鵰大俠悟出黯然銷魂掌,力挽狂瀾。python
武俠小說中,武功的最高境界都是「無招勝有招」,一切有具象的招式都是下乘。到了這種境界,草木皆可傷人。金庸小說中描寫劍魔獨孤求敗,其武功修爲有四個階段。第四個階段臻至化境,「四十歲以後不滯於物,草木竹石都可爲劍。自此精進,漸入無劍勝有劍之境。」 從利劍,到軟劍,再到無鋒重劍,最後是草木竹石皆可爲劍,其實就是一個將具體事物不斷抽象的過程。最開始時,武功須要用劍的鋒利去展示;接着變成只須要軟劍;而後連劍刃也不須要了,重劍無鋒,大巧不工;達到最高境界後,掌握了武力的真諦,能夠將武功經過任何形式展示出來,「無劍勝有劍」。類比到架構設計上來,從最開始的C語言輸出hello world, 到執着於「PHP是否是最好的語言」,再到對各類設計模式,架構思惟瞭如指掌,最高境界就是可以應對任何複雜的業務需求,將架構設計作得像藝術品同樣。何時能達到這種境界啊。流着口水YY中......設計模式
看山是山,看山不是山,看山仍是山微信
宋代禪宗大師青原行思提出參禪的三重境界:參禪之初,看山是山,看水是水;禪有悟時,看山不是山,看水不是水;禪中徹悟,看山仍然山,看水仍然是水。直白一點就是說:人之初,性本善,你們剛開始的時候都是一張白紙,都很單純,即,看山是山;隨着閱歷逐漸豐富,經歷過一些滄桑後,感受這個世界太艱難了,累覺不愛,看水不是水;心態繼續蛻變,返璞歸真後,從新以單純的角度來看待這個世界,頓悟,看山仍然是山,看水仍然是水。這是這三重境界的本意。架構
這句禪語還能夠用於抽象思惟與具象思惟的聯繫。「看山是山」,即分析具體問題;「看山不是山」,就是將具體的問題進行提煉,抽象,造成一套架構設計和解決方案,能夠適用於全部相似的具體問題;「看山仍是山」,就是一個驗證解決方案的過程。將抽象出的架構用於解決具體的問題,根據效果來不斷改進,優化原有的設計。這是一個從具象思惟到抽象思惟再回到具象思惟的過程,我認爲任何架構的設計都是基本符合這個過程的,抽象分析和具體分析,兩者缺一不可。舉個工做中的例子:同事A針對一個問題設計出了兩套解決方案,這兩套方案自己是徹底對立的,並且因爲問題的複雜性,兩套方案都沒法完美解決問題,須要評估各自的效果。同事A僅僅從抽象的理論上分析,兩套方案的效果是同樣的。但實際狀況倒是:由於不一樣位置的曝光率不一樣,會致使兩套方案的效果出現極大的差距。能夠簡單總結下:抽象理論分析與具體問題分析都須要進行,而且兩者的效果是互補的。性能
大道至簡優化
大道至簡,國外叫作奧卡姆剃刀原理,即解決方案應該趨於簡單而不是趨於複雜。這個原則提及來容易,作起來卻無比艱難。軟件工程的問題愈來愈複雜,沒有辦法依賴簡單的答案來解決。提一下「沒有銀彈」這篇經典的論文。該論文討論了次要複雜度和必要複雜度。次要複雜度是指由人們自己所產生的問題,好比使用C++,java仍是python. 這類問題是能夠被比較快速地解決的。必要複雜度是指軟件自己要解決的問題,好比複雜的業務場景,海量用戶訪問等等。設計模式有不少種,但沒有一種是萬能的。從複雜的問題中提取要點,不斷進行抽象,再結合具體問題進行分析,在保證知足業務需求的前提下,儘量地簡化方案,優化方案,再考慮到將來可能變化的業務場景,避免過分設計。這大概就是架構師的功力所在了吧。spa
架構設計中的二八原則架構設計
二八原則適用於不少地方:20%的時間完成80%的工做,剩下20%的工做可能須要80%的時間才能完成。架構設計中須要考慮到各類異常狀況的處理,不少時候異常狀況的處理纔是最花費時間的。但我認爲異常處理多是很是關鍵的。咱們花20%時間完成了80%的工做,一樣的,競爭對手也能夠在很短的時間內完成80%的工做。那麼,最後20%就是咱們的可能的優點所在。好的用戶體驗,不僅是讓用戶用得舒服,還須要不會讓用戶感到不舒服。那麼,對異常狀況的處理,可能正是保證體驗的關鍵所在。
最近用到的架構思想
配置化 配置化帶來高度靈活性
模塊解耦合 每一個模塊只作一件事,保持單純
讀寫分離 提升性能的關鍵
cache 離業務層越近,cache命中程度越高,但可複用性越低
讀寫一致性 海量服務優先保證性能,會故意損失一部分實時的數據一致性,但會絕對保證最終數據是一致的
今日薦歌:
《Over My Head》Sum 41
《真正Hip Hop》 歐陽靖
《老伴》 李榮浩
本文章歡迎轉載,轉載請註明微信公衆號和做者。微信公衆號:互聯網與做曲家. 做者:neil 版權全部,翻版必究!