在本篇文章中,讓我們看看什麼是DevOps,為什麼它如此重要! 我們將首先跟蹤導致DevOps的軟體開發方法的演變,然後探索什麼是DevOps及其生命周期,並通過評估世界頂級公司如何使用DevOps來獲得益處。 ...
0 DevOps的意圖
究竟什麼是DevOps? 要想回答這個問題,首先要明確DevOps這個過程參與的人員是誰?即開發團隊和IT運維團隊!那麼,DevOps的意圖是什麼呢?即在兩個團隊之間,建立良好的溝通和協作,更快更可靠的創建高質量軟體!
事實上,並不是這兩個團隊之間的協作幫助交付了更好的軟體,而是“開發”和“運維”團隊之間的統一導致了軟體的改進,並以更快的速度交付。我們不要忘記DevOps工具在實現自動化方面所扮演的角色。
開發和運維“一體”的感覺是由開發人員和操作工程師之間的技能組合和實踐的橋接以及自動化(DevOps)工具的實現引起的。 世界各地的大型互聯網公司已採用DevOps方法來徹底改進其性能,安全性和團隊動態。
在本篇文章中,讓我們看看什麼是DevOps,為什麼它如此重要! 我們將首先跟蹤導致DevOps的軟體開發方法的演變,然後探索什麼是DevOps及其生命周期,並通過評估世界頂級公司如何使用DevOps來獲得益處。
1 軟體開發的演變
多年來,DevOps從現有的軟體開發策略/方法發展而來,以響應業務需求。讓我們簡要地看一下這些模型是如何演變的,以及它們最適合的場景。
緩慢而繁瑣的瀑布模型演變成敏捷,開發團隊在短時間內完成軟體開發,持續時間甚至不超過兩周。如此短的發佈周期幫助開發團隊處理客戶反饋,並將其與bug修複一起合併到下一個版本中。
雖然這種敏捷的SCRUM方法為開髮帶來了敏捷性,但它在運維方面卻失去了敏捷實踐的速度。開發人員和運維工程師之間缺乏協作仍然會減慢開發過程和發佈。
DevOps方法就是基於對更好的協作和更快的交付的需求而產生的。DevOps允許用較少複雜問題的持續軟體交付來修複和更快地解決問題。
現在我們已經瞭解了DevOps的發展,讓我們來詳細看看DevOps是什麼。
2 什麼是DevOps?
DevOps是一種軟體開發方法,涉及軟體在整個開發生命周期中的持續開發,持續測試,持續集成,持續部署和持續監控。 這些活動只能在DevOps中實現,而不是敏捷或瀑布,這就是為什麼頂級互聯網公司選擇DevOps作為其業務目標的前進方向。 DevOps是在較短的開發周期內開發高質量軟體的首選方法,可以提高客戶滿意度。
在不瞭解DevOps生命周期的情況下,對DevOps的理解也會片面化。現在讓我們看看DevOps生命周期,並探討它們如何與下圖所示的軟體開發階段相關聯。
持續開發:
這是DevOps生命周期中軟體不斷開發的階段。與瀑布模型不同的是,軟體可交付成果被分解為短開發周期的多個任務節點,在很短的時間內開發並交付。
這個階段包括編碼和構建階段,並使用Git和SVN等工具來維護不同版本的代碼,以及Ant、Maven、Gradle等工具來構建/打包代碼到可執行文件中,這些文件可以轉發給自動化測試系統進行測試。
持續測試:
在這個階段,開發的軟體將被持續地測試bug。對於持續測試,使用自動化測試工具,如Selenium、TestNG、JUnit等。這些工具允許質量管理系統完全並行地測試多個代碼庫,以確保功能中沒有缺陷。在這個階段,使用Docker容器實時模擬“測試環境”也是首選。一旦代碼測試通過,它就會不斷地與現有代碼集成。
持續集成:
這是支持新功能的代碼與現有代碼集成的階段。由於軟體在不斷地開發,更新後的代碼需要不斷地集成,並順利地與系統集成,以反映對最終用戶的需求更改。更改後的代碼,還應該確保運行時環境中沒有錯誤,允許我們測試更改並檢查它如何與其他更改發生反應。
Jenkins是一個非常流行的用於持續集成的工具。使用Jenkins,可以從git存儲庫提取最新的代碼修訂,並生成一個構建,最終可以部署到測試或生產伺服器。可以將其設置為在git存儲庫中發生更改時自動觸發新構建,也可以在單擊按鈕時手動觸發。
持續部署:
它是將代碼部署到生產環境的階段。 在這裡,我們確保在所有伺服器上正確部署代碼。 如果添加了任何功能或引入了新功能,那麼應該準備好迎接更多的網站流量。 因此,系統運維人員還有責任擴展伺服器以容納更多用戶。
由於新代碼是連續部署的,因此配置管理工具可以快速,頻繁地執行任務。 Puppet,Chef,SaltStack和Ansible是這個階段使用的一些流行工具。
容器化工具在部署階段也發揮著重要作用。 Docker和Vagrant是流行的工具,有助於在開發,測試,登臺和生產環境中實現一致性。 除此之外,它們還有助於輕鬆擴展和縮小實例。
持續監控:
這是DevOps生命周期中非常關鍵的階段,旨在通過監控軟體的性能來提高軟體的質量。這種做法涉及運營團隊的參與,他們將監視用戶活動中的錯誤/系統的任何不正當行為。這也可以通過使用專用監控工具來實現,該工具將持續監控應用程式性能並突出問題。
使用的一些流行工具是Splunk,ELK Stack,Nagios,NewRelic和Sensu。這些工具可幫助密切監視應用程式和伺服器,以主動檢查系統的運行狀況。它們還可以提高生產率並提高系統的可靠性,從而降低IT支持成本。發現的任何重大問題都可以向開發團隊報告,以便可以在持續開發階段進行修複。
這些DevOps階段連續迴圈進行,直到達到所需的產品質量。下麵的圖表將顯示可以在DevOps生命周期的哪個階段使用哪些工具。
既然我們已經確定了DevOps的重要性,並且瞭解了它的不同階段以及所涉及的DevOps工具,現在讓我們看看Facebook的一個案例研究,並理解為什麼他們從敏捷轉向DevOps。我們將採用Facebook曾推出的新特性的用例,這些新特性導致Facebook重新評估其產品交付並採用DevOps方法。
3 DevOps案例研究
曾經,Facebook向遍佈全球的若幹億用戶推出了一系列新功能 - 時間軸,推薦和音樂功能。 發佈後Facebook上產生的巨大流量導致伺服器崩潰。 推出的功能獲得了用戶的大規模超常規響應,這導致了新功能產生了不可控的結果,使他們沒有預料到。
這導致了Facebook重新評估和戰略調整,從而使Facebook推出了暗啟動技術。 使用DevOps原則,Facebook為其新版本的發佈創建了以下方法。
Facebook暗啟動技術
暗啟動是在新功能完全發佈給所有用戶之前,逐步將新功能,推廣到選定的一組用戶的過程。 這允許開發團隊儘早獲得用戶反饋,測試錯誤,並且還可以測試基礎架構性能。 這種發佈方法是持續交付的直接結果,有助於實現更快,更迭代的版本,確保應用程式性能不會受到影響,並且用戶可以很好地更新該版本。
在暗啟動技術中,新功能通過專用的部署管道發佈給小型用戶群。 在上面給出的Facebook暗啟動圖表中,您可以看到只打開了一個部署管道,將新功能部署到一組選定用戶。 此時剩餘的數百條管道全部關閉。
持續監視部署功能的特定用戶群,以收集反饋並識別錯誤。 這些錯誤和反饋將被納入開發,測試和部署在同一用戶群中,直到功能變得穩定。 一旦實現穩定性,通過啟用其他部署管道,將逐步在其他用戶群上部署這些功能。
通過這種方式,Facebook擁有一個受控或穩定的機制,可以為其龐大的用戶群開發新功能。相反,如果功能沒有得到很好的響應,他們可以選擇完全回滾部署。這也幫助他們為部署準備伺服器,因為他們可以預測網站上的用戶活動,並相應地擴展伺服器。上面給出的圖表描述了Facebook的暗啟動過程。
4 總結
微信,淘寶,以及許多領先的科技巨頭,在向所有人發佈之前,都使用暗發佈逐漸向一小部分用戶發佈和測試新功能。
DevOps的目的是更快速,更可靠地創建質量更好的軟體,同時開發,運維團隊之間進行更多的溝通和協作。 它是一個自動化過程,允許快速,安全和高質量的軟體開發和發佈,同時保持所有利益相關者在一個迴圈中。 這就是DevOps獲得越來越多的大型互聯網公司青睞的真正原因。
作者:帝都羊 出處: http://3xmq.cnblogs.com/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。如果覺得還有幫助的話,可以點一下右下角的【推薦】。