-
1 # 手機使用者102424868024
-
2 # 加瓦攻城獅
架構師在整個軟體開發過程中都起著重要的作用,並隨著開發程序的推進而其職責或關注點不斷地變化,
1.在需求階段,軟體架構師主要負責理解和管理非功能性系統需求,比如軟體的可維護性、效能、複用性、可靠性、有效性和可測試性等等;
2.架構師還要經常審查客戶及市場人員所提出的需求,確認開發團隊所提出的設計;
3.在需求越來越明確後,架構師的關注點開始轉移到組織開發團隊成員和開發過程定義上;在軟體設計階段,架構師負責對整個軟體體系結構、關鍵構件、介面和開發政策的設計;
4.在編碼階段,架構師則成為詳細設計者和程式碼編寫者的顧問,並且經常性地要舉行一些技術研討會、技術培訓班等;隨著軟體開始測試、整合和交付,整合和測試支援將成為軟體架構師的工作重點;
5.在軟體維護開始時,軟體架構師就開始為下一版本的產品是否應該增加新的功能模組進行決策。
那麼怎麼才能成為一名系統架構師呢?首先要成為系統架構師的話必須是一名高階Java工程師,除了技術要精通之外,還要不斷思考的是全域性的東西,是如何組織你的系統,以達到業務要求,效能要求,具備可擴充套件性(scalability),可拓展性(extendability),前後相容性等以及可能涉及到的東西包括了從硬體到軟體的方方面面。總之架構師的工作職能真的是一言難盡。
需要掌握的技術:
熟練使用各種資料結構和演算法,陣列、雜湊、連結串列、排序樹...,一句話要麼是時間換空間要麼是空間換時間,這裡展開可以說一大堆,需要有一定的應用經驗,用於解決各種效能或業務上的問題;
熟練使用linux作業系統,必備技能,這個沒什麼好說的;
熟悉tcp協議,建立連線三次握手和斷開連線四次握手的整個過程,不瞭解的話,無法對高併發網路應用做最佳化;熟悉http協議,尤其是http頭;
系統叢集、負載均衡、反向代理、動靜分離,網站靜態化;
分散式儲存系統nfs,fastdfs,tfs,Hadoop瞭解他們的優缺點,適用場景;
分散式快取技術memcached,redis,提高系統性能必備,一句話,把硬碟上的內容放到記憶體裡來提速,順便提個演算法一致性hash;
工具nginx必備技能超級好用,高效能,基本不會掛掉的伺服器,功能多多,解決各種問題;
資料庫的設計能力,mysql必備,最基礎的資料庫工具,免費好用,對它基本的引數最佳化,慢查詢日誌分析,主從複製的配置,至少要成為半個mysqldba。其他nosql資料庫如mongodb;
還有佇列中介軟體。如訊息推送,可以先把訊息寫入資料庫,推送放佇列伺服器上,由推送伺服器去佇列獲取處理,這樣就可以將訊息放資料庫和佇列裡後直接給使用者反饋,推送過程則由推送伺服器和佇列伺服器完成,好處非同步處理、緩解伺服器壓力,解藕系統
總計以上就是海量資料、高併發、高可用、負載均衡、叢集、分散式、分庫分表、訊息中介軟體等等等。
架構師還要針對業務特點、系統的效能要求提出能解決問題成本最低的設計方案才合格,人家一個幾百人使用者的系統,訪問量不大,資料量小,你給人家上叢集、上分散式儲存、上高階伺服器,為了架構而架構,這是最扯淡的,架構師的作用就是第一滿足業務需求,第二最低的硬體網路成本和技術維護成本。
想成為架構師不是懂了一大堆技術就可以了,這些是解決問題的基礎、是工具,不懂這些怎麼去提解決方案呢?這些是成為架構師的必要條件。
-
3 # 9點10分
什麼是架構,什麼是架構師?這似乎是聊架構話題時永恆的問題。
從內心講我真的不想回答架構具體需要做什麼,架構師應該具體負責什麼。因為從實際情況看,在不同的系統層級,不同的需求下架構師的職責也會不同;從不同的技術角度看,架構師又是個變色龍——一時是技術的大拿,一時是技術的規劃者,一時是技術團隊的指揮者。
那麼,該如何回答“什麼是架構,什麼是架構師”這個問題呢?這或許需要先搞清楚另外一個問題——一名程式設計師是如何走上架構師之路的?我從許多朋友那裡瞭解到了很多實際案例,程式設計師走上架構師之路,總結起來最多的原因是因為他早前程式碼寫的好。
那麼,程式碼寫的好就是架構嗎?顯然不是。程式碼寫的好只是表象,做所有事情都需要規劃,尤其是一個複雜的軟體系統,這更需要規劃,否則可能連一行程式碼都寫不出。複雜的軟體系統一定會需要做很多抽象設計、物件規劃、介面規劃等準備動作。也就是“上一輩程式設計師”口中所說的:詳細設計。做架構主要的事情也依舊如此,需要對整個系統進行系統的規劃:模組、通訊、邊界、擴充套件、技術下沉等工作。這樣的規劃完成之後專案方能正常跑起來。
當然,架構也不僅僅是規劃,還要做的另一件大事就是技術識別。識別出系統中技術的難易區域,並分解複雜技術,使之成為一個個技術的黑盒子,在此之上再進行新的技術規劃,使整個系統從技術角度來看是分層次的,從難到易,從大到小,但各層之間又是互相的黑盒。這也常說的讓系統模組間達到“雞犬相聞老死不相往來“的狀態。
-
4 # SwiftHub
架構師是一個既需要掌控整體又需要洞悉區域性瓶頸並依據具體的業務場景給出解決方案的團隊領導型人物。
一個架構師得需要足夠的想像力,能把各種目標需求進行不同維度的擴充套件,為目標客戶提供更為全面的需求清單。
架構師在軟體開發的整個過程中起著很重要的作用。
說的詳細一些,架構師就是確認和評估系統需求,給出開發規範,搭建系統實現的核心構架,並澄清技術細節、掃清主要難點的技術人員。主要著眼於系統的“技術實現”。
2架構師的任務
架構師的主要任務不是從事具體的軟體程式的編寫,而是從事更高層次的開發構架工作。他必須對開發技術非常瞭解,並且需要有良好的組織管理能力。可以這樣說,一個架構師工作的好壞決定了整個軟體開發專案的成敗。
在成為Java架構師之前,應當先成為Java工程師。
熟練使用各種框架,並知道它們實現的原理。
jvm虛擬機器原理、調優,懂得jvm能讓你寫出效能更好的程式碼;池技術,什麼物件池,連線池,執行緒池……Java反射技術,寫框架必備的技術,遇到有嚴重的效能問題,替代方案java位元組碼技術;nio,沒什麼好說的,值得注意的是"直接記憶體"的特點,使用場景;java多執行緒同步非同步;java各種集合物件的實現原理,瞭解這些可以讓你在解決問題時選擇合適的資料結構,高效的解決問題。
比如hashmap的實現原理,好多五年以上經驗的人都弄不清楚,還有為什擴容時有效能問題?
不弄清楚這些原理,就寫不出高效的程式碼,還會認為自己做的很對。
總之一句話,越基礎的東西越重要,很多人認為自己會用它們寫程式碼了,其實僅僅是知道如何呼叫api而已,離會用還差的遠。
如果你立志做架構,首先打好基礎,從最底層開始。
然後發展到各種技術和語言,什麼都要懂兩點,要全面且不膚淺。
為什麼不是懂一點?
你要看得透徹,必須儘量深入一些。別人懂一點,你要做架構師,必須再多懂一點。比如你發現golang很流行,別人可能寫一個helloworld就說自己玩過golang,但你至少要嘗試寫一個完整的應用。
不肯下苦功,如何高人一頭?
你起碼要非常深入地瞭解至少一門語言,如果你的目標是java,那麼就學到極致,作為敲門磚,先吃飽了才能談理想。
3架構師都是從碼農過來的
而Java學到極致勢必涉及到設計模式,演算法和資料結構,多執行緒,檔案及網路IO,資料庫及ORM,不一而足。這些概念放之一切語言都適用。
先精一門,為全面且不膚淺打基礎。
其實最重要的能力就是不斷學習。在思考新的技術是否能更好地解決你們遇到的問題之前,你首先得知道並瞭解新的技術。
架構師都是從碼農過來的,媳婦熬成婆。
千萬不要成為不寫程式碼的架構師,有些公司專門產不寫技術的架構師。
所謂架構師,只是功底深厚的程式設計師而已。個人認為應該紮紮實實學習基礎知識,學習各種規範,架構,需要廣泛的知識面,懂的東西越多視野越開闊,設計的東西當然會越好越全面。
成為架構師需要時間的積累的,不但要知其然還要知其所以然。平時的一點一滴你感覺不到特別用處,但某天你會發現所有東西都沒有白學的。
4架構師知識體系
分散式專題高效能/高併發專題工程化專題效能最佳化專題原始碼分析專題
回覆列表
java學習後可以從事的工作很多啊,如果你學習比較好。當然是從事技術開發,工資在瀋陽也是非常高的。如果你學的稍微差點,可以做測試,工資比開發低點,但是也是福利待遇非常好的工作。一般開發在瀋陽三年就能上萬。瀋陽中軟有專業的專案經理帶領著做專案,實訓練習。你不妨來看看,試聽是免費的。