DevOps的概念
DevOps一次詞的來自於Development和Operations的組合,突出重視軟件開發人員和運維人員的溝通合作,通過自動化流程來使得軟件構建、測試、發佈更加快捷、頻繁和可靠。
DevOps是爲了填補開發端和運維端之間的信息鴻溝,改善團隊之間的協作關係。不過需要澄清的一點是,從開發到運維,中間還有測試環節。DevOps其實包含了三個部分:開發、測試和運維。
換句話說,DevOps希望做到的是軟件產品交付過程中IT工具鏈的打通,使得各個團隊減少時間損耗,更加高效地協同工作。
DevOps的幾個關鍵問題
1 好處是什麼
DevOps的一個巨大好處就是可以高效交付,這也正好是它的初衷。Puppet和DevOps Research and Assessment (DORA) 主辦了2016年DevOps調查報告中,根據全球4600位各IT公司的技術工作者的提交數據統計,得出高效公司可以完成平均每年1460次部署。與低效組織相比,高效組織的部署頻繁200倍,產品投入使用速度快2555倍,服務恢復速度快24倍。在工作內容的時間分配上,低效者要多花22%的時間用在爲規劃好或者重複工作上,而高效者卻可以多花29%的時間用在新的工作上。所以這裏的高效不僅僅指公司產出的效率提高,還指員工的工作質量得到提升。
DevOps另外一個好處就是會改善公司組織文化、提高員工的參與感。員工們變得更高效,也更有滿足和成就感;調查顯示高效員工的僱員淨推薦值(eNPS:employee Net Promoter Score)更高,即對公司更加認同。
2 快速部署同時提高IT穩定性。這難道不矛盾嗎?
快速的部署其實可以幫助更快地發現問題,產品被更快地交付到用戶手中,團隊可以更快地得到用戶的反饋,從而進行更快地相應。而且,DevOps小步快跑的形式帶來的變化是比較小的,出現問題的偏差每次都不會太大,修復起來也會相對容易一些。
因此,認爲速度就意味着危險是一種偏見。此外,滯後軟件服務的發佈也並不一定會完全地避免問題,在競爭日益激烈的IT行業,這反而可能錯失了軟件的發佈時機。
而對於工程師而言,他們也是DevOps的受益者。微軟資深工程師Scott Hanselman說過“對於開發者而言,最有力的工具就是自動化工具”(The most powerful tool we have as developers is automation)。常用的自動化工具如下:
- 代碼管理(SCM):GitHub、GitLab、BitBucket、SubVersion
- 構建工具:Ant、Gradle、maven
- 自動部署:Capistrano、CodeDeploy
- 持續集成(CI):Bamboo、Hudson、Jenkins
- 配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
- 容器:Docker、LXC、第三方廠商如AWS
- 編排:Kubernetes、Core、Apache Mesos、DC/OS
- 服務註冊與發現:Zookeeper、etcd、Consul
- 腳本語言:python、ruby、shell
- 日誌管理:ELK、Logentries
- 系統監控:Datadog、Graphite、Icinga、Nagios
- 性能監控:AppDynamics、New Relic、Splunk
- 壓力測試:JMeter、Blaze Meter、loader.io
- 報警:PagerDuty、pingdom、廠商自帶如AWS SNS
- HTTP加速器:Varnish 消息總線:ActiveMQ、SQS
- 應用服務器:Tomcat、JBoss、IIS
- Web服務器:Apache、Nginx
- 數據庫:MySQL、Oracle、PostgreSQL等關係型數據庫;cassandra、mongoDB、redis等NoSQL數據庫
- 項目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker