架構就像談戀愛,沒有好不好,只有合不合適
十二年前,有一個人剛剛做架構師。
他以為架構就像編程一樣,先學習一下基本的語法,再研究一下細節和原理,然後慢慢地進行實踐就能掌握架構的奧秘。
可是他發現自己太天真了。在後來的工作中,他斷斷續續地用了8年時間才掌握架構設計的精髓。
他以為自己天資愚笨。
後來他成為一名資深技術專家,發現很多新手面對架構設計,居然遇到了和自己當年一模一樣的困惑和瓶頸。
這讓他猛然發現,並不是因為自己太笨,而是架構本身複雜靈活的特質導致了這一現象。
而多年過去,大學的課程里卻依然沒有教他們怎麼學習架構設計;市面上也沒有一本書可以系統地教他們。
沒有找到符合他期望的內容,於是他開始將自己十多年的工作經驗總結成一套完善的架構設計方法論,一邊通過指導其他人來傳遞這套方法論,一邊將其運用到不同的業務場景中反覆驗證和完善,先後成功應用到了搶購、用戶中心、遊戲、諮詢、中間件等不同的業務場景中。
這位資深技術專家就是李運華。
曾就職於華為和UCWEB,擁有14年的開發經驗,超過10年架構經驗。且先後擔任軟體開發工程師、系統分析師、架構師和技術leader。
他曾多次在InfoQ上發表高質量的技術文章,這裡是他在InfoQ上寫的一篇十萬加。
起初,這套方法論最先實踐於李運華的公司內部,後來經過多次打磨在極客時間上線,成為超過2.6萬人學習的架構專欄。
在更新的過程中,他又根據用戶的反饋多次調整內容。
只是為了讓更多的人真正地學好架構設計。
經過多次迭代,這套方法論成功出版實體書——《從零開始學架構》,並在極客商城獨家預售。
都在教你做架構,卻很少有人教你做架構師
這兩個有區別嗎?
有。
相當一部分架構書是教我們落實具體的架構環節,就像一個搜索引擎,當你有疑問時,只能點對點地解答你的疑惑,卻不能從根本上幫你建立系統的架構知識面。
而這本書立足於作者多年的從業經驗,教你架構設計的方法論。不論你是前端還是後端,都可以化用這套方法論舉一反三地進行架構學習與實踐,成長為一名真正的架構師。
多年的從業經歷讓李運華髮現,很多人常常會陷入這樣的誤區:只有頂尖技術公司的架構才是好架構。所以在設計的時候枉顧實際情況,刻意向這些公司看齊,不僅浪費了大量精力,最終的設計還滿足不了業務的需要。
實際上,就連最初的淘寶網站,都是在沒考慮技術、性能等情況下直接買的,因為那個時候,「網站的儘快上線」是淘寶最重要的訴求。
架構設計的主要目的在於解決複雜度帶來的問題。
為了有針對性地進行架構設計,我們首先需要了解架構的複雜度來源於什麼。
1、人類孜孜不倦追求的高性能。
生活越來越便捷,就是一種具象化的性能優化。手機從模擬信號到2G、3G、4G;火車從蒸汽機車到內燃機車,再到電氣機車……
所有性能提高的背後,都是方法的優化和系統複雜度的提高。
2、為了防止意外的高可用。
系統的高可用方案五花八門,但本質上卻是一致的,那就是通過「冗餘」實現高可用。
通俗點來說,就是一台伺服器不夠,那就兩台;一個通道可能會故障,那就設置兩個、三個或者更多。
3、為了應對變化的可擴展。
不論是軟體開發還是系統開發,一定會有需求變化。可擴展性就是為了保障在不需要重構的情況下,為變化提供實現的可能。
高性能、高可用和可擴展這三個方面是架構師在工作中需要著重考慮的環節,這三點直接作用於架構設計內部。
但架構師同樣需要注意外部環境對架構設計的影響,比如安全性、成本和規模等。
這套方法論具體是怎麼指導架構設計的?
做事情要一針見血。
對架構設計來講,找出業務場景的短板就是那關鍵性的一針。
上面分析了架構為什麼複雜,其實就是在說,進行架構的時候需要考慮哪些因素。
面對實際的業務場景,我們要做的第一步就是分析:目前的架構毛病在哪,是需要高可用?還是高性能?還是可擴展?亦或是安全要求?
比如社交媒體就需要考慮高可用和高性能,而金融系統在安全方面要求會更高。
確定架構方向之後,第二步是準備幾套備用方案,與開發、運維等部門討論,選擇針對實際情況最優的那套方案。
書中為我們搭建了一個虛擬場景——前浪微博,一步步展開來闡述上面的方法論。
假設前浪微博的中間件團隊只有6人,整體熟悉Java語言,有一個同事C/C++很牛叉。開發平台為Linux,資料庫為MySQL。業務系統為單機房部署。
雖然發展很快,但系統之間協作效率卻很低。各個子系統都是通過介面調用。一旦出現問題,很難進行定位。
這個架構設計問題的根源在於各個業務子系統強耦合,信息隊列系統剛好可以滿足子系統的解耦。
架構之所以難,就在於它的靈活多變。高性能、高可用、可拓展、安全性和規模等幾乎不可能樣樣兼顧。
所以判斷複雜度,分好這幾點之間的權重是關鍵性的第一步。
1、是否需要高性能?
雖然現在前浪微博的數據量級不需要高性能,但考慮到發展趨勢,預留一定的系統容量才能應對未來的業務增長。將設計目標定為現在峰值的4倍是較為合理的。
2、是否需要高可用?
信息審核、用戶服務都是社交媒體很關鍵的業務,前浪微博也不例外。所以信息隊列需要高可用性,包括信息寫入、消息存儲,消息讀取等。
3、是否需要高擴展?
前浪微博所設置的消息隊列功能很明確,基本無需擴展。
接下來,初步設計一下備選方案並分析一下優缺點吧!
綜上分析,前浪微博的信息隊列系統需要高性能消息讀取、高可用消息寫入、高可用消息存儲和讀取。
這裡有3種備選方案:
1、採用開源的Kafka。本身就是成熟的開源信息隊列方案,性能好。
2、集群+MySQL存儲。採用數據分散集群架構,集群中的伺服器進行分組,每個分組包含一台主MySQL和一台備MySQL。備伺服器只有在主伺服器宕機的情況下才使用。
3、集群+自研存儲方案。在備選方案2的情況下,將MySQL換為自主研發的文件存儲和複製方案。
接下來,經過和開發、運維、測試和業務主管的討論選擇,我們列一個表格進行360°無死角評比。
書中擬定了方案2,並且詳細說明了優缺點。
如果是你,你會怎麼選擇呢?
十四年工作經驗結晶,只為了幫你落地架構實戰
架構並不能流於表面,這本書告訴我們架構複雜度的來源以及設計流程之後,主要圍繞高性能、高可用和可擴展三個方面進行了技術詳解,以便在工作中實現方案落地。
難能可貴的是,書中除了用實例教我們如何實現架構設計最優化,還用作者的切身經驗教訓告訴我們不能做什麼,避免踩坑。
所以這本書具有相當強的實戰性。
一位有著六年工作經驗的Java工程師這麼評價書里的內容:「工作任務上,確實會遇到一些內容是專欄有提過的……一套流程下來,就清楚要做什麼了,有了方向,再考慮具體用什麼技術。其中確實有好多內容,是我在其他技術書籍上從沒有看過的,從來沒有!」
《從零開始學架構》知識腦圖截取
李運華當初構思這套方法論的目的就是為了指導員工更好地進行架構工作。既然出現在自己員工身上的問題是大同小異的,那就說明其他程序員也面臨同樣的苦惱。
為何不把這套方法論教給更多人,讓他們也可以從中收益呢?
書中對架構設計流程,高可用、高性能和可擴展技術的面面俱到既是對自身工作經驗的寶貴總結,也是指導更多架構師繼往開來的葵花寶典。
《從零開始學架構》圖書已經由極客商城獨家預售,原價99,現價只需84元。
還有超值「圖書+專欄」套裝組合,原價199元,現價149元。
活動僅限3天!
現在下單,即可獲得這套經過成功驗證的方法論。
※Facebook開發出可自動掃描代碼找Bug的工具;中國發布自己的域名系統基礎軟體 「紅楓」;HHVM將停止支持PHP丨Q新聞
※關於區塊鏈,有哪些不可忽視的安全問題?
TAG:InfoQ |