從熟練工的狀態下提高到架構師的基本功和技巧

點關注,不迷路;持續更新Java架構相關技術及資訊熱文!!!

本人自認爲已是高級開發,自認爲還算勤懇,用了很多時間看了架構師方面的資料,也有機會從事了1年左右架構相關的活。本人尚有自知之明,還談不到技術架構的水準,但在本人目前工做環境裏,能獲得牛人親歷指導,本人也不斷經過拜師學藝,自認爲走在正確升級的途徑上,即只要繼續努力,在不久的未來能拿到架構師的工資。java

回想我當年處於高級開發階段,也算是個熟練工,天天干的都是體力活,說白了就是不斷複製熟悉的工做模式。因爲在工做中無法實踐到高併發組件等架構師所必需的知識點,當時只也只能靠看資料來積累,靠面試來感覺對公司架構師的實際要求,本身感受也走了很多彎路。mysql

爲了更好地繼續後面的升級之路,我寫下這篇階段性總結文章,也一方面經過總結,讓我更加明確後繼的計劃和目標,另外一方面,也但願能盡我的的微薄之力讓各位同路人少走彎路。這篇文章也算是我以前兩篇博文架構師更多的是和人打交道,說說我見到和據說到的架構師升級步驟和平時的工做內容,以及看下資深架構師平時須要解決的問題,對比你離資深架構師還有多少距離——再論技術架構的升級之路的後繼系列文。linux

1、熟練工有退步的風險,因此首先主觀上得不斷上進

每一個公司作的活其實都有侷限性,若是就停留在本公司熟練工的階段,那麼必定沒法緊跟技術進步的步伐,長而久之就會落後了。nginx

話說回來,不是每一個熟練工都能經得起溫馨區誘惑的,我就拿我經歷過的溫馨區和目前的挑戰區情況對比一下。面試

上班前,在外企的時候,因爲天天干的活都能應付,因此沒絲毫壓力,並且因爲是彈性工做制,因此10點到算常態,一週總有1次10點半前到,上班路上,還能用清閒的心情看風景。在目前互聯網公司,上班前就得規劃一天的工做,有時候想一想今天要乾的活技術上我不大熟,或者得催別的組要接口,因此常常有忐忑不安的感受,一路上有時還得小跑,雖然也是彈性工做制,但老是9點前到,早到就能早開始作事情。redis

上班時,在外企的時候,對進度的壓力不大,並且乾的活都會,因此能夠優哉地幹,平時有空能夠逛個網站,並且出去逛一圈是常事,加班到8點就會埋怨,到了週五下午,大多數人都沒心思幹活了,基本都是坐等下班。而在互聯網公司,天天都有幹不完的活,幹好活,就得不斷反思,看如何才能幹更好,不然就壓力很大。晚上加班到9點是常事,並且最頭痛的是,很多事情不是能用時間都能解決,好比出個技術方案,裏面涉及到的技術不熟,就得拼命學。sql

週末以及下班後,在外企的時候,因爲無需積累,因此很輕鬆,也能享受生活,像我當時寫書寫博客,還出了兩本書,Java Web輕量級開發面試教程和Java核心技術及面試指南,還算比較勤奮的,而在互聯網公司,對不起了,平時必定得看資料,並且絕對不能裝模做樣地看,若是一個階段裏不進步,那麼就坐等被說。數據庫

由奢入儉難,並且溫馨區用的技術要比挑戰區落後不少,而高級開發到架構師的升級任務未必是容易達成的,因此在溫馨區的時候,只能平時多上進,要怎麼上進?其實拿出當年高考四分之一的努力程度便可。服務器

2、從會用分佈式組件開始,並且不能光看資料

架構師的重要工做任務是解決分佈式高併發的問題,因此升級能夠從會用一些分佈式框架開始。架構

好比nginx怎麼配置,dubbo和zookeeper怎麼整合,kafka消息中間件怎麼配置,redis怎麼配置,或者ETL該怎麼配置。看了各類教程後,必定得本身找個環境配置一下,好比我經過nginx配置,確實能把請求發送到不一樣的服務器上,或者經過設置dubbo配置,確實能作到超時重發。

這個步驟的難點是,在本身的機器上未必能模擬出分佈式環境,因此若是能夠,就找公司測試環境實踐,或者本身機器上裝個虛擬機。若是實在沒有辦法,安裝個環境,而後本身設置一遍配置,哪怕無法調試,本身設置一遍總比光看教程要好。

3、思考兩個問題,從中能概括出升級所必須的基本功

很多高級開發摸不到升級架構師的方法,其實不少技巧平時工做時就能接觸到。可能這裏一時沒法列全升級到架構師所須要的基本功,但你們能夠思考以下兩方面的問題。

  1. 當前系統的運維方面,爲了讓你的系統能平穩地運行平穩地升級版本,你須要掌握哪些技能?當系統在線上表現出有問題時,你該如何經過查日誌等方面來排查問題點?
  2. 再進一步,能夠考慮系統高併發方面的問題。你的系統當前能應付多少併發量?當前系統的瓶頸在哪?任何系統都有瓶頸,好比SQL壓力大,很是容易致使OOM異常。如何經過看日誌等方式確認當前系統的瓶頸所在?

爲了獲得上述兩個問題的答案,咱們須要掌握各種技能,好比經過jenkins打包發佈版本,經過linux日誌查看問題,經過MAT查看OOM異常時的Dump文件,諸如此類,這就是升級到架構師所必須的基本功。

因此當咱們在一個公司成爲熟練工,達到「溫馨區」之後,必定不能侷限於本身所被分配的活。若是再達到高級開發的水平後,必定有機會接觸架構配置調優等方面的活,這時候,有條件的最好能親身參與,若是沒條件,哪怕看配置看流程看代碼也行。

