互聯網架構師必須具備的技能

對於任何一個軟件開發人員來說,架構師都是一個令人嚮往的角色。就連世界首富比爾蓋茨在2000年卸任公司ceo的同時,也擔任了微軟公司的榮譽角色“首席軟件架構師”,可見“架構師”這一稱謂的吸引力。那麼作爲一名互聯網架構師必須具備的技能有哪些呢?YJBYS小編爲大家講解如下,歡迎查看!

互聯網架構師必須具備的技能

架構師是公司的“金領”,有着非常高的收入,很少需要考慮生存的問題,從而有更多的精力思考關鍵技術問題,形成“強者愈強”的良性循環。部分優秀的開發人員在工作了一定時間後,就要開始考慮自己的未來到底向哪個方向發展。如果開發人員的溝通能力強過技術能力,在補充一定的項目管理知識後,可以向技術管理的方向轉型。如果其對技術一直很感興趣,而溝通能力也不弱,則可以試着進一步加強技術修養,以期向架構師的方向發展,最終“修成正果”。

那麼,到底什麼是架構師呢?所謂的架構師,應該是一個技術企業的最高技術決策者。他主要負責公司軟件產品或軟件項目的技術路線與技術框架的制訂。好的架構師都是善良的獨裁的人,具有很強的技術、良好的寫作能力、良好的口頭表達能力,能夠在各個層次進行溝通。從開發人員到架構師的成長應該是階梯式的,一般來講開發人員在剛剛開始工作時只能開發簡單的獨立軟件模塊,慢慢的隨着經驗的增長,他開始接觸一些相互之間有信息傳遞的模塊,而後來,他會發現自己接到的開發任務已經不是一個獨立的單體,這些任務由一些專門的軟件部分組成,可能包含數據庫,工作流引擎,消息服務等等各種功能模塊,可能分佈在不同的服務器上,所有的部分協同起來,完成軟件功能。而這時候,體系結構的好壞將直接決定了系統的性能和可擴展性,而就在這時候,這名優秀的開發人員也開始思考架構師應該思考的問題了,或者說,他向成長爲架構師的道路邁出了一大步。

什麼是架構師最具價值的技能呢?就是要了解不同的知識,做一個“雜家”或者說“博學家”。當然,如果你的數據庫技術非常棒,或者你在工作流引擎方面具有不可超越的專家知識,那也是很不錯的。好的架構師有好多都是從專家成長過來的。但是,這不是架構師應該做的事情,架構師應該做的是瞭解所有的東西,既瞭解技術的宏觀面,又瞭解技術的細節。真正的架構師不僅僅要了解軟件,也要了解硬件,在關鍵的部位使用合適的硬件來取代軟件,可以成倍甚至成百倍的提高整個系統的效率。下面我將會以互聯網行業對的架構師的要求爲例,向大家講解作爲架構師應該具備的知識。

互聯網行業是當前最激動人心的行業之一,很多的創新都來自於這個行業,而每一個大型的網站如google,yahoo,myspace等都需要解決一個非常複雜的問題,就是網站的分佈式向外擴展(scale out)的問題。解決這個問題,需要最優秀的架構師對業務進行剖析,利用軟硬件將網站進行重構,甚至根據業務研發相應的分佈式技術,解決網站複雜的分佈式計算的問題。如果你想在這個行業中成爲一名架構師的話,需要至少掌握網絡知識,硬件,軟件,網站優化等方方面面的知識:

  1.網絡知識

當前的軟件已經絕對不是那種僅僅跑在一臺單機上的孤立應用了。不僅僅是在互聯網行業,任何一個行業的軟件,都要求其具有網絡功能。因此,網絡知識是架構師必備的知識。我們所說的網絡知識,不僅僅包括tcp/ip,http等互聯網行業常用的軟件協議,也包括網絡規劃,甚至更具體的說,根據網站應用所處的地理環境進行網絡規劃。比如人們常說:“這世界上最遠的距離不是生與死的距離,而是電信到網通的距離”(笑)如果應用是建立在中國的,就要考慮電信用戶和網通用戶訪問網站的速度應該都比較快纔可以。這時候的解決方案可能有多種,比如採用cdn(content delivery network內容分發網絡)使得網站的內容發佈到離用戶最近的服務器,又可以採用把服務器放在一些所謂的雙線機房中,甚至將幾種方案結合起來使用。這些都統統歸到網絡知識中。做爲公司的架構師,要對這些知識都有所瞭解,纔有助於在遇到問題時找到最佳答案。

  2.硬件知識

