① 架構師成長之路:到底什麼是架構設計該如何理解架構設計
架構設計是一個大家耳熟能詳的詞,基本都爛大街了。
可是,到底什麼是架構設計呢?估計很多人就回答不上來了。
下面就來詳細聊聊什麼是架構設計,以及對架構設計的一些基本認識。
軟體架構設計指的是:對一個軟體系統進行的架構定義、文檔編寫、維護和改進、並驗證實現的一系列活動,架構設計的產物就是一個系統的架構。
架構設計實際上是一個過程,圍繞著軟體系統,對它的架構,進行定義、文檔編寫、維護和改進、並驗證實現等,把這一系列活動組合起來,就是我們所說的架構設計。
架構設計的產物,也就是結果,就是架構,這也是架構和架構設計的關系。
架構設計是一門科學,這個已經是業界共識。但是作為一門科學來講,它一定要有它自己的基礎理論,基礎方法,也會有一些實現的方法論。
架構設計作為一門科學來說,還很不成熟。目前架構設計的基礎理論還不是很完善,方法論上,更是百花齊放,大家都還處於一個探索的階段。
從科學上來講,架構設計主要關注架構設計過程當中的:技術、流程、資源、方法;以及如何去完善並改進架構。
剛講到架構設計這門科學還很不成熟,再加上技術領域更新很快,新技術、新思想、新方法 層出不窮。
我們總會面對很多新興的、沒有先例的系統,可能會應用新的框架、新的技術、新的解決方案來實現系統。
因此,做架構設計的時候,是需要一定的創造力的。當然,藝術細胞缺乏的人員也不用太擔心,架構設計上還是有很多是有章可循的,多半是在已有的架構體繫上去做一些微調,微創新,並不是完全從零開始。
架構設計不是一蹴而就的,通常也是由粗到精,剛開始,可能只有一個粗略的架構設計,然後不斷迭代和演化,逐步推進,去完善和細化,這樣的過程。
這個可能有些人不太理解,認為說,軟功過程裡面,不是有專門的概要設計、詳細設計的時間嗎?架構設計不就是在這些設計階段去完成的嗎?做完設計了,把文檔發下去,不就沒事了嗎?
有些公司也是這么乾的,實際上這是有問題的。
架構設計會跨越軟工的完整流程,對於一些大型的或者是重要的項目,可能立項期間,架構師就要參與,做一些粗略的架構規劃,有兩個基本的原因:
1:能不能做得了這件事
2:按照粗略的架構規劃做下去,大致的成本會有多大
立項的時候,就要去考慮你的成本,風險和投資收益。
也就是說,立項的時候,架構師可能就需要參與,那就更不用說需求階段、設計階段了,架構師是肯定要參與的,前面講需求分析的時候已經講過了,這里就不多啰嗦。
到了編碼階段,有些人可能認為架構師是不參與的,這是不對的。架構師需要參與,只是參與的少一些,主要是一些重點、難點的地方,或者是公共基礎功能,由架構師來實現。
另外在編碼階段,架構師還有一個重要的任務,就是確保開發人員按照架構設計去實現,不要亂做。這就需要兩個基本的方式,一個是架構師要把架構設計的成果,跟開發人員講解清楚,並不斷溝通;另外一個就是要不斷檢查,Review,以確保架構設計的落地實現不出大的偏差。
後面的測試、部署、運維等階段,架構師要做一些技術咨詢,或者是技術指導的工作。架構設計裡面,本來就包含部署架構的設計,因此,架構師也會參與這些階段,只是參與的少一些。
總之,架構設計需要關注所有利益相關者的要求,參與系統設計實現的所有人員,也都是系統的利益相關者,自然而然的,架構設計就需要貫穿軟工的整個流程了。
一個系統,要關注的方方面面是很多的,利益相關者也很多,大家關注點各有不同。
這就意味著,在做架構設計的時候,需要不斷去做決策,在眾多關注點中去尋求平衡,所以有人說,做架構設計,就是一種玩平衡的藝術。
比如:從技術上講,A+B的方式是性能最高的;但是從成本上來看,A+C是最合適的。可能最後綜合權衡後,B+C是各方都能接受的方案。
這種需要考慮的平衡很多,比如:技術和成本的平衡;方案適用性年限的平衡,是滿足1-3年就夠了,還是要考慮8-10年;技術方案和當前開發人員技能的平衡;性能和成本的平衡等等,非常多。
架構設計是一個過程,需要在這個過程中,不斷去考慮各利益相關者的要求,並不斷折中平衡,因此架構設計的產物,也就是架構,自然就是各方利益相關者的共識了。
要做出好的架構設計,經驗是不可或缺的,不會每次都是從零開始。
比如以前做過類似的系統;或者是學習到的一些好的架構模式,設計模式,一些現成的組件;或者是一些開源的框架等等的,這些我們都可以看成是可重用的資源。
我們做架構設計的時候,需要不斷去積累這樣子的可重用資源,形成自己的工具箱。這樣當我們在做一個系統的架構設計的時候,就有了很多備用的工具或手段。
有了這些經驗和資源的積累,會使得新系統的架構設計變得更容易。
② 互聯網架構師必須具備的技能
架構師是公司的「金領」,有著非常高的收入,很少需要考慮生存的問題,從而有更多的精力思考關鍵技術問題,形成「強者愈強」的良性循環。部分優秀的開發人員在工作了一定時間後,就要開始考慮自己的未來到底向哪個方向發展。如果開發人員的溝通能力強過技術能力,在補充一定的項目管理知識後,可以向技術管理的方向轉型。如果其對技術一直很感興趣,而溝通能力也不弱,則可以試著進一步加強技術修養,以期向架構師的方向發展,最終「修成正果」。
那麼,到底什麼是架構師呢?所謂的架構師,應該是一個技術企業的最高技術決策者。他主要負責公司軟體產品或軟體項目的技術路線與技術框架的制訂。好的架構師都是善良的獨裁的人,具有很強的技術、良好的寫作能力、良好的口頭表達能力,能夠在各個層次進行溝通。從開發人員到架構師的成長應該是階梯式的,一般來講開發人員在剛剛開始工作時只能開發簡單的獨立軟體模塊,慢慢的隨著經驗的增長,他開始接觸一些相互之間有信息傳遞的模塊,而後來,他會發現自己接到的開發任務已經不是一個獨立的單體,這些任務由一些專門的軟體部分組成,可能包含資料庫,工作流引擎,消息服務等等各種功能模塊,可能分布在不同的伺服器上,所有的部分協同起來,完成軟體功能。而這時候,體系結構的好壞將直接決定了系統的性能和可擴展性,而就在這時候,這名優秀的開發人員也開始思考架構師應該思考的問題了,或者說,他向成長為架構師的道路邁出了一大步。
什麼是架構師最具價值的技能呢?就是要了解不同的知識,做一個「雜家」或者說「博學家」。當然,如果你的資料庫技術非常棒,或者你在工作流引擎方面具有不可超越的專家知識,那也是很不錯的。好的架構師有好多都是從專家成長過來的。但是,這不是架構師應該做的事情,架構師應該做的是了解所有的東西,既了解技術的宏觀面,又了解技術的細節。真正的架構師不僅僅要了解軟體,也要了解硬體,在關鍵的部位使用合適的硬體來取代軟體,可以成倍甚至成百倍的提高整個系統的效率。下面我將會以互聯網行業對的架構師的要求為例,向大家講解作為架構師應該具備的知識。
互聯網行業是當前最激動人心的行業之一,很多的創新都來自於這個行業,而每一個大型的網站如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.其他知識
作為系統架構師,可能還需要對分布式系統,負載均衡,網路安全,數據監控等等各方面都有所了解。不僅僅是了解理論知識,也要對相關的產品和業界進展有一定的認識。比如說做負載均衡最好的產品是那種。目前最常用的備份策略是什麼,有什麼缺點。如何使用緩存,如何做好日誌分析等等。
剛剛談到的是架構師需要掌握的知識,然而,冰凍三尺非一日之寒。這個過程需要我們慢慢的積累。如果你已經進入到公司進行軟體開發,請時刻關注你所開發軟體的性能與可擴展性,而不僅僅局限在功能上,時刻想著任何一個簡單的問題:我開發的模塊如果放在多人並發的環境下會怎樣,慢慢的就會有所心得。如果你還是一個在校學生,不要想著自己離架構師這個職位還很遙遠。要知道,成為架構師的修煉之路是很長的,甚至可以說是終身的,因此早點進入學習狀態,不斷修煉自己。在學校期間學好離散數學,數據結構,操作系統,編譯原理,體系結構,資料庫原理等關鍵課程,並積極尋找機會到外面實習,增長自己的工作經驗。如果有機會去到一些技術主導的公司中工作,就一定不要放棄這種機會,慢慢就會成長起來。最重要的,你會養成關注技術,勤於思考的好習慣。當有一天你發現自己對任何技術難題都可以一眼看到其本質,並能夠將其分解為一個個可輕松解決的模塊,你會由衷的感覺到知識給你帶來的快樂,或許那一天,你已經是一個架構師了。
拓展:架構師必須具備的能力
1、軟體架構的定義:
軟體架構(Software Architecture)也稱之為軟體體系結構,它是一組有關如下要素的重要決策:軟體系統的組織,構成系統的結構化元素,介面和它們相互協作的行為的選擇,結構化元素和行為元素組合成粒度更大的子系統方式的選擇,以及指導這一組織(元素及其介面、協作和組合方式)的架構風格的選擇。換句話說,軟體架構實際上是對系統整體結構設計的刻劃,系統架構師是做全局的、整體的把握工作。架構的組成與決策是架構設計的兩個基本概念。架構=>藍圖+規則+解決方案。
軟體架構是一個認識事物的過程:原型、發現、改進、再發現、再改進,這是軟體開發的必由螺旋。
2、架構師成長路線圖:
系統架構師已經不僅僅是技術精湛的技術專家,他需要與業務團隊緊密合作,並且精通市場、業務與管理。從上升趨勢來說,可以有三個層面的路線圖:第一個層面,要關注系統思考。在這個層面,重要的不僅僅是掌握設計的知識點,而是更重視分析能力、創新思維能力的提升,需要更廣闊的思路,這方面的空間相當非常大。這是第一層面的能力基礎。第二個層面,要關注總結和指導,思維空間要轉向群體。如何把已有的經驗總結出來,並讓這種智力資產真正發揮作用?成為架構師上升第二層面的能力基礎。第三個層面,要提升自身的全面修養。我們必須引發自己思維方式的變革,要培養組織力、領導力、創新力以及擁有激情,這是架構師上升第三層面的能力基礎。
要看到自身的弱點,思路要寬,多思考
架構師並不是一個普通的技術人員,他對設計站的角度更高,需要的知識和能力結構更復雜,他需要具有其他人所沒有的思想、眼光和感知世界的方法,必須突破已有的思維模式和行為模式,突破長期束縛自己的思維瓶頸,才可能達到自己從未達到過的高度。
架構師要養成每項工作都記錄並分析的好習慣,以形成更扎實的工作風格。在每個項目完成都需要進行總結。
3、架構師要保持自己的競爭力:
架構師必須關注今天的IT技術、商業模式變革以及由此引發的軟體產業變革的重大趨勢,勤於思考並迎接新的挑戰。一個人最核心的競爭優勢是學習能力。架構師作為技術層面資深的一群,為了保持競爭力需要注意以下幾個問題:
(1)、保持激情:關鍵是信念。激情源自於信念,有了信念才會主動挑戰自我,迎接挑戰才會有激情,有了激情工作才會更有意思。
(2)、創新思考:在工作中多嘗試一些新方法,是維持自我能力的重要手段。
(3)、逆向思維:逆向思維指的是使用與正常思路相反的思維方式去分析同一個問題,使思路多樣化。逆向思維能夠幫助人們沖破傳統思維的束縛,克服慣性思維方式。從反方向考慮問題往往會取得出人意料的結果。
4、架構師要關注軟體的新趨勢:
目前傳統軟體危機暴露出的問題還未真正解決,新的挑戰卻已擺在眼前。在人們不斷思考面臨的挑戰以及對策中,形成了一些新的趨勢,包括:
(1)、軟體質量以服務質量形式展現,對質量的投資可獲得更高的投資回報。
(2)、軟體過程擴展到用戶,希望更多的用戶深入參與到軟體全生命周期。
(3)、功能至上遠遠不夠,用戶體驗得到空前重視。
(4)、系統集成模式面臨變革,軟體、服務、終端、IT基礎設施將形成更緊密的價值體系。
(5)、研發要更多關注非功能性需求,如安全性質量、性能、可靠性、可擴充性、可伸縮性、可用性等,從而不斷提高軟體的價值。知識就是力量==>信息就是力量。
架構並不完全是概要設計。概要設計還是停留在圖紙上,而架構必須證明這個技術路線可行,並且能夠證明大多數質量風險已經得到了解決。
5、所謂設計就是解決問題的過程:
軟體設計是一種思維活動,設計的魅力在於破解難題,通過直面問題的挑戰,以及對相應解決方案的仔細推敲,才可能設計出真正有靈性的產品。
(1)、設計不具普遍性:軟體設計很少具有普通性,不同的目標需要不同的設計來支持。
(2)、做出權衡:所謂軟體設計,本質上就是在質量、成本、時間以及其它各種因素之間做出權衡。
(3)、記錄設計的理由(設計文檔)。多關注各種方面的架構設計。
③ 請問系統架構師,你具備什麼條件才能考(過)了,比如工作過幾年啊等等~要掌握點什麼技術才行
基礎知識類最好碩士研究生畢業的知識體系皆通,如高等數學、離散數學、編譯原理、高級操作系統、計算機系統結構原理、計算機網路等,專業基礎知識如:軟體工程相關知識,實踐知識如:流行的軟體開發環境,軟體開發方法學,架構師實踐經驗,一般至少3年以上精於某個專業領域架構設計經驗。再輔助之以一定的考試練習,就可以啦。個人觀點,僅供參考。祝您考試成功!PS,本人2010年通過系統架構設計師考試獲得高級職稱。
④ 佳音北大青鳥分享如何才能成為一個合格的架構師
隨著互聯網的不斷發展,企業對於開發編程開發工程師的需求量也在提高,而今天北大青鳥http://www.kmbdqn.cn/就一起來了解一下,開發程序員如何才能成為一個合格的架構師。
一、高性能對性能孜孜不倦的追求是整個人類技術不斷發展的根本驅動力。
但伴隨性能越來越高,相應的方法和系統復雜度也是越來越高。
軟體系統中高性能帶來的復雜度主要體現在兩方面,一方面是單台計算機內部為了高性能帶來的復雜度;另一方面是多台計算機集群為了高性能帶來的復雜度。
二、高可用系統的高可用方案五花八門,但萬變不離其宗,本質上都是通過「冗餘」來實現高可用。
它在形式上和高性能一樣,都是通過增加更多機器來達到目的,但本質上是有根本區別的:高性能增加機器目的在於「擴展」處理性能;高可用增加機器目的在於「冗餘」處理單元。
通過冗餘增強了可用性,但同時也帶來了復雜性,我會在專欄中根據不同的應用場景逐一分析。
三、可擴展性由於軟體系統固有的多變性,新的需求總會不斷提出來,因此可擴展性顯得尤其重要,幾乎所有的技術人員對於可擴展性都特別重視。
設計具備良好可擴展性的系統,有兩個基本條件:正確預測變化、完美封裝變化。
但要達成這兩個條件,本身也是一件復雜的事情。
四、低成本、安全、規模我將在專欄中,為你分析低成本給架構設計帶來的主要復雜度,體現在引入新技術或創造新技術,討論從功能安全和架構安全引入的復雜度,以及規模帶來復雜度的主要原因是「量變引起質變」。