适合小白了解学习的DevOps实践
什么是DevOps?
隨著微服務及容器化技術的普及至大眾視線后DevOps常被提及,關于DevOps似乎并沒有一個標準的定義,如果說從基于目標導向去給它做一個定義,DevOps是一套實踐方法,即在保證高質量的前提下,縮短系統由變更、提交、部署更新到生產環境的時間,DevOps的核心由此可見體現在“保證高質量”, “縮短時間”,“部署”。
如上圖,傳統開發和運維之間存在一堵墻,開發人員想改變而運維人員想要穩定。另外,傳統開發工具與運維工具也存在一堵墻,并沒有打通成為一條工具鏈。
從字面上來理解DevOps ,Dev(開發人員)+Ops(運維人員),DevOps 強調的是高效組織團隊之間如何通過自動化的工具協作和溝通來完成軟件的生命周期管理,從而更快、更頻繁地交付更穩定的軟件。
軟件開發演變:
緩慢而繁瑣的瀑布模型演變成敏捷,開發團隊在短時間內完成軟件開發,持續時間甚至不超過兩周。如此短的發布周期幫助開發團隊處理客戶反饋,并將其與bug修復一起合并到下一個版本中。
雖然這種敏捷的SCRUM(迭代式增量軟件開發)方法為開發帶來了敏捷性,但它在運維方面卻失去了敏捷實踐的速度。開發人員和運維工程師之間缺乏協作仍然會減慢開發過程和發布。DevOps就是基于對更好的協作和更快的交付的需求而產生的。
為什么DevOps沒有迅速走紅?
從2009年提出DevOps的概念,時至今日已經有十余個年頭,在此之前DevOps為什么沒有迅速走紅,總結主要原因為以下幾點:
● 之前的云計算還屬于小眾產品,虛擬化、虛擬機還是重量級的IT基礎設施。
● 容器相關技術(Docker為代表)沒有橫空出世,導致DevOps無法迅速走紅。
● Micro Service即微服務尚未廣泛的推廣使用。
DevOps開始深入人心,和云計算、容器/Docker、微服務、敏捷等相關概念和實施的發展離不開,互聯網迅猛的發展,需要更快的業務試錯與業務創新,讓軟件的生產、交付、獲取、升級變得自動,DevOps在傳統企業也開始備受關注開始走紅。
關于DevOps的一些誤區
對DevOps的狹義理解:
簡單說DevOps是提倡開發和IT運維之間的高度協同,在完成高頻率部署的同時,提高生產環境的可靠性、穩定性、彈性和安全性。
DevOps不僅需要打通開發和運維之間的隔閡墻,更需要從應用的全生命周期考慮,實現全生命周期的工具全鏈路打通與自動化、跨團隊的線上協作能力。
縱向集成,打通應用全生命周期(需求、設計、開發、編譯、構建、測試、打包、發布、配置、監控等)的工具集成,最終實現自助化。
例如:項目組的開發人員可以通過DevOps的平臺上,自主申請開通需要的各種服務,比如開通開發環境、代碼庫等。
橫向集成,打通架構、開發、管理、運維等部門墻。橫向集成中DevOps強調的重點是跨團隊的線上協作。
例如:傳統的系統上線部署方式,通過一個發布手順文檔,上百頁都有可能,但在DevOps的平臺下,應該是通過標準運行環境的選擇、環境配置的設置、部署流程的編排,實現數字化的部署手冊,這樣的手冊,人機都能夠執行,并且過程可以被追蹤和審計。
我們使用DevOps時,大致有這幾種誤區認知:
● 企業沒有使用云相關產品(IaaS、PaaS),無法開展DevOps;
● 微服務架構開發的應用適合DevOps,傳統SOA應用不適合;DevOps的實施和應用架構無關,無論是微服務架構,還是SOA類型應用,都可以開展DevOps工作;
● 自動化工具的運用等同于DevOps的成功;采用自動化工具本身不是DevOps,只有將這些工具與持續集成、持續交付、持續的反饋與優化進行端到端的整合時,這些工具才成為DevOps的一部分;
● DevOps不僅僅是自動化。自動化是DevOps非常重要的一部分,但不是唯一的部分,實施DevOps需要從敏捷、持續、協作、系統性、自動化多個維度進行建設與改進。
DevOps架構支撐
邏輯架構整個DevOps平臺分為三層:
設施層:包括IaaS,CaaS,一般是基于OpenStack和Kubernetes、Docker;
服務層:服務管理與調度的基礎能力,如注冊中心,編排,以及企業級或互聯網式的云服務;
DevOps層:更多的是工作流程需求、設計、開發、測試、發布等,看板等;
DevOps在企業的實踐
實施DevOps的核心目標是加速企業IT精益運行,提升IT的生產效率,加速部門、企業的業務創新能力。實施DevOps需要從組織、技術、流程三個維度進行。
可以梳理出目前團隊中欠缺但又容易改進的點,逐步將更多的實踐活動納入團隊當中。團隊實施DevOps的目的在于,將重復、價值低的事情交由DevOps平臺實現。在傳統企業中,技術方面的實踐最容易在團隊中實現、流程次之、組織的優化與變革最為艱難。
1、技術方面
● 集成工具鏈:
打通應用開發工具鏈:需求、項目、代碼、構建、測試、打包、發布、配置、監控;
● 基礎設施即編碼:
將基礎環境服務化、可編程化,基礎設施讓項目團隊可以自助獲取;讓基礎設施從物理機、虛擬機、走向容器;
● 一鍵編譯、測試、部署:
開發人員可以從代碼開始,一鍵獲得可訪問的環境,根據需要可以推送開發、測試、預發、生產環境;
● ChatOps:
項目團隊成員將溝通、工具和過程整合在一起。將工具植入對話中,保障團隊能夠自動執行任務與協作。推薦最近比較流行的hubot。
2、 流程方面
● 看板:
在DevOps中看板不僅是任務協調溝通的機制;也可作為管制平臺,量化組織生產能力的工具。
● MVP:
采用MVP(Minimum Viable Product最小可行產品)原則,最短時間內快速交付產品原型,然后通過測試并收集用戶的反饋,快速迭代,不斷修正產品,適應客戶的需求。
● 發布:
建立持續發布機制,形成自動化、自助化,支持常見的灰度發布、金絲雀、藍綠、回滾、A/B測試等;
● 軟件度量:
通過軟件度量(包括過程度量、質量度量、用戶度量、成本度量),推算出組織的各種有效指標;可以掌控組織的生產力水平,也可通過度量數據,反向優化組織瓶頸點;
● 一切皆代碼:
文檔(用戶場景、功能特性等)、配置(應用配置、環境配置、腳本等)、環境(基礎設施、中間件環境等)、發布包需要統一看待成代碼,納入版本管理,提供全視角的鏈路追蹤。
例如:每個發布的版本,可以追溯其對應的配置,代碼、文檔,發布的功能點。
組織、技術、流程三個維度中,技術、流程可以通過平臺或者工具進行最佳實踐的固化。
平臺建設第一步,梳理出DevOps的整體模型。從角色、規劃設計、開發交付、運營反饋四個維度進行梳理。以產品為核心,將代碼、配置、環境進行嚴格分離,同時覆蓋產品全生命周期。
另外企業在落地DevOps也存在如下困境:
1)涉及的部門多(開發中心、質量控制部門、生產運行部門);
2) 流程改造復雜;
3) 責任邊界需要重新劃分;
4) 自動化是核心問題。
實施DevOps工具選擇
關于DevOps工具選擇,按照階段進行拆分,將其分解到各階段分別是:規劃、構建、持續集成、部署、運營以及持續反饋。
1) 規劃
視覺與設計方面達成協作,推薦使用的工具:Confluence, HipChat,JIRA Software。
2) 構建
開發階段環境構建,推薦使用的工具:Docker。
基礎設施自動化,推薦使用的工具:Bamboo, Bitbucket, Chef,Docker, Puppet。
3) 持續集成
它是支撐新功能的代碼與當下代碼集成的環節。軟件在持續性開發,升級后的代碼必須持續性集成,并快速地與系統集成,實現用戶的各種需求變更。變更后的代碼,還應當保證執行時環境中沒有異常。推薦使用的工具:Bamboo, HipChat。
自動化測試,對于準備和支持開發構建工作,自動化測試的操作過程透明化以及徹底性是非常重要的。推薦使用的工具:Bamboo, Bitbucket,Capture for JIRA。
4) 部署
發布儀表盤,在一個地方對于你想尋找的關于分支,構建,拉請求和部署警告等信息提供高可視化。推薦使用的工具:JIRA Software。
自動化部署,推薦使用的工具:AWS, Bamboo, HipChat,Puppet。
5) 運營
監控,實施自動化監控針對服務器監控和應用程序性能監控,推薦使用的工具:BigPanda,HipChat,HostedGraphite,Nagios,NewRelic,PagerDuty,Pingdom,Splunk。
溝通與集群,跨團隊溝通是實現文化轉變的第一步,聊天工具可促進它的實時性。推薦使用的工具:BigPanda,DataDog, HipChat,NewRelic, PagerDuty,StatusPage。
事件、變更和問題跟蹤,推薦使用的工具:JIRA Service Desk,JIRA Software
6) 持續反饋
通過用戶反饋創造更好的產品,推薦使用的工具:GetFeedback,HipChat,JIRA Service Desk,Pendo,Surveymonkey,HootSuite。
實施DevOps成熟度評判指標
在實踐DevOps時,可以從運營效率、IT服務水平、組織效能、客戶價值、經營業績五個維度進行評判,持續優化與改進。
企業實施DevOps價值
1、從原先線下協作、溝通,統一到DevOps平臺上協作、溝通;可以隨時了解項目進展全貌,利用平臺可以做到各種過程數據的實時收集;
2、 資源管理由原來專職人員,過渡到開發人員實現自助化服務,可按需實現各類環境申請與開通,基礎設施即服務提供來技術的支撐;
3、由郵件文化到DevOps平臺統一溝通,同時DevOps打通多個工具鏈路端,任務分發、溝通、提醒可以實時推送。
總結
以上是生活随笔為你收集整理的适合小白了解学习的DevOps实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速了解什么是CI/CD
- 下一篇: 【Java】生成 .json格式文件工具