瞭解硬件的極限,是架構師的基本功。我見過一些人,他們的眼中軟件硬件都是沒有極限的,需要資源就申請,系統性能下降了就買更高級的設備。然而,硬件的性能有很大一部分取決於i/o設備。而這些i/o設備依靠的都是機械物理運動,這種運動是有極限的。因此當資源訪問量增大到一定的程度時,這種物理運動將成爲瓶頸。比如說,在開發網站的過程中,記錄訪客的狀態是一件很重要的事情,一般來說可以使用httpsession來記錄。而httpsession的存儲問題將是一個很大的挑戰,尤其是多機共享session時,將httpsession存成文件並通過多機共享或網絡備份的方式來解決分佈式的問題是常用的方案,然而,架構師必須考慮到這種方案是有i/o極限限制的,很難擴展到超過一定規模的大型網絡。同時,架構師應該瞭解目前最近的硬件發展是否對軟件系統會造成一定的影響,比如在多核的條件下是否對軟件編程有新的要求,是否會對運行在虛擬機和非虛擬機上的程序有影響等等。

  3.軟件知識

軟件知識所包含的範圍就更加廣泛了。對於互聯網行業來講,架構師要了解操作系統,數據庫,應用服務器等各方面的知識。比如說,如果網站使用的`操作系統是linux,就要了解這個linux版本的性能與侷限性,比如說最多可以存放的單個文件爲多大。有的數據庫的數據是以單個文件來存放的,雖然我們很

少見到數據庫中的數據多到不能再放入一條記錄的情況,但是作爲架構師,請時刻注意,這種可能性是有的。而且如果你有幸在一家高速成長的互聯網企業中,而你所負責的應用又沒有經過優化的話,可能你會很快見到這種現象。這種現象的發生可能是由於操作系統不支持大文件的原因,也可能是數據庫不支持大文件。不論如何,架構師應該在這種現象發生之前就把一切都準備好。對數據庫中表的拆分是架構師應該遇到的另外一個困難。一般來說增加應用服務器比較簡單而增加數據庫服務器則是比較複雜的問題,如果一個站點由多個數據庫支持,架構師需要考慮如何在保證數據一致的情況下,讓多個數據庫分擔壓力。有些解決方案是將數據庫的讀寫分開,使得大多數的查詢sql不經過核心數據庫,而只是訪問數據庫的副本,但事實上,這種方式也只能維護規模不大的網站。對於大型的網站來說,把業務分散到不同的數據庫中,只共享必要的數據,纔是合理的提高網站擴展性的解決方案。

  4.其他知識

作爲系統架構師,可能還需要對分佈式系統,負載均衡,網絡安全,數據監控等等各方面都有所瞭解。不僅僅是瞭解理論知識,也要對相關的產品和業界進展有一定的認識。比如說做負載均衡最好的產品是那種。目前最常用的備份策略是什麼,有什麼缺點。如何使用緩存,如何做好日誌分析等等。

剛剛談到的是架構師需要掌握的知識,然而,冰凍三尺非一日之寒。這個過程需要我們慢慢的積累。如果你已經進入到公司進行軟件開發,請時刻關注你所開發軟件的性能與可擴展性,而不僅僅侷限在功能上,時刻想着任何一個簡單的問題:我開發的模塊如果放在多人併發的環境下會怎樣,慢慢的就會有所心得。如果你還是一個在校學生,不要想着自己離架構師這個職位還很遙遠。要知道,成爲架構師的修煉之路是很長的,甚至可以說是終身的,因此早點進入學習狀態,不斷修煉自己。在學校期間學好離散數學,數據結構,操作系統,編譯原理,體系結構,數據庫原理等關鍵課程,並積極尋找機會到外面實習,增長自己的工作經驗。如果有機會去到一些技術主導的公司中工作,就一定不要放棄這種機會,慢慢就會成長起來。最重要的,你會養成關注技術,勤于思考的好習慣。當有一天你發現自己對任何技術難題都可以一眼看到其本質,並能夠將其分解爲一個個可輕鬆解決的模塊,你會由衷的感覺到知識給你帶來的快樂,或許那一天,你已經是一個架構師了。