如何理解DevOps

發(fā)布時(shí)間:2022-02-25 08:33:09  |  來源:騰訊網(wǎng)  

引言

DevOps是一種重要的軟件開發(fā)模式;

我所在的團(tuán)隊(duì)正在進(jìn)行DevOps轉(zhuǎn)型;

DevOps極大地提升了開發(fā)效率;

本文介紹了我對(duì)DevOps的理解;

什么是DevOps

DevOps是一種軟件開發(fā)人員(Research and Dev,RD)和IT運(yùn)維運(yùn)營(yíng)技術(shù)人員(Ops)和質(zhì)量檢測(cè)(QA)之間溝通合作的模式;

DevOps的根本目的是快速頻繁的、小步的、自動(dòng)化便捷的監(jiān)控和審計(jì)的、云端和虛擬化的、可視化的部署,滿足“每天部署10次”或者“快速解決bug并上線”的要求;

DevOps是敏捷開發(fā)、持續(xù)交付的基礎(chǔ);

DevOps模式和傳統(tǒng)的瀑布模型相對(duì)應(yīng);

我們需要維護(hù)什么?

以我所在的團(tuán)隊(duì)為例,我們需要維護(hù)的內(nèi)容如下:

需要維護(hù)的環(huán)境分為:開發(fā)環(huán)境,測(cè)試環(huán)境,準(zhǔn)生產(chǎn)環(huán)境,生產(chǎn)環(huán)境;

每個(gè)環(huán)境包含若干個(gè)scope,每個(gè)scope都是整個(gè)系統(tǒng)的一部分,由不同的團(tuán)隊(duì)進(jìn)行開發(fā);

使用microsoft微服務(wù)架構(gòu),每個(gè)scope中都有若干service,每個(gè)service之間可能還存在相互依賴關(guān)系;

每個(gè)service都需要若干resource,這些resource包括但不限于:

RabbitMQ;

Service Fabric;

IoTHub;

EventHub;

ELK;

Consule;

KeyVault;

MongoDB;

Postgresql;

Cassandra;

Storm;

Redis;

如果沒有DevOps,我們?cè)鯓庸ぷ鳎?/p>

沒有流水線Pipeline:

開發(fā)過程變得非常痛苦,會(huì)經(jīng)常忘記對(duì)代碼進(jìn)行單元測(cè)試和集成測(cè)試;

開發(fā)完成的服務(wù),打包后不知道放在何處,別人需要引用時(shí)很不方便;

代碼質(zhì)量得不到保證,很多代碼沒有經(jīng)過“單元測(cè)試覆蓋率檢測(cè)”和“代碼重復(fù)率檢測(cè)”,代碼可維護(hù)性變差;

隨著開發(fā)的深入進(jìn)行,開發(fā)人員的主要精力不在是編寫新的代碼,而是處理bug和維護(hù)舊的代碼,使開發(fā)效率逐漸降低;

沒有自動(dòng)化環(huán)境部署:

在開發(fā)者完成一個(gè)微服務(wù)的開發(fā)后,不知道將自己開發(fā)的服務(wù)部署到什么環(huán)境上去測(cè)試;

開發(fā)者在測(cè)試自己的代碼時(shí),會(huì)時(shí)常發(fā)現(xiàn)所依賴的資源沒有準(zhǔn)備好,比如測(cè)試環(huán)境缺少M(fèi)ongoDB等資源;

運(yùn)維人員不能顯式的看到自己維護(hù)了多少資源,每種資源都在被哪些環(huán)境、哪些service引用;

運(yùn)維人員不能顯式的看到資源的使用情況及使用量;

經(jīng)理不能有效的進(jìn)行成本控制;

沒有自動(dòng)化監(jiān)控系統(tǒng):

運(yùn)維人員不能在機(jī)器、硬件、軟件出現(xiàn)故障時(shí)得到及時(shí)的警告,導(dǎo)致機(jī)器掛掉了都還不知道;

不能靈活調(diào)配各種資源的使用,導(dǎo)致某些資源極度緊缺、某些資源卻有富余;

手動(dòng),而不是自動(dòng):

從下面的圖片可以看出,只需手工運(yùn)行5條命令的情況下,成功部署的概率就已跌至86%,如需手工運(yùn)行55條命令,成功部署的概率將跌至22%,如需手工運(yùn)行100條命令,成功部署的概率將趨近于0(僅2%)!

為什么要有DevOps

不知道目前發(fā)布、部署的進(jìn)展情況;

沒有一套明確的發(fā)布、部署流程,急上線時(shí)容易出問題,出了問題也沒有預(yù)案來解決;

自動(dòng)化程度不夠;

DevOps工具鏈

編碼:代碼開發(fā)和審閱,版本控制工具、代碼合并工具;

構(gòu)建:持續(xù)集成工具、構(gòu)建狀態(tài)統(tǒng)計(jì)工具;

測(cè)試:通過測(cè)試和結(jié)果確定績(jī)效的工具;

打包:成品倉(cāng)庫(kù)、應(yīng)用程序部署前暫存;

發(fā)布:變更管理、發(fā)布審批、發(fā)布自動(dòng)化;

