DevOps 這個詞是由 Development(開發(fā)) 和 Operations(運維)組合起來的,你可以把它理解成為一種讓開發(fā)團隊和運維團隊緊密合作的方法。
DevOps從2009年誕生到現(xiàn)在已經14年多了,一開始大家還在摸索,慢慢地就變成了現(xiàn)在的一種主流開發(fā)交付模式。你肯定也發(fā)現(xiàn)了,DevOps 在我們身邊出現(xiàn)的頻率還蠻高的!各種行業(yè)峰會上都有它的專場,行業(yè)里的公司在招 DevOps 工程師,企業(yè)在做 DevOps 轉型,在設計和開發(fā) DevOps 平臺等等……
現(xiàn)在已經很少還有人在問“DevOps 有啥用”、“DevOps適不適合我”這種問題了,大家都更關心怎么落地實踐 DevOps,怎么讓它充分發(fā)揮價值。而且 DevOps 專家的崗位薪資也很高,僅次于一些高級管理層,都已經到了 IT 行業(yè)的金字塔頂部區(qū)域。
所以說,DevOps 基本上成了所有 IT 從業(yè)人員都必備的技能。不過呢,因為市場上資料太多太雜,個人的精力又有限,好多人都挺困惑的。
下面小艾老師就幫大家來科普一下。
01
對DevOps的理解
任何牛逼的項目,都是從一個單體項目慢慢發(fā)展而來。我們IT開發(fā)里邊_個要面對的就是單體架構,然后一步一步到集群、分布式、微服務、容器化,開發(fā)模式從瀑布開發(fā),到敏捷開發(fā),再到DevOps。
單體架構+瀑布開發(fā):如果服務器少,部署又簡單(基本就是LNMP),那就不需要運維,開發(fā)直接按照瀑布流方式進行就好了。寫好代碼,找臺服務器安裝好環(huán)境,把 jar 包上到遠程服務器,開啟服務就好了。

分布式架構+敏捷開發(fā):后面業(yè)務體量大了,一臺服務器扛不住,就要加機器,再加入 nginx、cdn、緩存等通用基礎服務,這個時候需要專門的運維人員(Ops)介入,需要多人協(xié)同開發(fā)。然后因為業(yè)務可能也變復雜了,開發(fā)就會分工,每個人負責一小部分,再通過不斷迭代,小步快跑的方式持續(xù)開發(fā),這個就是敏捷開發(fā)。

微服務架構+DevOps:如果發(fā)展到阿里、騰訊這種體量,或者系統(tǒng)復雜到一定程度,協(xié)同開發(fā)會涉及到很多人,JAVA,PHP,GO 各種技術棧都會有,一般的做法就是將項目拆成一個個小的服務單獨部署,不然一個Bug就能導致業(yè)務線全線崩潰了。

拆分部署,就催生出了DevOps。所謂DevOps開發(fā)模式,實際上就是運維事先把上線的規(guī)則都給定義好了,開發(fā)只要按照規(guī)則自己就可以完成上線,如果出問題了也可以快速定位去調整。運維要做的就是制定規(guī)則和自動化的代碼及工具,比如監(jiān)控,有專門的監(jiān)控組件和可視化,基礎服務有CDN、負載均衡,日志也有專門的日志工具等等……只要配置好這些工具,開發(fā)即運維,就能做一部分運維的事情了。

DevOps 的三大支柱:即人(People)、流程(Process)和平臺(Platform)。
人 + 流程 = 文化
流程 + 平臺 = 工具
平臺 + 人 = 賦能
02
DevOps平臺搭建工具

↑DevOps 工具全景圖
項目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
產品和UI圖:藍湖
代碼管理(SCM):GitHub、GitLab、BitBucket、SubVersion
構建工具:Ant、Gradle、maven
自動部署:Capistrano、CodeDeploy
持續(xù)集成CI(Continuous Integration):Gitlab CI
持續(xù)交付CD(Continuous Delivery):Gitlab CD
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方廠商如AWS
編排:K8S、Kubernetes、Core、Apache Mesos、DC/OS
服務注冊與發(fā)現(xiàn):Zookeeper、etcd、Consul
腳本語言:python、ruby、shell
日志管理:ELK、Logentries
系統(tǒng)監(jiān)控:Datadog、Graphite、Icinga、Nagios
性能監(jiān)控:AppDynamics、New Relic、Splunk
壓力測試:JMeter、Blaze Meter
預警:PagerDuty、pingdom、廠商自帶如AWS SNS
網(wǎng)關:Kong,zuul
鏈路追蹤:Zipkin
HTTP加速器:Varnish
消息總線:ActiveMQ、SQS
應用服務器:Tomcat、JBoss
Web服務器:Apache、Nginx、IIS
數(shù)據(jù)庫:MySQL、Oracle、PostgreSQL等關系型數(shù)據(jù)庫;cassandra、mongoDB、redis等NoSQL數(shù)據(jù)庫
03
要實踐 DevOps ,需要知道些什么?
不同公司的“DevOps 工程師”含義不同。小型公司可能找有系統(tǒng)管理經驗的,大型公司或老牌公司,已經有一個穩(wěn)固的系統(tǒng)管理團隊了,他們要找的可能在 “設計運維功能的軟件工程師”……這取決于不同公司的招聘經理。
一般來說,招聘的“DevOps 工程師“需要對以下這些內容有深入學習:
- 管理和設計安全、可擴展的云平臺,像 AWS 等。
- 用流行的 CI/CD 工具構建發(fā)布部署流水線和策略,如 Jenkins 等。
- 用基于時間序列的工具監(jiān)控、記錄和報警,像 Kibana 等。
- 用配置管理工具做到“基礎設施即代碼”,像 Chef 等,還有發(fā)布工具如 Terraform 等
- 容器越來越受歡迎,掌握 Docker 等及編排工具知識有幫助。
如果你希望做 DevOps 實踐的系統(tǒng)管理員,還得會寫代碼,Python 和 Ruby 是DevOps的流行語言。
如果你是開發(fā)人員,想做 DevOps ,建議再學學 Unix、Windows 及網(wǎng)絡知識。
如果你覺得這些內容多,也別擔心。建議參加艾威的DevOps Foundation認證培訓,此認證由 DevOps 學院與 PeopleCert 聯(lián)合推出,提供了一套“成體系”的 DevOps 實踐知識、工具和方法,非常值得我們學習。