互聯網科技已成為一種全行業通用的核心生產力,可以說,每個有競爭力的公司,無論它們處在哪個行業,都應該是一家優秀的科技公司。銀行是擁有金融執照的IT 公司;運營商是擁有網絡牌照的IT公司;各類商品生產或銷售企業的核心競爭力也將越來越依賴於它們的生產、物流、供應鏈、營銷與客戶服務等方面的IT系統的能力與效率;包括各地政府所倡導的智慧城市,也必須構建在包含各類互聯網科技的IT系統所組成的“新基建”之上。
IT系統在各行業大中型企業中的重要性越來越高的同時,伴隨而來的是針對IT系統的新需求越來越多,且越來越需要更加及時的響應。能夠快速和持續地創新、快速實現並切入市場、提供優質可靠的服務,已成為未來企業獲得成功的關鍵所在。功能迭代、局部升級、A/B Test甚至版本回滾成為常態,這都對傳統的開發、運維模式提出了新挑戰。
但大多數傳統企業都不能在幾分鐘或幾小時內針對IT系統完成變更所需要的所有部署,往往需要幾周甚至幾個月的準備時間。他們更不可能每天在生產環境中進行成百上千次的部署,而是在以月甚至季度為單位,來計劃IT系統的整體升級和部署。對他們而言,生產環境的升級和部署並不是日常工作,而每次進行生產環境的升級和部署時,常常都需要運維人員通宵達旦,如臨大敵,因為會造成服務中斷,同時很可能會有各種意想不到的事故如影隨形。
長久以來,對於非互聯網公司,開發部門和運維部門之間都存在著一堵高牆,本來關係密切的工作被兩個部門踢來踢去。在這種以職能為導向的集中式開發與集中式運維相互獨立的組織架構中,實現“以市場為導向,讓小團隊快速、獨立地創造價值”這一目標,幾乎是不可能的。因為運維團隊不得不滿足許多開發團隊的各種迥然不同的需求,結果導致運維工作需要較長的交付週期,並且需要反覆地調整任務的優先級,而且部署結果還常常不盡如人意。
在這方面,我們很有必要了解一下互聯網公司是如何做的。對於互聯網公司來說,他們的IT系統幾乎都必須提供24小時不間斷的服務,卻能夠始終保持著高頻率的創新與升級。以Facebook為例,其採取的最有效的一個措施就是讓所有工程師、工程經理和架構師輪流值班,負責他們自己構建的服務的運維工作。通過這樣做,所有構建服務的人都對自己在上游所負責設計的架構和代碼有了親身的感受,這對下游的運維部署工作產生了巨大的積極影響。顯然,通過使開發團隊擁有更強的運維能力,或者讓運維工程師融入開發團隊,可以以市場為導向創造出更多的業務成果,並能最終提高效率和生產力。
為了解決上面內容所提及的各種問題,DevOps(開發運維)應運而生,其提出將開發和運維團隊的工作緊密結合起來,建立持續交付和持續反饋的工作閉環。但需要強調的是,DevOps並不是一種技術,而是為了促進開發運維一體化而施行的一系列技術工具、組織架構及企業文化層面的思想與實踐。不同的企業對DevOps的具體實現方式並不完全相同,但總的來說,應該包括如下一些方面的內容:
第一:將運維融入日常的開發工作:
包括創建一套集中式的類生產環境平臺和工具集服務,讓開發團隊都能夠通過使用這套平臺和服務來提高生產力,例如搭建類生產環境、部署流水線、自動化測試工具、生產環境遙測控制檯等。這樣,開發團隊就能夠把更多的精力和時間用在功能構建上,而不是消耗在獲取交付和支持生產環境特性所必需的基礎設施上。此外,還要使運維工程師融入開發團隊或為每個開發團隊分配能夠切實承擔職責的運維聯絡人,邀請他們參加開發團隊的會議。這樣,他們的工作優先級幾乎完全受所在產品團隊的目標驅動,而不再專注於解決自己的問題,運維工程師與其內部和外部客戶的聯繫也就更加緊密了。
第二:建立出從產品計劃直至功能上線的端到端的快速交付流水線
很多時候,只有在將應用部署到生產環境時,才能看到應用的實際表現。如果發現問題,通常為時已晚。所以,為了使工作快速可靠地從開發流向運維,應當保證價值流的每個階段都使用類生產環境。此外,這些環境必須能用自動化的方式進行搭建,在理想情況下,應該使用腳本和存儲在版本控制系統中的配置信息按需搭建,而不需要依賴運維團隊進行手動操作。部署流水線的目標就是能夠基於版本控制系統中的信息重複搭建整套生產環境。
第三:實現快速可靠的自動化測試
其目標是讓開發人員在日常工作中創建自動化測試套件,並在開發早期就保證產品質量。這樣做有利於建立快速的反饋迴路,幫助開發人員儘早發現和解決問題,從而提高集成頻率,使測試從階段性活動演變成持續性活動,並支持企業的持續創新。通過執行自動化測試,所有測試人員(當然包括開發人員)得以去做那些不能被自動化的高價值活動,如探索性測試或設計和優化測試流程本身。
第四:採用松耦合架構降低發佈風險
緊耦合的架構可能帶來這樣的後果:每當試圖提交代碼到主幹,或將代碼發佈到生產環境中時,都有可能因為錯誤而導致整個系統出現故障。接口定義清晰的松耦合架構則與之相反,它優化了模塊間的依賴關係,提高了生產力和安全性,讓小型且高產的開發團隊可以靈活地執行小的變更,並能夠安全和獨立地進行部署。這裡有必要提一下微服務,微服務就是一種松耦合的架構,而DevOps和微服務的很多技術理念都是重合的,但兩者的關注點並不同,微服務幫助我們以一種松耦合和細顆粒度的方式開發、測試和發佈服務,而DevOps提倡小規模和小批量的持續集成和持續部署,兩者相輔相成的,共同解決問題。
關於DevOps的更多幹貨,這裡還有本[DevOps實踐指南]電子書,系統地介紹了DevOps的相關知識,有興趣的朋友可以根據文末線索獲取。
總之,以平臺化、生態化、智能化和敏捷化為主要特徵的全行業的數字化企業時代已經到來,傳統企業在建設和重構自己的IT系統時,除了引入先進的設計思想和技術元素外,更要採用與之匹配的工作理念與實施方法,否則將無法發揮其價值,從這個角度來說,DevOps的作用是不可或缺的,也是所有開發和運維人員以及企業技術管理人員都需要意識到的。
創作不易,歡迎朋友們關注、評論、轉發。如企業轉載或其它,請聯繫:keji5u(科技無憂訂閱號)