4、架構師得從底層代碼角度,進一步查看實現細節

java語法誰都會,但從初級開發,高級開發和架構師等不一樣的視角,關注的點必定不一樣。

初級開發會專一於「如何調用」和「如何才能保證沒有語法和邏輯上的問題」,高級開發會根據當前需求選擇一些合適的語法點,好比遇到高併發會選擇「線程池」,遇到NIO類需求時則選用netty,而架構師則須要在使用各類組件時,進一步瞭解各類坑。

好比在使用netty時,則須要瞭解如何解決半包粘包問題,在使用堆外內存時如何保證能正確回收內存。這就要求高級開發在升級到架構師的路上,更得關注必要的底層代碼,好比netty裏LengthFieldBasedFrameDecoder解決半包的實現代碼,以及DirectBuffer部分的相關代碼。

推而廣之,除了netty以外,高級開發在「會用分佈式組件」的基礎上,更得從高可用(一臺down了能自動切換)高併發(這不用說了)集羣上下功夫,這隻能一個個組件本身看了,網上這類資料很多,好比我前幾天看到篇阿里架構師面試指南,裏面針對各組件提了很多問題,你們能夠逐一對比,根據問題查看底層實現細節。

對高級開發而言,組件可能就是一個個jar包,但對架構師而言毫不是這樣,好比某個基於netty的系統一直出現OOM異常,那麼架構師首先得熟悉netty jar包裏的底層代碼,並且必要時,得debug進這些底層代碼,或者經過dump文件發現現有系統在使用堆外內存時未釋放內存的點。

看底層代碼,提及來容易作起來很難,要看到什麼程度?如何才能不拘泥於細節?我目前的體會是,第一看流程,從流程裏看這個組件的關鍵模塊和重要方法,第二仍是結合阿里架構師面試題裏的問題,好比提到dubbo底層通信協議,那麼就把對應的模塊和對應的方法看一下。

5、架構師的思惟:更得讓架構切合業務,還得控制風險

記得我在入門架構師的開始階段,老是很理想話,老是會畫出一個解決高併發的框圖,裏面包含了各類組件,這不算錯,但只是第一步。

在大多數場景裏,架構師不是從零起點設計,而是須要結合現有系統的各類痛點改造系統。舉個例子,當前數據庫性能很慢,若是有錢的話,比較直接的辦法是升級到oracle,但每每不現實,因此架構師能夠搭建多個mysql實例,而後用mycat作分庫分表。並且,從單庫切換成分庫分表時,得考慮到,萬一切換失敗,我該如何回退,由此能夠設計出開關和彙總表等方案。

那麼高級開發如何在這方面提高本身的能力呢?只能跟在架構師後面,仔細分析具體的設計方案。俗話說,熟讀唐詩三百首,不會做詩也會吟,而各公司多少會有些線上的組件,你們能夠經過看配置文件以及架構的工做流程,並且,在上線一個新架構方案時,能夠多瞭解下避規風險和回退的方案。

6、實踐才能提高,那如何沒實踐機會怎麼提高?

今年我在加入到一個互聯網公司後,因爲有機會接觸到各類架構,因此感受有所提高。相比之下,我以前在一家外企,在架構方面更多的是「看視頻看組件」,而後在組內分享架構的內部代碼(總之就是實踐的機會不多),因此在那段時間裏,我本身感受進度速度不快。

要應聘架構師的職位,首先要有相關實踐經驗, 但對一些沒機會實踐的朋友來講,該怎麼辦?以前個人作法是,看資料,而後冒充本身是架構師去面試,但這很難,由於有經驗的架構師級別的面試官,一看就能看出是真實作過仍是理論經驗。下面就說些真實有效的作法。

  1. 能夠在現有公司,多申請幹些系統上線系統維護方面的工做,在外企,這類職位叫Support,在國內公司叫「系統運維」,具體的工做是負責把系統部署到產線上,以及在產線上搭建各類諸如oracle,mysql, nginx,mq等組件,這些崗位在各公司都有,若是有機會,最好是能在這類崗位上幹一段時間,若是沒機會,就能夠跟相關人員混熟,而後看些配置,瞭解些架構搭建的方式。
  2. 遇到架構方面的方案評審,儘量多參加。組內若是有架構方面的活,儘可能多作些,剛開始必定是不會,不會的時候千萬別怕丟臉,多跟着熟悉架構的同過後面多問,多看看人家是怎麼排查和調試架構方面的活,一來二去就熟悉了。

我也見到過一些同窗,所在的公司用的技術比較傳統,在整個公司裏都沒有機會用到分佈式組件架構,那麼沒辦法了,要麼本身看資料本身練習(這其實效果並很差),要麼本身找個機會跳到互聯網公司。

7、總結

說到底,升級的訣竅只能是多觀察多揣摩多實踐,而升級路上的艱辛,真的是如人飲水,冷暖自知。

本人尚屬勤奮,因此雖然天賦通常,在升級的路上也是一波三折步步艱辛,但在堅持之下,自認爲也算有些進步,因此尚敢寫些心得供你們參考。

若是你們感受本文有所幫助,請幫忙推薦此文,若是感受文章內尚有不足,也請經過評論多多幫助本人,本人不勝感激。

寫在最後

最後,歡迎作Java的工程師朋友們加入Java高級架構進階Qqun:963944895

羣內有技術大咖指點難題,還提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)

比你優秀的對手在學習,你的仇人在磨刀,你的閨蜜在減肥,隔壁老王在練腰, 咱們必須不斷學習,不然咱們將被學習者超越!

趁年輕,使勁拼,給將來的本身一個交代!

相關文章
相關標籤/搜索