互联网架构优化
不管是做一個新的系統,還是重構優化老的系統,需求整理是第一位的。 我們可以通過一系列的問題來厘清需求,分清主次,比如:
- 這個需求一定要做么?不做會怎么樣?
- 這個需求帶來的系統代價有多大,是否值得,能否有變通的方法
- 這個需求可以下次做么?
特別要提到,如果是重構系統,很多以前的需求可能都不存在了,這樣可以減少很多設計的時候的限制,甩掉這些負擔,新設計能夠輕裝上陣
放眼外部架構
基于一個原則:世界上大部分的問題,別人已經遇到過,并且已經有了方案,雖然可能不是最優的,但也是可以學習的。學習的來源,主要有以下幾個:
- 公開的論文、文章,特別是一些著名公司的系統設計論文,很有參考價值。
- 對類似系統熟悉的同事朋友
- 經典的書籍
平時對外部架構的學習積累是很重要的,這樣在你需要設計一個新系統的時候,就會源源不斷的有靈感,遇到類似的問題,想想別人是怎么抉擇的,從而得出比較好的設計。
架構設計的原則
系統越簡單越好
簡單不是簡陋,是通過對需求的深刻理解,精心設計,從而保持系統的簡單。簡單,能帶來很多好處:
- 實現起來不容易出錯,是一個可控的系統
- 可理解程度更高,維護簡單
- 容易擴展
這個原則被很多架構設計者熟知,但要做到并不容易,很多系統設計之初是一個簡單優雅的系統,到后來越來越臃腫。主要的原因,在我看來,有可能一開始對需求沒有深入理解,漏掉了一些需求,或者是對系統的考慮不全面,導致有重大缺陷,后來為了補坑,讓系統越來越復雜。
復雜的系統拆分成簡潔的子系統,并保持子系統間交互越清晰越好
復雜的系統總是容易出錯、脆弱的,如果能夠拆分就盡量拆分,并保持系統間的交互越清晰越好。模塊之間常見的一種接口是數據,在我看來這是很強壯的。Unix系統一個突出的優點:工具之間輸入輸出的就是通過管道來進行,用多個小的工具就拼成靈活而強大的系統:
svn status|egrep ".cc|.h" |egrep "A|M" | awk '{print $2}' |xargs python cpplint.py
利用所有可利用的成熟系統
一個新系統設計的時候的周邊生態系統和老系統設計的時候,一般都有較大的不同。業界有很多非常成熟的開源框架系統,把設計建立在這些成熟系統上,是站在巨人肩膀上,可以站的更高,做出更先進穩定的系統。
利用這些系統,新架構會更簡單,可靠,強大。
架構中要留下擴展演進的能力
系統架構所滿足的需求有可能經常變動,所用的資源也是如此。因此在系統設計的時候,需要考慮架構擴展演進的能力,留下滿足未來空間的可能,但也是要平衡好,不要太多地增加現有系統的復雜性。
架構要有監控運營
當你實現的系統最終跑起來的時候,你需要了解他的運行情況是否符合你的預期,是否存在缺陷,哪里可以優化,內置的監控運行模塊會幫你的大忙。而且在設計之初就需要考慮這一點,如果后來系統已經實現好了,再回頭來加,難度要大很多,而且可能讓系統比較丑陋。
《UNIX編程藝術》這本書里一些重要的原則非常值得借鑒:
- 使用簡潔的接口拼合簡單的部件
- 清晰勝于機巧
- 設計時考慮拼接組合
- 設計要簡潔,復雜度能低則低
- 除非確無它法,不要編寫龐大的程序
總結
- 上一篇: stm32固件库介绍_STM32固件库使
- 下一篇: C语言文件打开方式简介