Skip to content

Latest commit

 

History

History
287 lines (275 loc) · 16.7 KB

devops.md

File metadata and controls

287 lines (275 loc) · 16.7 KB

DevOps 工程師生涯寶典

入門期

  • 你真的適合當 DevOps 工程師嗎?
    • 有些人想當 DevOps 工程師只是因為
      • 以為被取代性低
      • 薪資條件不錯
      • 可以獨立作業
      • 不用跟人溝通
    • 實際上這個職業跟其他職業也差不多
      • 剛入門時薪水沒高到哪去
        • 可能多一點是下班時還要待命處理伺服器緊急狀況的加成
      • 溝通依然很重要
        • 後端調整停機維護都需要通知開發組、市場組
        • 和開發組溝通瞭解新功能對後端的負載能力影響
      • 更需要寫下架構調整記錄,操作指令,各種狀況 SOP 等文檔
    • DevOps 工程師是一份需要透過時間累積經驗的工作
      • 長時間使用作業系統瞭解底層架構和熟練文字指令操作
      • 在自動化前需要先反覆重複操作熟悉流程
      • 透過處理伺服器的各種突發狀況累積經驗
      • 維護各種大中小型網站瞭解不同階段架構的需求
      • 隨著網站流量增高不停的成長學習更進階的架構,引入不同的技術
      • 行業優先喜歡挑選 30 以下的年輕人。
        • 還有時間累積經驗
        • 還有體力可以熬夜
      • 30 歲以上「一般 DevOps 工程師」只能繼續幹著一般維護,監控服務器狀況的工作
      • 30 歲以上「優秀 DevOps 工程師」容易被挖角到高速成長的網站公司解決架構問題
    • DevOps 工程師本質上是一份賣腦又賣肝的工作
      • 隨著網站流量變大需要不停的學習更進階的架構
      • 處理緊急狀況時的壓力心理素質要好
      • 會有需要在午夜甚至凌晨作業的情況
        • 必須等其他人都下班後才能動架構避免影響開發部屬
        • 必須在凌晨網站人最少時停機維護避免影響用戶體驗
      • 簡單來說選 DevOps 工程師這個行業,得在 22-35 這短短的 13 年,建立起自己的經驗護城河
        • 一開始就選對好公司從小網站維護到變成大網站
        • 維護一個網站時間要夠久才能接觸各種突發狀況
        • 怎麼在工作生涯裡可以有挑戰高流量網站的經驗
  • 如何挑選適合自己的職業?
    • 有兩個方向,選工資還是選上班心情。
      • 應該選上班心情,因為個性如果不適合,不想要長時間面對冷冰冰的伺服器,還有大部分時間都是使用文字指令介面來操作作業系統,喜歡研究作業系統底層的東西,越 geek 越難使用越想鑽研進去的話,很難有熱忱長久待在這個崗位上
    • 技能人格
      • 流程自動化
        • 工作特性:要先有耐心反覆練習操作同樣的流程,熟悉後寫成 Scripts 自動化,感受自動化後一步到位不出錯的快感
      • 收集數據
        • 工作特性:把各種 log 收集起來,喜歡從 log 裡面分析研究數據挖掘有價值的資訊
      • 監控效能
        • 工作特性:監控網站及伺服器各種數據,看著伺服器的圖表變化就像自己的呼吸一樣,能察覺異常的情況及網站是否過載需要擴展
      • 架構擴展
        • 工作特性:對於架設出不倒站高可用性的網站,及管理更多的服務器有無上的成就感
    • 共用人格
      • 獨立解決問題的能力 (半夜輪班只有自己怎麼獨立處理不吵起其他人)
      • 抗壓力強心理素質高 (處理緊急狀況時怎麼冷靜分析下指令操作又不炸掉東西)
      • 有耐心可以抽絲剝繭找出發生問題的原因和源頭 (debug 時要從整個網站架構所有可能出問題的地方應用層、第三方套件、作業系統、網路、服務商裡找出真正發生問題的原因,還需要分析大量的 log 記錄)
    • 選錯不適合的工種,可能會生不如死,覺得上班非常無聊沒有動力,沒有活力感到倦怠
    • 如果你不能接受這行特性,還有很多職業可以挑,不用死嗑這一行
  • 如何找到職場上的導師
    • 新人建議第一份工作不一定要找大公司,找有潛力的公司從小網站一路發展成大網站可以學習到不同階段所需要的架構經驗
    • 豐富經驗的前輩能夠省你非常多彎路
      • 有自己的 Best Practices 和維護好的自動化 Scripts
      • 架站流程已經幫你順好寫成文檔
      • 有耐性指導你的錯誤與方向
    • 前輩≠老師,所以他沒有義務教你教到會,
      • 你要是悟性太低依賴心太重,不只是工程師界,一般行業也會請你走。
      • 只是找到一個經驗豐富的前輩,會讓你工程師生涯開掛
      • 有些內行的公司,甚至只願意收特定工程師帶過的徒弟而已
    • 這些經驗不是外面補習班能上的到,以及花錢買得到的知識
  • 如何篩選自己第一份工作
    • 第一份工作的重點,練習基本功,搞清楚業界情況
    • 狀況 A: 你很幸運能找到一份有厲害老師的工作
      • 抱緊大腿,能學多少用力學,能請教多少用力請教
      • 學到老師被你學乾為止(正確來說是按照前輩的指點自我練習,沒有工程師喜歡「學生」同事)
    • 其他狀況:接案公司、創業公司、小公司、大公司
      • 一般來說,第一份工作通常是人選你,不是你選人
      • 接案公司:
        • 用重複使用的自動化架站 Scripts 幫客戶架好網站就行,還有後續維護
        • 通常網站規模不大,練練基本功
        • 接案公司沒有專職的 DevOps,通常要幫忙開發網站功能才有存在的價值
      • 創業公司:
        • 是否初期就加入公司網站的建設,可以感受自己一手從頭搭建起整個網站
        • 公司發展快速可以經歷學習從小中大各個規模網站發展需要擴展的技能
          • 但也很高壓,要能快速學習解決網站過載需要從那下手調整架構
        • 要一邊在快速手動迭代架構的情況下,一邊考慮怎麼把部分流程自動化
      • 小公司:
        • 是否接手前人架好的網站,如果在沒有文檔的情況下是否能依靠自己對作業系統熟悉的程度和經驗知道到哪查看設定檔,查看系統正在執行的程序知道哪些很重要不能掛掉,有沒有辦法重新整理再架出一樣環境的伺服器網站
        • 如果只有自己一個 DevOps 能照自己的方式管理和整理伺服器,也有夠多時間慢慢把各流程自動化
      • 大公司:
        • 可以接觸到很貴的高級設備,很貴的服務,公司有錢讓你呼叫廠商幫忙解決問題,但是自己也要有一定的技術能力和廠商協作搞懂解決問題
        • 對進入伺服器的權限和安全性高度敏感,有時沒有太高的權限難以解決問題,也不能隨意調整架構,必須請教資深的同事幫忙,比較沒有彈性
    • 大體方向:
      • 搞清楚你喜不喜歡當 DevOps 工程師管伺服器,喜歡面對冷冰冰的伺服器還有文字指令模式和 24 小時 on-call 的責任,處理伺服器緊急狀況的高壓,不喜歡趕快換
      • 很多面試官知道對第一份工作、第二份工作、第三份工作有不同的期待值考核。
        • 如果你換到第三份還是沒有相對應技能標竿
        • 對方可能直接就從履歷上開始刷
  • 新手 DevOps 工程師的面試技巧
    • 如何包裝自己
      • 新手 DevOps 工程師,基本面試官不太看 Skill,因為覺得寫的都是假的。
        • 只看這個人個性、背景與行業契不契合。
        • 再看這個人的學習、抗壓能力。
    • DevOps 工程師不太看學校,但從資訊家族系所畢業還是需要的,必需具備計算機概念的相關知識
    • 基本網路原理概念要熟。不熟沒有人要用
    • DevOps 工程師對比開發工程師更要求 geek 的精神
    • 什麼人偏好不錄用
      • 不收對管伺服器沒有熱忱的人
        • 對伺服器有熱忱的人,通常都是從學生時代就開始搞架站了
      • 下班了就不想理公司的事情
        • 通常伺服器出問題,如果是某個 DevOps 動過造成的,除非交接和 SOP 文檔寫的很好同事有辦法幫忙,否則就必需立刻找到本人,用最快的速度解決問題)
      • 不願意幫助同事的人
        • DevOps 才有碰到伺服器的權限,開發和市場偶爾會有需求找上 DevOps,例如 debug 幫忙查看是不是伺服器哪邊的問題, 能不能幫忙撈數據,有時必須在自己的工作很忙時還需要安排時間抽空處理)
  • 新人 DevOps 工程師工作目標 ( 1-2 年)
    • 能夠從頭架起數據庫到網站前端伺服器
    • 能夠做網站前端基本的負載均衡架構
    • 能夠架起監控系統
    • 能夠規劃備份策略
    • 能夠獨力在半夜作業
    • 參加社群認識幾個公司外的同行
    • 知道自己希望下一步學什麼?
      • 怎麼找出效能問題
      • 知道要導入什麼 OpenSource 解決方案
      • 架設高可用性架構
      • 怎麼快速開伺服器加入分散負載並完成部署
      • 怎麼把流程盡量自動化
      • 知道哪邊有廠商資源可以幫忙
  • 一些常見的陷阱
    • 只看高薪
      • 高薪未必有累積,可能只是負責一部分系統,系統權力不夠能摸到的地方也不多
      • 可能是博弈產業
    • 只看公司規模大
      • 公司規模太大會變黃金手銬
      • 給的 pay 高,但是技能成長緩慢
      • 不喜歡工作內容,也捨不得放棄公司名氣
      • 時間就這樣過去了...
    • 覺得前輩老是禁止我做這做那很煩
      • 如果覺得前輩老是釘你。其實多半是你有問題,不是前輩有問題....
      • 資深的都會算你年資多久,應該具備哪些基本能力
    • 關鍵在畢業後 2-3 年內成為中階工程師
  • 不喜歡當 DevOps 工程師盡快轉職
    • 很多人以為當了工程師後,就不能轉職
    • 其實不是。當了工程師回去當一般工作以後,基本上可能會秒殺其他行業
    • 一般職位基本上都再用低效的方法做事,簡單一些技巧就能讓你在它們面前變成超人
    • 你可能在工程師界技術程度是個 loser, 但是在一般工作上你可能是個 winner..
    • 所以如果不喜歡當工程師,建議早點改行不要在這行裡面瞎耗當遊民

