如何達到一天上線 100 次的新境界?我看 DevOps

DevOps Job Trends | Indeed.com

DevOps(英文 Development 和 Operations 的組合)是一組過程、方法與系統的統稱,用於促進 開發、技術運營 和 QA 部門之間的溝通、協作與整合。 (from wikipedia)。DevOps 有多熱門呢?看 Indeed 的趨勢圖就知道,應該會是繼 Scrum Development (Agile) 後下一波組織變革的新趨勢。
DevOps 方法的出現主要來自以下幾個原因
  1. 公司開始使用敏捷開發的管理方法
    這幾年開發界很流行的 Scrum (Agile) 的開發流程管理,希望把資源投放在對的事情上讓軟體產出的頻率變快,可是如果只有開發變快但 QA 跟部署等營運管理沒變快,那產品依舊沒辦法快速的端到客戶面前,瓶頸依舊存在。
  2. 業務負責人要求加快產品交付的速率
    只要是盈利的公司,沒有不希望可以更快更有效率的生產產品,所以不用怪老板沒人性,他的任務是盈利最大化,要嘛業務銷售好,要嘛效率提高成本降低,而在軟體領域首先面對這個壓力的是開發人員,所以前面提到的敏捷開發開始盛行,但只有開發效率變好還是不能讓產品更快的交付,營運端也要有提升效率的方法。
  3. 虛擬化和雲計算基礎設施日益普遍
    虛擬化跟 Cloud Computing 的出現讓很多公司不再需要自己管理硬體設備,過去系統營運人員面對實體設備的配置跟調整的任務突然不見了,取而代之的是更多“軟體”的管理,從軟硬各半變成 100% 的軟體系統的管理,伺服器的配置、網路的規劃,通通由軟體做掉,而既然是軟體做掉,那有沒有辦法寫個工具來自動化讓整體效率提升呢?
  4. 傳統管理方式造成開發與技術運營之間的鴻溝
    開發人員 是“功能性導向”,完成功能是主要的任務。開發的時候通常不會好心的考慮架構的問題,直到要部署了才發現這個設計方式行不通。開發的人對於完成功能所做的系統調整通常也只在自己的開發環境會動就好,因爲開發人員面對“系統設定問題”的處理方式通常是看結果不看過程,It’s Work 最重要,但 How it is work 就不是他們關心的重點,但當程式要部署到正式環境時,若缺了這些過程,通常就是造成上線過程一堆問題的原因。
    技術營運人員 是“風險性導向”,妥善率、7x24 不間斷的服務是他們的績效指標,確保系統的“穩定”、“可靠”及“高效”是他們的主要任務。任何可能造成系統有風險的改變盡量避免,加上部署的成本考量,所以對產品的修正通常會要求開發單位不要太頻繁,影響不大的修正盡量搜集多一點後再一次上線。
    發現了嗎?這兩個角色看待任務的方式不同,也因爲這個不一致造成開發與技術營運團隊間的鴻溝,這是“管理”問題!所以如果想讓規模較小的修正持續的上線,又能控制系統的不穩定風險,就需要有新的管理及協作方式加入,DevOps 就是目前業界爲解決這個問題提出的方法,透過讓開發人員更營運導向,讓技術營運人員更開發導向的方式,讓兩個功能更早就接觸跟溝通。
但要如何讓 DevOps 在組織裏面能有效率的運作呢? 有一個新的角色出現 - DevOps Engineer 。不翻譯是因爲這個 buzzword 目前並沒有好的譯法,wiki 翻成 “發布協調人” 但我認爲並不能涵蓋這個角色的任務。
因應 DevOps 的方法的導入,組織裏面會增加 DevOps Engineer 的角色或組織,DevOps Engineer 的核心任務是 “讓產品持續整合部署”,可以拆解成以下幾個項目
  1. 持續整合部署的分析、架構設計及執行(Continuous Integration)
    DevOps Engineer 爲了滿足 “讓產品持續整合部署” 的任務,需要有一套自動化的機制,讓部署的流程減少人工涉入,達到持續整合部署的目標。
  2. 產品部署及部署階段跨功能的協調
    產品的部署牽涉到很多流程、設定等技術細節及跨單位或功能組織的協調,過去還沒有 DevOps Engineer 前,有些公司由 Release Manager 這個角色來負責。
  3. 雲端運算架構的規劃與執行
    組織內部應該有人來決定雲端運算的系統架構,針對產品的長期發展、成本管理、開發效率等面向,提供適當的系統架構規劃,例如公司在現在這個階段是要用 IaaS 就好,還是應該導入 PaaS 提升跨部門開發效率?而且做這件事的方法要符合 Agile 的精神以確保不會想太多做了過多不必要的投資,DevOps Engineer 是同時了解產品開發趨勢及系統架構設計的人,由他們來規劃可以更貼近產品需求。
DevOps Engineer 需要以下技能
(from https://puppetlabs.com/blog/what-is-a-devops-engineer
  • Ability to use a wide variety of open source technologies and tools
  • Ability to code and script
  • Experience with systems and IT operations
  • Comfort with with frequent, incremental code testing and deployment
  • Strong grasp of automation tools
  • Data management skills
  • A strong focus on business outcomes
  • Comfort with collaboration, open communication and reaching across functional borders
網路上很多文章在談 DevOps Engineer 的養成路徑,主要兩個方向,
一是由 系統人員(SE / DBA / 網管)培養 Coding 技能後轉職過來,
一是由 Back-End 工程師 培養 系統管理技能 後轉職過來。
DevOps 的目的是讓產品更快速的推進,因此 DevOps Engineer 的工作形式也會跟過去的系統管理人員不同。如下圖,傳統技術維運組織一個人員負責單一功能並管理多個產品,導入 DevOps 後一個產品有一個以上(依照產品規模配置)的專屬的 DevOps Engineer 負責系統管理、資料庫管理、系統架構設計、持續整合部署等相關任務。以前管的比較廣但局限在單一技術,現在管的領域比較多元但產品會聚焦。另外 DevOps Engineer 會跟着產品團隊一起運作,成爲 Product Agile Team 的成員,最好連座位都安排在一起減少溝通成本。
DevOps 工程師與產品的關係
當然導入 DevOps 後的組織設計方式每個公司都不一樣,需依照不同的情境、人員的技能狀況等來設計,例如原本不會管資料庫的 SE 要補齊資料庫管理技能需要一些時間跟訓練。對人員而言短期在技能訓練上會有些壓力,但長期讓原本系統管理的人員有機會往產品流動,也讓開發人員有機會往系統管理流動,從管理的角度來看讓人才更多元發展,對個人或公司應該都是好事。
References :
*本文未經同意不得轉載
Written with StackEdit.

0 意見:

張貼留言