
避免架構失敗最好的辦法是讓項目組全體成員共同擁有架構;而不是架構師把架構當作我的的私有財產,拒絕他人染指。數據庫
李智慧,目前任職宅米網CTO,曾供職阿里巴巴與英特爾亞太研發中心,從事大型網站、分佈式系統、大數據平臺方面的研發工做。著有《大型網站技術架構 核心原理與案例分析》一書。編程
CSDN:你是如何走上技術這條路的?談談畢業這些年來在工做中的收穫和體驗。安全
李智慧:我大學學工業自動化,在校的時候一個偶然的緣由在圖書館看到一本C語言編程的書,今後迷上編程,可是畢業後從事的倒是儀表工程師的工做。工做四年之後,難以割捨對計算機的熱愛,報考了北京工業大學計算機專業的碩士研究生,然而,錄取的時候卻被調劑到熱能工程專業,因而又稀裏糊塗讀了三年汽車內燃機碩士。幸運的是,碩士畢業後我找到了一份軟件工程師的工做,開始了本身的職業編程生涯,而這時我已年近30,距離大學畢業也已經7年了。架構
因此個人工做體驗就是:若是你真的喜歡同樣東西,你不會在意爲她經歷多少曲折,蹉跎多少歲月。你不會盲從所謂過來人的經驗之談「30歲之後就不能編程了」,你會心甘情願把青春獻給她,無怨無悔,無畏於任何結局。併發
CSDN:你目前最關注哪些技術領域?運維
李智慧:我目前比較關注的是雲計算與大數據方面的技術。分佈式
- 一方面,雲計算那種爲整個星球提供計算能力的願景讓我癡迷;
- 另外一方面,我比較喜歡研究雲計算技術中用到的各類分佈式技術,在阿里巴巴工做期間也申請過幾項分佈式計算的發明專利。
我在Intel工做期間開發過一些大數據相關的產品,也爲開源大數據平臺Apache Spark貢獻過代碼。大數據技術雖然如今火了又火,可是我認爲大數據能提供的價值尚未爆發出來,將來計算機與互聯網能夠爲人類提供更多個性化服務和主動服務,實現某種意義上的人工智能,如今作的還遠遠不夠。ide
CSDN:你曾在13年寫了《大型網站技術架構 核心原理與案例分析》一書,能分享下寫書的緣由?以及簡單介紹下這本書的特點等。高併發
李智慧:我開始寫做《大型網站技術架構:核心原理與案例分析》這本書是在2012年,那一年中國互聯網出了幾件比較有影響的事,京東的促銷宕機事件,12306的春運宕機事件,以及多個重要網站的泄密事件等等,所以我以爲有必要普及下互聯網技術架構的核心原理與基本方法,讓新入行的互聯網工程師們少走些彎路。工具
由於定位在互聯網技術知識普及,因此整本書的行文都比較淺顯易懂,只須要一些基礎的專業知識就能夠順利閱讀。這本書上市之後也獲得廣大讀者的承認,不少讀者私信我說受益良多,也有些學校選用這本書作教科書,還得到過CSDN 2013最受讀者歡迎原創圖書獎、電子工業出版社2014最暢銷圖書獎。我本身很高興這本書能爲中國互聯網技術進步貢獻一點力量。
CSDN:你我的對架構/軟件架構的理解是?
李智慧:關於架構的定義有不少,我本身比較喜歡這個:「架構是最高層次的規劃和難以改變的決定」。
軟件架構設計應該在一個很高層面上進行,在作架構設計的時候:
- 考慮產品需求和功能特性;
- 考慮性能、可用性、伸縮性、擴展性、安全性、運維監控、集成發佈等非功能特性;
- 開發團隊經驗技能、組織分工、進度安排等項目管理方法;
- 產品運營目標、業務組織架構,使技術架構和產品特色與運營方案更好匹配;
- 甚至要結合技術發展趨勢、公司戰略目標、我的和團隊發展方向,爲產品、我的、團隊、公司將來可持續發展去設計一個堅實而又有彈性的軟件架構。
CSDN:如何最大限度避免一個架構設計的失敗?
李智慧:我我的感受無所謂失敗的架構,正如沒有完美的架構。只要產品還能繼續開發、維護、使用,再糟糕的架構也不能稱爲失敗的架構;而一個產品若是開發中難覺得繼,交付後難以使用,也毫不會僅僅是由於架構設計的失敗。
而要避免糟糕的架構設計,以及避免糟糕的架構設計給項目帶來更多的傷害,我認爲最好的辦法就是讓項目組全體成員共同擁有架構;而不是架構師把架構當作我的的私有財產,拒絕他人染指。架構師設計架構,而後項目組共同討論修正,經過討論讓每一個工程師都參與到架構設計的過程當中,讓每一個工程師都理解架構並聽從架構設計去開發。這樣即便架構設計存在問題,也會在開發過程當中暴露出來,發現問題的工程師會積極和架構師討論進一步修正完善架構。
CSDN:大型網站有哪些典型的故障以及一般有哪些解決之道?
李智慧:網站的故障千奇百怪,各類難以想象,可是大多數故障都是處理高併發請求而直接或間接致使的。不少問題在用戶訪問量小的時候,根本不會成爲問題,好比線程鎖的問題,磁盤爭用的問題,數據庫負載高的問題等,可是用戶訪問量一高,就會爆發出各類故障。高併發場景下的故障很難經過通常的功能測試發現,性能測試能夠發現一部分問題,可是必定有一些問題只有在實際的高併發場景中才會出現。
淘寶的技術堪稱國內翹楚,可是每一年雙十一爲全球電商網站交易額創出新高的同時,也是淘寶技術部壓力最大的時候,全部工程師那一天無不戰戰兢兢、提心吊膽,不到狂歡結束,誰也不知道問題會不會出在本身寫的某一行代碼上。我在《大型網站技術架構:核心原理與案例分析》中專門有一章講「大型網站典型故障案例分析」,有興趣的同窗能夠參考。
CSDN:如何學習大型網站的架構技術?
李智慧:學習大型網站架構技術一個比較好的辦法是去大型網站工做。可是,大型網站進入門檻很高,並且內部分工明確,只有少數人能完整了解網站總體架構,你很難成爲那少數的一些人。
學習大型網站架構技術一個更好的辦法是去一家創業公司,伴隨着這家創業公司逐步成長,成爲大型網站,你參與其中,天然就學習了大型網站的架構技術。但是,創業公司千千萬萬,哪一家才能成長爲大型網站?
因此,學習大型網站架構技術最好的辦法就是閱讀《大型網站技術架構 核心原理與案例分析》,(笑),而後在本身的工做中實踐和提升。
CSDN:一名優秀的網站架構師必須具有哪些能力?
李智慧:良好的編程能力,雖然架構設計不須要編程,雖然不少架構師平常工做也不須要編程,可是若是你的編程能力不過硬,你幾乎沒法設計一個良好的架構,設計出來也難以在開發過程當中落實。最主要的,和一羣挑剔的工程師合做,若是架構師缺少良好的編程能力,幾乎沒有容身之地,遑論開展工做。
良好的溝通能力,架構師不是把架構設計出來就完事了,必需要讓項目組成員承認架構設計並在開發過程當中落實架構設計,必需要和項目組成員頻繁溝通,在各類質疑、建議、疑惑中推動工做。同時,架構設計須要綜合考慮產品、業務以及公司各方面的狀況,須要和相關團隊密切合做。總之須要處理大量的溝通協調工做。
此外,有一些不是必須具有,可是具有了會如虎添翼的能力
- 戰略眼光,跳出架構和產品,在一個更高的層面審視架構和產品,會得到一種更開闊的胸懷和格局去看待本身的工做。
- 英文能力,緊跟世界潮流,得到技術領域最新發展動態的第一手資料,對本身的工做有更多自信和思考。
- 項目管理,雖然有項目經理去管理項目,可是架構師懂項目管理,能夠更好推進項目健康發展。
CSDN:在你的書中曾提到,「先成就他人,再成就本身」、「剛開始加入的時候不要急於證實本身,要先融入」、「最好的獎勵就是目標的達成,最大的懲罰就是目標沒實現」、「技術是要解決問題,可是咱們要關心的是解決問題的人」、「學會妥協」、「越激烈的爭辯表明越關心這個問題」,對於入門或初級的架構師你有什麼心得和經驗可分享?
李智慧:要敢於承擔責任,不要懼怕失敗。不要怕本身的能力不足以勝任工做,既然公司安排了你作架構師,就是通過反覆權衡慎重考慮的,你就是目前最適合這個職位的人。不要懼怕本身犯錯給公司帶來損失,爲員工犯錯承擔必要的損失是公司應付的成本之一。相對這些損失,鍛鍊骨幹、磨合團隊、打造敢拼敢闖的企業文化對公司的長遠發展更重要。
要虛心學習,不要不懂裝懂。做爲新晉架構師,必定有許多不會的技能技巧,不要由於懼怕被同事質疑本身的能力而不懂裝懂。不懂裝懂即便能糊弄過如今,你也不會有更加美好的未來。
CSDN:請談一下當前架構師所面臨的挑戰。
李智慧:架構師是一個很是有挑戰的工做:
- 一方面,架構師須要有足夠的閱歷和經驗,在某些領域有多年的積澱和訓練,才能對業務問題有深刻的理解、對技術方案有充分的把握、對開發過程有嫺熟的掌控;
- 另外一方面,架構師又必須對新技術保持足夠的敏銳和快速學習的能力,這樣在快速發展的技術變革面前才能保持持續創新能力。
這兩方面的要求對多數人而言是衝突的,不少人年輕的時候擅長學習新知識而缺少經驗,年長後擅長總結經驗而對新知識反應遲鈍。架構師必需要克服這種衝突,在擁有經驗的同時不停更新本身的知識。Stay hungry, Stay foolish。
CSDN:身爲CTO您從技術人員轉到管理人員,有什麼技巧?
李智慧:我作架構師的時候,發現若是開始能設計一個較好匹配業務的架構,並能和項目組成員就係統架構達成共識,整個項目開發過程並不須要投入太多精力,只要關注項目不要偏離目標便可。我相信大道應該至簡,觸類能夠旁通。我作CTO也沿用這一思路,和技術部同窗們就組織架構、技術體系、工做流程、業務重點達成一致並推行實踐,而不是企圖將我的意志加諸整個團隊身上。
CSDN:您如今天天還編程嗎?
李智慧:我在作CTO以前,在離開Intel前的最後三個月大概寫了一萬行代碼。可是作CTO以後沒有爲公司寫過一行代碼,我會review代碼,review架構設計,可是我不會寫代碼,我以爲每一個人都應該也有責任把本身的工做作好,CTO的工做職責不是寫代碼,CTO寫代碼是一種越俎代庖。
可是CTO應該編程以保持技術敏感性,他能夠寫一些小項目作一些技術驗證,能夠參與某個開源項目的開發。甚至也能夠爲公司寫一些代碼,可是最好不要將這些代碼提交到公司的代碼庫。
CSDN:您做爲技術人員,能否分享下您的學習知識或技能的方法?
李智慧:軟件開發領域是一個變化特別快的領域,新的技術新的工具層出不窮。若是工程師不能快速學習新知識就會被淘汰,若是技術領導者不能快速學習新知識甚至會成爲團隊進步的障礙。
學習知識技能首先須要時間,工程師應該用工做時間的20%去學習,若是工做時間抽不出空學習,能夠用加班時間學習,若是加班時間也被安排滿滿的,至少能忙完這一陣(本身熟悉了狀況後)能夠有機會安排時間學習。若是這種機會和但願都沒有的,若是你對本身負責的話,我建議你仍是辭職吧。
學習知識技能其次須要方法,工程師應該創建一套本身的知識體系,而後不斷把新知識新技能歸入這套體系中。這套體系成熟之後,讀一本本身領域內的技術書,聽一次本身領域內的技術講座,須要學習的新知識不會超過20%,這樣讀書聽講座就會很輕鬆,也很容易就能吸取這些新知識,進入良性循環。至於如何創建本身的知識體系,每一個人都有不一樣方法,可是有一點是共同的,那就是學校裏的基礎專業知識必定要掌握好。