為什么大公司一定要使用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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。如果覺得還有幫助的話,可以點一下右下角的 【推薦】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM