picture from https://en.wikipedia.org/wiki/DevOps
DevOps 是團隊⽂文化。
picture from http://www.slideshare.net/CAinc/dev-ops-a-
culturetransformationmorethantechnology?
qid=447e66a2-9330-43aa-8e2c-8fb047508c8f&v=default&b=&from_search=6
picture from http://www.slideshare.net/CAinc/dev-ops-a-
culturetransformationmorethantechnology?
qid=447e66a2-9330-43aa-8e2c-8fb047508c8f&v=default&b=&from_search=6
古早古早,蕃薯吃不飽
• 把程式碼放到伺服器上,這是 tarball。
• 安裝相依性是什麼? 怎麼安裝?
• 哪⼀一個資料庫?
• 誒~ 我的電腦不能裝這個誒。
• RD: 奇怪,在我的電腦上裝正常誒。
營運
• 哪⽀支程式讓伺服器CPU過載?
• 現在記憶體⽤用量多少?
• 現在伺服器跑的是哪⼀一個版本的程式碼?
• 現在有多少使⽤用者,伺服器頂得住嗎?
• 哎呀! debugging mode 怎麼開著!
• 這⽀支程式誰寫的,網站噴Error了。
產品上線
• 上線很痛苦
• 網站跟伺服器架構是⼀一體兩⾯面的
• 程式碼可以在offline時做測試,⾃自動化
• 但伺服器架構呢?
• 沒⼈人喜歡上線,除了⽼老闆
⼈人⽣生七⼗十網站上線才開始
使⽤用者能挖掘出的Bug,遠⽐比上線之前你想像的多
開發與營運的對⽴立
• Dev A: 在我的電腦就正常,怎麼上線後就不正常
了,伺服器那邊有問題吧?
• Ops: 我最近甚麼都沒改,只有上線的程式碼改了,
⼀一定是你的問題。
問題出在哪? 開發端還是營運端?
使⽤用者與開發的對⽴立
• 上線之前: 花了三個⽉月開發的功能
• 上線之後: 使⽤用者說這是個Bug
• ⽼老闆: OMG~ 趕快改⼀一改,趕快再上線!!!!!
產品上線要多久?
• 1 台伺服器的時候
• 2 台伺服器的時候
• 10 台伺服器的時候
• 100 台伺服器的時候
• 10000 台伺服器的時候!!!!!!
後 PASS 時代,加機器變快了
• AWS
• Heroku
• Windows Azure
• GAE
• Parse
但準備環境依舊花時間
• 產品程式碼要從哪邊拉? 哪⼀一版? 怎麼安裝?
• 作業系統要裝哪些套件?
• 設定檔怎麼改?
• 資料庫怎麼接?
• 網路環境架構?
• 伺服器狀態怎麼監控?
及早獲得回饋,及早治療
• 新功能做好了
• 使⽤用者喜歡嗎? 增加了多少使⽤用者?
• 使⽤用者願意為了這個功能付錢嗎?
• 沒多少⼈人想⽤用,趕快再下⼀一個開發週期趕快修正。
• 有 Bug, 趕快修,避免流失使⽤用者。
• 時常出現更新,讓使⽤用者產⽣生新鮮感,繼續使⽤用產
品。
DevOps 的⺫⽬目的
• 讓產品能持續不斷地提供更新,交付時程縮短。
• 從⽉月為單位轉成週為單位,甚⾄至是⼩小時為單位。
• ⺫⽬目的是盡量快點上線讓使⽤用者使⽤用,取得使⽤用者回饋
• 做為下⼀一次開發的決策依據。
• 讓產品開發者專注在開發⼯工作上,⽽而不是環境設定。
怎麼達成?
無⽌止境的迴圈
picture from http://devana.rs/blog/devops-is-a-culture-not-a-job-description/
Build Pipelines
Software Build & Test
Data Build & Test
Infrastructure Build & Test
OS Level
Application
Data
開發環境
• Version Control
• Automated Build
• Bugtracking
• Continous Integration
• Integrated testing
• Automated Deployment
• Version Control
• Automated Build
• Bugtracking
• Continous Integration
• Integrated testing
• Automated Deployment
For Devs For Ops
Version Control
別想了,就先⽤用這個吧
picture from http://giscollective.org/github-bringing-geojson-to-life-since-2013/
Continuos Integration
• 程式碼要做版本控制 - git + github
• 將開發中的程式碼跟上線中的程式碼分開 - git flow
• 正式上線的 branch 叫 master
• 開發中的 branch 叫 develop
• 每⼀一次有⼈人 commit 程式碼就跑⼀一次測試!!!!
程式碼測試
• 單元測試
• 針對 function, class 做測試
• 功能測試
• ⾃自動化編譯
• 針對功能做測試
Travis
可與 Github 無痛接軌
不需⾃自⼰己維護
容易設定
travis.com
Continous Deployment
• 伺服器, 網路架構安裝設定⾃自動化
• 讓開發環境, 測試環境, 線上環境保持⼀一致
• 減少⼈人為失誤,增加安全性
• 容易備份, 容易升級
• ⾼高可靠性 - uptime 99.99!
• 延展性 - 流量爆衝時, 是否能輕鬆延展架構
• 與軟體開發時⼀一樣,能確保異常可再交付前發現
安裝/設定⾃自動化
• 安裝100台電腦
• 修改1000個檔案
• 如果同時呢?
• 你可以⽤用
• ansible, salt, puppet, chef
這些東⻄西簡單來說...
• 包含
• 可重複被利⽤用的腳本
• 作業系統套件安裝
• 設定檔範本
• Shell Command
• ⼀一些⼩小⼯工具
• 容易讓⼈人找到可重複利⽤用腳本的網路服務
環境⼀一致
• 讓運⾏行環境與程式碼可以被封裝起來
• 防⽌止發⽣生
• “A: 你的code我跑不起來誒”, B: “可是在我的電腦
可以!”
• 你可以使⽤用
• vagrant, docker
picture from https://www.docker.com/
picture from https://www.docker.com/
謝謝聆聽

F723000 class#5 devops