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