配置:基礎(chǔ)架構(gòu)配置和部署,基礎(chǔ)架構(gòu)即代碼工具;

監(jiān)視:應(yīng)用程序性能監(jiān)視、最終用戶體驗(yàn);

DevOps的多維度目標(biāo)

團(tuán)隊(duì)維度:擬合開發(fā)和運(yùn)維的鴻溝,支持位于全球多個(gè)地點(diǎn)的、包含外包人員的、混合開發(fā)/測(cè)試/基礎(chǔ)設(shè)施的團(tuán)隊(duì);

技術(shù)維度:擬合多類型的分布式的硬件平臺(tái)和上面部署的多種應(yīng)用、多種需求的鴻溝;

需求維度:平衡軟件開發(fā)過程中對(duì)軟件用戶需求變化、追求穩(wěn)定性、追求開發(fā)效率、降低check-in風(fēng)險(xiǎn)這幾個(gè)目標(biāo);

市場(chǎng)維度:解決軟件迭代慢和較高的用戶需求的矛盾;

終極目標(biāo):從時(shí)間和空間兩個(gè)維度,合理統(tǒng)籌并高效使用現(xiàn)有資源,實(shí)現(xiàn)組織目標(biāo),最大限度滿足用戶需求;

DevOps需要遵循的基本原則

以人為本,一切工具都是為人服務(wù);

需求細(xì)分,及時(shí)開發(fā),及時(shí)驗(yàn)證;

減少開發(fā)的分支,盡量在主干上開發(fā),避免合并分支造成的開銷和時(shí)間浪費(fèi);另外,分支太多的時(shí)候不可能做到持續(xù)集成;

減少代碼積壓,代碼積壓越多、越多的需求和開發(fā)成果得不到驗(yàn)證、效率就越低、下次部署的風(fēng)險(xiǎn)就越大;

代碼和配置相分離,盡量降低他們?cè)谶壿嫽蛘呶锢砩系鸟詈希?/p>

盡早生成二進(jìn)制包,而不是使用源代碼,并確保二進(jìn)制包不被篡改;

二進(jìn)制包應(yīng)當(dāng)和環(huán)境無(wú)關(guān);

確保部署流程是冪等的;

對(duì)生產(chǎn)和測(cè)試環(huán)境的修改只能由程序,而不是人完成;

環(huán)境管理

環(huán)境必須遵循:快速部署和響應(yīng)(使用docker或者其他虛擬化技術(shù)能夠更容易做到這一點(diǎn)),可恢復(fù),可支持,可審計(jì);

環(huán)境配置項(xiàng)目:

操作系統(tǒng)和配置;

中間件和軟件棧及配置:數(shù)據(jù)庫(kù),消息系統(tǒng),隊(duì)列;

基礎(chǔ)設(shè)施軟件:代碼管理,目錄服務(wù),監(jiān)控;

外部集成:外部系統(tǒng)和服務(wù);

網(wǎng)絡(luò):路由,防火墻,交換機(jī),DNS;

團(tuán)隊(duì):開發(fā)團(tuán)隊(duì)和infra團(tuán)隊(duì)之間的協(xié)調(diào)分工;

自動(dòng)化的環(huán)境部署;

測(cè)試環(huán)境應(yīng)當(dāng)和生產(chǎn)環(huán)境盡量一致;

環(huán)境的配置文件也應(yīng)當(dāng)進(jìn)行版本控制;

監(jiān)控

監(jiān)控的內(nèi)容:

硬件,物理設(shè)備,路由器,代理;

操作系統(tǒng);

中間件;

應(yīng)用程序;

日志;

如何監(jiān)控:

清晰的信息展示;

及時(shí)地告警;

可視化的狀態(tài)呈現(xiàn);

常用DevOps利器

Jenkins:開源的持續(xù)集成工具;

SonarQube:開源的代碼質(zhì)量管理系統(tǒng);

Puppet:開源的軟件自動(dòng)化配置和部署工具;

Docker:讓應(yīng)用程序布署在軟件容器下的工作可以自動(dòng)化進(jìn)行;

總結(jié):DevOps到底是什么?

高效的流水線開發(fā)/測(cè)試/上線;

自動(dòng)化的環(huán)境部署和管理;

良好和及時(shí)的監(jiān)控/告警/可視化/反饋/日志;

開發(fā)團(tuán)隊(duì)、運(yùn)維團(tuán)隊(duì)、用戶之間良好的溝通協(xié)作,快速解決問題的能力;

完整的文檔;

任一模塊的冪等和可恢復(fù);

良好的審計(jì)和評(píng)估,良好的成本管理;

整個(gè)系統(tǒng)穩(wěn)定且靈活,高度自動(dòng)化;

總而言之,DevOps的核心只有三個(gè)詞:高效、自動(dòng)、監(jiān)控;

參考

分享&在看

關(guān)鍵詞: 如何理解DevOps devops 軟件開發(fā)

 

網(wǎng)站介紹  |  版權(quán)說明  |  聯(lián)系我們  |  網(wǎng)站地圖 

星際派備案號(hào):京ICP備2022016840號(hào)-16 營(yíng)業(yè)執(zhí)照公示信息版權(quán)所有 郵箱聯(lián)系:920 891 263@qq.com