--

成長期

  • 如何挑第二份工作
    • 通常你在第一份工作也大致上知道自己喜歡什麼了。如果還不知道請退回到上一步。在第三份工作前盡快找到。否則容易進遊魂狀態。(一直反覆被辭退)
    • DevOps 工程師進階通常有幾個方向
      • 架構師
        • 知道根據網站功能類型需要採用什麼 OpenSource 解決方案
        • 知道要怎麼架出能承載高併發流量並穩定的網站架構
      • 完善自動化流程
        • 自動開伺服器部屬加入分散負載
        • 自動 failover 故障轉移
      • 搭建出公司內部網站監控和預警系統
      • 打造內部管理工具
      • 安全性方面的加強
    • 有些人是小公司往中公司走(希望接觸更高流量的網站挑戰)
    • 有些人是中公司往小公司走(希望照自己的方式管理伺服器)
    • 第一份工作之所以重要,是第一份工作主要是讓你搞清楚行業狀況、練基本功、找老師、找方向用的。
      • 換公司有好有壞
      • 重點是你為何要換?
      • 是你成長超過公司?
      • 還是公司成長超過你?
      • 還是只是其實你不爽裡面的人?不爽這份工作的副產品(肝、型態)
      • 要想清楚自己要什麼?
        • 否則又進遊魂狀態
        • 見過太多遊魂是職業被辭退的(基本功不行,不學習,懶,整天外務很多,無法被信任能做好事)
  • 如何升級?
    • 參加 Meetup
      • 看看 Local 等級的,交交同行朋友,交流技術
      • 鑑定一下自己的等級
    • 參加 Conf
      • 看看世界等級的
      • 看看自己技能差世界等級多少
      • 有時候本地因為行業規模,水平低世界幾個等級,只能靠這種方式拉昇自己眼界
      • 實際跟人交談能夠知道很多網路上不知道的資訊
    • 上英文網站學更高等級的技能
      • 付費網站上面很多現成學習資源
      • 要換其他國家工作,英語是必備技能
    • 繼續尋找下一等級 mentor
      • 去找師傅的師傅
      • 或者去加入創業公司,感受火箭般的速度
    • 建立自己 portfolio
      • 有自己的架站 Scripts
        • 如果不做公司的東西,你有能力快速蓋出自己的東西嗎?
      • 有自己的 blog
        • 你的腦袋清楚嗎?能清楚表述你的技術等級嗎?
      • 有自己的 best practices
        • 如果要整理出一個規範,你有自己的一套制度與框架嗎?
      • 這是下一階職位最看重的幾個指標
  • 建立自己架站以外的軟實力
    • 如果你在 30 多歲以後希望創業
      • 現在就有自己的其他興趣。
      • 軟體公司創業成功不是因為 code 很厲害。而是解決商業上的效率的問題。
      • 不懂商業,coding 再厲害也沒有用。
      • 解決軟體行業的效率問題,賺得錢遠比你想像中的少。因為軟體公司什麼沒有,就是程序員多,程序員大家都不喜歡付錢,喜歡自己幹。
    • 如果你希望提升到更高職位
      • 如 CTO / VP
      • Leadership 是必備技能
        • 無法一輩子靠技術能力壓人
        • 軟體行業變革的更快
      • 人 / 項目管理是必備技能
        • 如何管理 20 / 50 / 100 / 200 + 人
        • 如何管理 1M / 10M / 100M+ 以上的商業 project
      • 英語口說 / 英語協作
        • 不會英語,只能一輩子被鎖在本地
        • 除非本地有 100M+ 以上的 project。
        • 在某些地區這機會太小了
      • 寫作 / 演說是必備技能
        • 只有你懂自己的能力
        • 你不說沒有人知道
        • 工程師的演講能力,大家都很爛。花點錢上課就能秒殺一堆人。
  • 換國家
    • 如果你想要換國家工作。
      • 29歲且具備強大實力是門檻。
      • 所以這表示你 29 歲前,決策都得正確
    • 每個國家移民政策都不斷的收緊
      • 許多管道目前有沒有 COVID-19 都被開始大幅收緊了
      • L1A / L1B
      • H1B
      • 澳洲移民
    • 換國家是個可以深入的議題
      • 前提是心態只有去了不能再回來
      • 我見過很多人只希望過去1-2年就回來
      • 這種人在外面只跟同鄉混,文化進展有限
      • 希望外國公司配合自己的狀況,結果被解雇
      • 去國外吃的苦其實遠比在國內多
        • 你到底希望要什麼樣的人生
        • 其實是你希望這一輩子賺多少錢
        • 去決定你後面的道路
      • 工程師在小國家職業壽命以及職業薪水天花板比較低。因為產業與職缺就是不夠多。

