解釋:
DevOps(Development和Operations的組合詞)是一組過程、方法與系統的統稱,用於促進開發(應用程式/軟體工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。
它是一種重視“軟體開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化、運動或慣例。透過自動化“軟體交付”和“架構變更”的流程,來使得構建、測試、釋出軟體能夠更加地快捷、頻繁和可靠。
它的出現是由於軟體行業日益清晰地認識到:為了按時交付軟體產品和服務,開發和運營工作必須緊密合作。
DevOps對應用程式釋出的影響
在很多企業中,應用程式釋出是一項涉及多個團隊、壓力很大、風險很高的活動。然而在具備DevOps能力的組織中,應用程式釋出的風險很低,原因如下
(1)減少變更範圍
與傳統的瀑布模式模型相比,採用敏捷或迭代式開發意味著更頻繁的釋出、每次釋出包含的變化更少。由於部署經常進行,因此每次部署不會對生產系統造成巨大影響,應用程式會以平滑的速率逐漸生長。
(2)加強釋出協調
靠強有力的釋出協調人來彌合開發與運營之間的技能鴻溝和溝通鴻溝;採用電子資料表、電話會議和企業門戶(wiki、sharepoint)等協作工具來確保所有相關人員理解變更的內容並全力合作。
(3)自動化
強大的部署自動化手段確保部署任務的可重複性、減少部署出錯的可能性。
與傳統開發方法那種大規模的、不頻繁的釋出(通常以“季度”或“年”為單位)相比,敏捷方法大大提升了釋出頻率(通常以“天”或“周”為單位)。
實現DevOps需要什麼?
硬性要求:工具上的準備
上文提到了工具鏈的打通,那麼工具自然就需要做好準備。現將工具型別及對應的不完全列舉整理如下:
程式碼管理(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
Web伺服器:Apache、Nginx、IIS
資料庫:MySQL、Oracle、PostgreSQL等關係型資料庫;cassandra、mongoDB、redis等NoSQL資料庫
專案管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
在工具的選擇上,需要結合公司業務需求和技術團隊情況而定。(注:更多關於工具的詳細介紹可以參見此文:51 Best DevOps Tools for #DevOps Engineers)
軟性需求:文化和人
DevOps成功與否,公司組織是否利於協作是關鍵。開發人員和運維人員可以良好溝通互相學習,從而擁有高生產力。並且協作也存在於業務人員與開發人員之間。
出席了2016年倫敦企業級DevOps峰會的ITV公司在2012年就開始落地DevOps,其通用平臺主管Clark在接受了InfoQ的採訪,在談及成功時表示,業務人員非常清楚他們希望在最小化可行產品中實現什麼,工程師們就按需交付,不做多餘工作。
這樣,工程師們使用通用的平臺(即打通的工具鏈)得到更好的一致性和更高的質量。此外,DevOps對工程師個人的要求也提高了,很多專家也認為招募到優秀的人才也是一個挑戰。
個人觀點:
照目前來看,如果一家軟體公司 單從技術層面 來講。技術團隊負責人 沒有做好對應的技術規劃和索要實現的技術策略,到後期改動的成本遠遠大於前期做好規劃所花費的成本
這是我在2018年一家電子公司 為公司所構建的技術框架和所要達成的技術結構
這裡就要談到個人對新技術的研究 和興趣廣泛度 ,如果一個人直了解其中之一 其它都不瞭解 很難做出高可用的技術層面的架構 這些遠遠不夠!還有很多可以整合到一起 作為技術實現。
這僅僅是技術層面 ,實際情況還是要從業務層面 去構建相應的是實現方案。