提高應(yīng)用程序性能的7個DevOps實踐
譯文DevOps 主要與開發(fā)人員和運營之間的合作有關(guān),以改善生產(chǎn)中應(yīng)用程序的交付和可靠性。最常見的最佳實踐旨在用更強(qiáng)大的自動化來取代在開發(fā)和運營團(tuán)隊之間管理的手動、易出錯的程序。這包括用CI/CD(持續(xù)集成和持續(xù)交付)實現(xiàn)交付管道的自動化,用容器實現(xiàn)標(biāo)準(zhǔn)化配置,并將基礎(chǔ)設(shè)施配置為代碼。在運營方面,提高應(yīng)用程序可靠性的 DevOps 最佳實踐包括提高應(yīng)用程序的可觀察性,增加監(jiān)控,以及自動化云和基礎(chǔ)設(shè)施的操作。
但如何提高應(yīng)用程序、數(shù)據(jù)庫、數(shù)據(jù)管道和云基礎(chǔ)設(shè)施的性能呢?本文將分享7個可以影響性能和用戶體驗DevOps 實踐和方法。
1. 從一開始就在應(yīng)用程序中構(gòu)建安全實踐
DevOps 團(tuán)隊最不需要的就是部署具有安全漏洞的新功能。安全中斷或降級會影響用戶體驗并產(chǎn)生重大的業(yè)務(wù)問題。一個 DevOps 的最佳實踐是,通過與信息安全部門在需求方面的合作,測試CI/CD管道內(nèi)的代碼漏洞,以及在軟件開發(fā)中實施其他安全實踐,來實現(xiàn)安全轉(zhuǎn)移。
Akamai 的高級開發(fā)人員倡導(dǎo)者 Mike Elissen 說:“應(yīng)用程序可靠性的一個關(guān)鍵組成部分是可用性,采取適當(dāng)?shù)拇胧﹣碚_保護(hù)應(yīng)用程序免受 Web 應(yīng)用程序攻擊、DDoS 攻擊等可能意味著保持在線和離線之間的區(qū)別。”
Elissen 說,向左轉(zhuǎn)移是從 DevOps 轉(zhuǎn)變?yōu)?DevSecOps 的一部分。他繼續(xù)說道,“我們看到在 DevOps 中添加安全性的‘左移’變得越來越明顯,最終創(chuàng)造了更強(qiáng)大的 devsecops 文化,并使更多的開發(fā)人員意識到并對其應(yīng)用程序的安全性負(fù)責(zé)?!?/p>
2. 標(biāo)準(zhǔn)化架構(gòu)和基礎(chǔ)設(shè)施藍(lán)圖
Quali 產(chǎn)品管理副總裁 Amir Rozenberg 指出了一個影響團(tuán)隊績效的問題。他說:“許多 DevOps 團(tuán)隊發(fā)現(xiàn)自己正在組織有機(jī)增長的應(yīng)用程序基礎(chǔ)架構(gòu)定義的混亂,這些定義是在早期真誠地開發(fā)的,以提高團(tuán)隊在軟件開發(fā)生命周期中的效率。”
Rozenberg 詢問 DevOps 團(tuán)隊是否應(yīng)該采用自己動手的方法來創(chuàng)建環(huán)境,或者組織是否應(yīng)該創(chuàng)建標(biāo)準(zhǔn)。他說:“推薦的方法是建立一個中心團(tuán)隊,以藍(lán)圖的形式對環(huán)境進(jìn)行建模,以使它們可靠、可重用和合規(guī)。然后,他們需要能夠分發(fā)這些基礎(chǔ)架構(gòu)定義,以便業(yè)務(wù)成員可以通過快速自助服務(wù)使用它們,無論是集成到自動化管道中還是以手動方式?!?/p>
3. 在 CI/CD 管道中建立可觀察性和持續(xù)測試
66degrees 的 DevOps 總監(jiān) Matt Sollie 認(rèn)為 CI/CD 可以做的不僅僅是打包和推送代碼。他說:“并不是所有的 DevOps 原則都像持續(xù)交付或?qū)⒁磺袠?gòu)建為代碼一樣迷人或可見,但它們同樣重要。持續(xù)集成是成熟的 DevOps 態(tài)勢的一個組成部分,它可以極大地提高應(yīng)用程序的可靠性,但需要目標(biāo)、愿景和時間才能以有意義的方式構(gòu)建。”
Sollie 承認(rèn),實現(xiàn)可靠性和性能目標(biāo)不僅需要有遠(yuǎn)見,還需要對實踐和優(yōu)化架構(gòu)進(jìn)行投資?!翱捎^察性是一項關(guān)鍵且昂貴的原則,因為可靠性不是開啟或關(guān)閉狀態(tài),需要細(xì)致入微的數(shù)據(jù)收集。借助所有云計算服務(wù),為工作選擇正確的工具或服務(wù)可以帶來固有的可靠性和性能優(yōu)勢?!?/p>
敏捷開發(fā)團(tuán)隊?wèi)?yīng)該在他們的管道中實施什么來提高性能?以下是一些建議:
- 在增加部署頻率之前實施持續(xù)測試
- 考慮使用服務(wù)虛擬化來測試微服務(wù)和第三方 API
- 確保可觀察的 CI/CD 管道以改進(jìn)故障檢測并隔離管道問題
4. 使用功能標(biāo)志和金絲雀版本控制部署
部署不必是所有用戶一次性獲得所有更改的絕對轉(zhuǎn)換。代碼中的功能標(biāo)志有助于配置和控制功能的可用性,而金絲雀發(fā)布策略使 DevOps 團(tuán)隊能夠緩慢而有條不紊地推出新功能。
LaunchDarkly 的首席技術(shù)官兼聯(lián)合創(chuàng)始人 John Kodumal 補(bǔ)充說:“功能管理,特別是功能標(biāo)志,正在迅速成為改進(jìn)應(yīng)用程序的整體可靠性和性能的首選開發(fā)實踐,同時允許開發(fā)人員不斷創(chuàng)新。通過使用功能標(biāo)志,開發(fā)人員可以在生產(chǎn)前測試功能更新,以便在發(fā)布前解決問題?!?/p>
這些控件提高了可靠性和性能,同時也幫助開發(fā)團(tuán)隊最大限度地減少了中斷。Kodumal 說:“功能標(biāo)志提高了性能,同時為開發(fā)團(tuán)隊提供了必要的控制來更新應(yīng)用程序而不會中斷或停機(jī)。”
5. 建立嚴(yán)格的可觀察性和監(jiān)測標(biāo)準(zhǔn)
現(xiàn)在專注于 DevOps 職責(zé)的運維方面,團(tuán)隊?wèi)?yīng)該考慮幾個最佳實踐來提高應(yīng)用程序性能,包括開發(fā)可觀察性標(biāo)準(zhǔn)和改進(jìn)監(jiān)控。
Mindee 開發(fā)人員關(guān)系總監(jiān) Frédéric Harper 說:“ DevOps 必須實施嚴(yán)格的監(jiān)控和可觀察性流程,以確保應(yīng)用程序的每個部分都正常工作并且服務(wù)器進(jìn)程運行順暢。通過保護(hù)這一元素, DevOps 團(tuán)隊可以收集有價值的信息,以了解用戶如何使用應(yīng)用程序,可能防止未來出現(xiàn)問題,更容易支持客戶,并根據(jù)真實數(shù)據(jù)改進(jìn)業(yè)務(wù)或架構(gòu)決策。”
6. 使用 AIOps 和自動化擴(kuò)展監(jiān)控
在 web 2.0 時代,當(dāng)出現(xiàn)中斷或性能問題時,運維人員只有少數(shù)日志文件和監(jiān)控工具來查看。如今,運行微服務(wù)、無服務(wù)器應(yīng)用程序和多云數(shù)據(jù)庫意味著在解決事件和確定問題根本原因時需要參考更多的數(shù)據(jù)和工具。AIops 平臺可以集中監(jiān)控數(shù)據(jù),使用機(jī)器學(xué)習(xí)關(guān)聯(lián)警報,并幫助操作人員跨多個平臺自動響應(yīng)和恢復(fù),這有助于最大限度地減少性能影響。
BigPanda 產(chǎn)品營銷副總裁 Mohan Kompella 對此表示贊同:“AIOps 平臺可以幫助 DevOps 團(tuán)隊保持工具的自主性和靈活性,同時還為集中式事件響應(yīng)者提供他們所需的可見性,使其成為應(yīng)對中斷的第一道防線。”
7. 定義 SLO 和錯誤預(yù)算
DevOps 團(tuán)隊?wèi)?yīng)該平衡哪些實踐產(chǎn)生最大收益并解決風(fēng)險。這需要團(tuán)隊就 DevOps 優(yōu)先級進(jìn)行衡量、學(xué)習(xí)和協(xié)作,這在實施實踐和工具后的數(shù)月或數(shù)年內(nèi)可能無法實現(xiàn)收益時并不容易。
一種確定優(yōu)先級的方法是采用站點可靠性工程實踐、定義服務(wù)水平目標(biāo) (SLO) 和使用錯誤預(yù)算。當(dāng)應(yīng)用程序或微服務(wù)超出其錯誤預(yù)算時,它會向 DevOps 團(tuán)隊發(fā)出信號,以找出原因并專注于解決方案。
Nobl9 的首席運營官 Kit Merker 說:“服務(wù)水平目標(biāo)為工程團(tuán)隊設(shè)定了明確的目標(biāo),以便更好地決定如何確定工作的優(yōu)先級。開發(fā)人員和 ITop 不僅可以以技術(shù)為中心,還可以轉(zhuǎn)向以服務(wù)為中心?!?/p>
DevOps 團(tuán)隊有很多事情要做, DevOps 最佳實踐幫助團(tuán)隊在加速開發(fā)和提高可靠性和性能之間取得平衡。成功的關(guān)鍵可能在于定義問題陳述、辯論方法、迭代解決方案和衡量影響。
原文標(biāo)題:??7 devops practices to improve application performance??