--

成熟期

  • CTO / VP
    • 年薪 150w ~ 300w +
    • 看實力。
    • 台灣很難超過 500w 這是事實
    • 中國 / 美國 比較有可能,這是人口基數、公司規模的問題
    • 要求
      • 能帶人
      • 要求 0 屬下 也能獨立做出項目第一版
      • 能聽懂商業需求並且拆分需求
      • 待過 4-5 個項目以上
      • 熟悉各種技術棧,知道各種 solution pros / cons
  • 接案
    • 比上班薪水高一些
    • 但坑的機率太大了
    • 本質是賣自己的時間
    • 其實工程師的超能力,是節省其他行業的時間,提升其他行業的效率。本身是槓桿行業。
    • 所以去做「利潤」行業其實很不划算。
    • 如果你當 CTO 一年可以賺 200-250w。接案一年要 600w-1000w 才算個划算的生意
    • 其實選擇去創業比較好
  • 創業
    • 創業與你的 coding 技術高低完全無關
    • 創業與你的管理技術高低完全無關
    • 創業只跟辨認風口、管理資金、管理資源有關
    • 這是另外的議題,有空展開
    • 但創業 coding 能力要至少點到一定能力以上才不容易死
  • 工程師為何是個職業生涯短的工作?
    • 每個語言從初露頭角,到該領域議題被探討完成,大約 10 年左右。
    • 程式語言框架大概 6 年可以大致成熟
    • 所以每一個時間段出社會的工程師,學習的領域永遠不一樣
    • 所以不論是哪個細分領域的工程師,永遠處在學新技術、重構新技術的路上
    • 學習新技術的語言需要時間與經驗歷練
    • 在學習新技術的路上,年輕人因為不怕失敗,比較有優勢
    • 在設計架構的路上,資深工程師有優勢,然而代碼總要有人寫
    • 寫代碼需要腦力與體力,許多年輕工程師可以連寫代碼 12-16 個小時,資深工程師不行
    • 所以如果是純工程師不帶其他職務,薪水有天花板上限
    • 如果不是押中會上天的公司,這行業也算純粹賣肉體
    • 值得注意的是工程師是個槓桿行業。也就是工程師在原行業會有因體力的天花板
      • 但是跨行去其他行業,則具備壓縮時間的超能力
      • 因此在原行業快失去優勢前,轉換到其他行業跑道,已經算個必備課題
  • 工程師是否該學會第二語言或前端學後端、後端學前端?
    • 為了溝通效率粗淺的學一些可以。
    • 為了提升薪水的話,並不會有你想像中薪水 1+1 = 2 的效果
    • 與其學另外一門語言,不如學習另外一個行業的知識,跨行碾壓

credit: 林工程師