那麽,什麽是建築師呢?所謂架構師,應該是壹個科技企業的最高技術決策者。主要負責公司軟件產品或軟件項目的技術路線和技術框架的制定。好的建築師都是善良獨裁的人,有很強的技巧,有很好的文字功底,有很好的口頭表達能力,能和各個層面溝通。從開發者到架構師的成長應該是階梯式的。壹般來說,開發者在工作之初只能開發簡單的獨立軟件模塊。慢慢的隨著經驗的增長,他開始接觸壹些模塊,模塊之間有信息傳遞。後來他會發現,自己接到的開發任務並不是壹個獨立的單體。這些任務由壹些專門的軟件部分組成,這些軟件部分可能包括數據庫、工作流引擎和消息服務等各種功能模塊,並且可能分布在不同的服務器上。這個時候架構的好壞會直接決定系統的性能和可擴展性,而這個時候優秀的開發者就開始思考架構師應該怎麽想了,或者說他向成為架構師邁進了壹大步。
建築師最有價值的技能是什麽?就是了解不同的知識,做壹個“雜”或者“博學”的人。當然,如果妳的數據庫技術非常優秀,或者妳在工作流引擎方面有無與倫比的專家知識,那也是非常好的。很多優秀的建築師都是從專家成長起來的。然而,這並不是建築師應該做的。架構師應該做的是了解壹切,包括宏觀方面和技術細節。真正的架構師不僅要懂軟件,還要懂硬件。在關鍵部分用合適的硬件代替軟件,可以成倍甚至上百倍的提高整個系統的效率。接下來我以互聯網行業對架構師的要求為例,給大家講解壹個架構師應該具備的知識。
互聯網行業是目前最令人興奮的行業之壹,很多創新都來源於這個行業,而google、yahoo、myspace等每壹個大型網站都需要解決壹個非常復雜的問題,那就是網站之外的分布式規模。要解決這個問題,最好的架構師需要對業務進行分析,對網站進行軟硬件重構,甚至根據業務開發相應的分布式技術,解決網站復雜的分布式計算問題。想成為這個行業的架構師,至少需要掌握網絡、硬件、軟件、網站優化等方面的知識:
1.網絡知識
現在的軟件絕對不是那種只在單臺電腦上運行的孤立應用。不僅是互聯網行業,任何行業的軟件都要求具備網絡功能。因此,網絡知識是建築師必備的知識。我們說的網絡知識,不僅包括tcp/ip,工作內容分發網絡)把網站的內容發布到離用戶最近的服務器上,還可以把服務器放在壹些所謂的雙線機房,甚至可以把幾種方案組合起來。這些都屬於網絡知識。作為公司的架構師,有必要了解所有這些知識,以幫助在遇到問題時找到最佳答案。
2.硬件知識
理解硬件的極限是架構師的基本功。我遇到過壹些人,他們認為軟件和硬件沒有界限。他們在需要的時候申請資源,在系統性能下降的時候購買更先進的設備。然而,硬件的性能在很大程度上取決於i/o設備。並且這些i/o設備依賴於機械和物理運動,這是有限制的。所以當資源訪問量增加到壹定程度,這種物理移動就會成為瓶頸。例如,在開發壹個網站的過程中,記錄訪問者的狀態是非常重要的。壹般來說可以用httpsession來記錄。httpsession的存儲問題將是壹個很大的挑戰,尤其是多臺計算機共享會話的時候。將httpsession保存為文件,並通過與多臺計算機共享或在網絡上備份來解決分布式問題,這是壹種常見的方案。但是,架構師必須考慮到,這種方案受到i/o限制的限制,很難擴展到超過壹定規模的大型網絡。同時,架構師要知道最近的硬件發展是否會對軟件系統產生壹定的影響,比如多核條件下對軟件編程是否有新的要求,是否會對運行在虛擬機和非虛擬機上的程序產生影響等等。
3.軟件知識
軟件知識涵蓋的範圍更廣。對於互聯網行業,架構師應該了解操作系統、數據庫、應用服務器等方面的知識。比如網站使用的操作系統是linux,就要了解這個linux版本的性能和限制,比如單個文件可以存儲的最大大小。有些數據庫數據存儲在單個文件中,盡管我們非常
很少看到數據庫中的數據太多而無法放入另壹條記錄,但作為架構師,請時刻註意這種可能性。而如果妳足夠幸運,在壹個快速發展的互聯網公司,妳負責的應用沒有優化,妳可能很快就會看到這種現象。出現這種現象可能是因為操作系統不支持大文件,或者數據庫不支持大文件。無論如何,架構師應該在這種情況發生之前做好壹切準備。在數據庫中拆分表是架構師應該遇到的另壹個困難。壹般來說,添加應用服務器相對簡單,而添加數據庫服務器是壹個相對復雜的問題。如果壹個站點由多個數據庫支持,架構師需要考慮如何在保證數據壹致性的同時,與多個數據庫分擔壓力。有的解決方案是將數據庫的讀寫分開,讓大部分查詢sql不經過核心數據庫,只訪問數據庫的副本,但實際上這種方法只能維護小規模的網站。對於大型網站來說,將業務分散到不同的數據庫中,只享受必要的數據,是提高網站擴展性的合理解決方案。
4.其他知識
作為壹名系統架構師,您可能還需要了解壹些關於分布式系統、負載平衡、網絡安全、數據監控等方面的知識。不僅要了解理論知識,還要對相關產品和行業進展有壹定的了解。比如負載均衡最好的產品是什麽?目前最常用的備份策略是什麽,有哪些缺點?如何使用緩存,如何做日誌分析等等。
剛剛講了建築師需要掌握的知識,然而,羅馬不是壹天建成的。這個過程需要我們慢慢積累。如果妳已經進入公司開發軟件,請時刻關註妳開發的軟件的性能和可擴展性,而不僅僅是功能,時刻想到任何壹個簡單的問題:如果我開發的模塊放在多人並發的環境下會怎麽樣,妳會逐漸有所體會。如果妳還是在校學生,不要以為妳離建築師的位置還很遠。要知道,成為壹名建築師的路是很長的,甚至是終生的,所以早點進入學習狀態,不斷的練習自己。學習離散數學、數據結構、操作系統、編譯原理、體系結構、數據庫原理等重點課程。在校期間,積極尋找機會到外面實習,增加自己的工作經驗。如果妳有機會去壹些技術主導的公司工作,壹定不要放棄這個機會,妳會慢慢成長的。最重要的是,妳會養成重視技術,努力思考的好習慣。當有壹天妳發現妳能壹眼看出任何技術問題的本質,並把它分解成可以輕松解決的模塊時,妳會由衷地感受到知識帶來的快樂。也許那壹天,妳已經是壹名建築師了。
拓展:架構師必須具備的能力。
1,軟件架構的定義:
軟件架構,也稱為軟件架構,是與以下元素相關的壹組重要決策:軟件系統的組織、組成系統的結構元素、接口及其協作行為的選擇、將結構元素和行為元素組合成粒度更大的子系統的方式的選擇、指導這種組織的架構風格的選擇(元素及其接口、協作和組合方法)。換句話說,軟件架構實際上是對系統整體結構設計的描述,系統架構師做的是整體和全局的把握工作。建築構成和決策是建築設計中的兩個基本概念。建築= & gt藍圖+規則+解決方案。
軟件架構是壹個認識事物的過程:原型、發現、改進、再發現和改進,這是軟件開發的唯壹螺旋。
2、架構師成長路線圖:
系統架構師不僅是熟練的技術專家,還需要與業務團隊緊密合作,精通市場、業務和管理。從上升趨勢來看,可以有三個層面的路線圖:第壹個層面,要註重系統思考。在這個層面上,不僅要掌握設計的知識點,更要註重分析能力和創新思維能力的提升,這需要更廣闊的思路,這方面有相當大的空間。這是第壹關的能力基礎。第二個層面,要註重總結和引導,思維空間要轉向群體。如何總結已有的經驗,讓這筆智力資產真正發揮作用?成為建築師上升到二級的能力基礎。第三個層次,提高自己的整體修養。我們必須改變思維方式,培養組織力、領導力、創新力和激情,這是建築師能夠上升到第三層次的基礎。
要看到自己的弱點,要心胸開闊,多思考。
建築師不是普通的技術人員。他對設計站的視角更高,知識和能力結構更復雜。他需要有別人沒有的想法、視野和感知世界的方式。他必須突破現有的思維模式和行為模式,突破長期束縛他的思維瓶頸,才能達到從未達到的高度。
建築師應該養成記錄和分析每壹項工作的好習慣,形成更紮實的工作作風。每個項目完成後都需要壹份總結。
3.建築師應該保持他們的競爭力:
架構師必須關註當今的it技術、商業模式變化以及由IT引發的軟件行業變革的大趨勢,勤於思考,迎接新的挑戰。壹個人的核心競爭優勢是學習能力。建築師作為壹群高級技術人員,為了保持競爭力,需要註意以下問題:
(1),保持激情:關鍵是信念。激情來自信仰。有信念才能主動挑戰自己,遇到挑戰才能有激情,有激情才能工作得更有意思。
(2)創新思維:在工作中嘗試壹些新方法是保持自我能力的重要手段。
(3)逆向思維:逆向思維是指用壹種與正常思維相反的思維方式來分析同壹問題,使思維多樣化。逆向思維可以幫助人們突破傳統思維的束縛,克服慣性思維模式。反方向思考往往會產生意想不到的結果。
4、架構師應該關註軟件的新趨勢:
目前,傳統軟件危機暴露出來的問題還沒有真正解決,新的挑戰又擺在了我們面前。在人們對挑戰和對策的不斷思考中,出現了壹些新的趨勢,包括:
(1),軟件質量以服務質量的形式展示,在質量上的投入可以獲得更高的投資回報。
(2)軟件過程延伸到用戶,期望更多的用戶參與到整個軟件生命周期中。
(3)功能至上遠遠不夠,用戶體驗受到前所未有的重視。
(4)系統集成模式面臨變革,軟件、服務、終端、IT基礎設施將形成更加緊密的價值體系。
(5) R&D應更加關註非功能性需求,如安全質量、性能、可靠性、可擴展性、可伸縮性和可用性,以不斷提高軟件的價值。知識就是力量。信息就是力量。
架構不完全是高層次的設計。概要設計還停留在圖紙上,架構必須證明這個技術路線是可行的,大部分質量風險已經解決。
5、所謂設計就是解決問題的過程:
軟件設計是壹種思維活動,設計的魅力在於解決難題。只有直面問題的挑戰,仔細推敲相應的解決方案,才能設計出真正的精神產品。
(1),設計不通用:軟件設計很少通用,不同的目標需要不同的設計來支撐。
(2)權衡:所謂軟件設計,本質上是質量、成本、時間等因素的權衡。
(3)記錄設計原因(設計文件)。更加註重建築設計的方方面面。