DevOps在09年被提出之后,熱度一直不減。最近幾年,隨著容器化、微服務等概念的興起,DevOps又開始了大規模實踐。但是,隨著基礎設施的增加,軟件設計從Ops角度出發,可以更好的規避基礎設施變更帶來的風險。
從蘋果公司開始
開發者、用戶、投資者、分析師和競爭對手都渴望在WWDC上學習到蘋果公司維持其領導地位的方式。雖然沒有令人興奮的新產品發布,但是貫穿其中很多話題的核心是:用戶體驗。
和其他手機廠商的發布會不同,蘋果公司專注于客戶的體驗,而不是其產品的功能和特性。當競爭者在吹捧他們新品擁有的高像素相機和處理器核心數量的時候,蘋果公司展示iPhone拍攝的優美、富有靈感的照片時,沒有提及設備的任何技術細節。
現在,手機已經改變了我們的生活,日常的衣食住行都可以通過手機app來協助完成。但是蘋果公司認為智能設備還能使我們的生活更加高效。不同于目前每個app提供獨立的功能,蘋果公司希望能夠將這些服務整合到一起,對于用戶來說,他們只需要使用蘋果的服務,而無需打開多個app。要實現這樣的愿景,產品或者服務都需要有新的設計范式。任何期望通過接入蘋果服務以對外提供個性化用戶體驗的公司,都應該考慮OpsDev而不是DevOps。
進入OpsDev的世界
我們假設一家電器公司制造的智能冰箱,為用戶提供以下體驗:
當我坐在車里時,智能冰箱通過手機發出提醒:冰箱存貨不足,該去買些食品啦。此時,手機自動生成并推薦了三個采購方案。第一個超市不需要繞路,但是沒有我喜歡吃的冰淇淋;第二個超市比第一個遠10分鐘,但是有所有我喜歡吃的所有食物;第三個超市更遠,需要多15分鐘的路程,但是它除了有所有需要采購的東西,還提供額外優惠券。我點擊了其中一個方案,車載導航開始自動規劃行車路線,并顯示在汽車多媒體系統中。
在不久的將來,很多公司會致力于提供集成的個性化用戶體驗,因此不同的數據源和服務必須被整合到一起。智能冰箱通過傳感器判斷冰箱內的存貨,超市服務提供其庫存和優惠信息,其他還有交通信息、地理位置信息等等。這些數據源由不同的提供商提供,并且保存在不同的數據中心。這些數據的訪問,需要特定的授權方式、API和數據處理流程。個性化服務的設計者,必須明確了解每個服務的規約,因為任務信息不能及時正確的獲取,都會影響到用戶體驗。作為零售商,不會希望用戶多花了15分鐘時間過來,結果卻因為需要購買的商品缺貨,或者無法使用優惠券而造成損失。
由此可見,個性化軟件服務的交付影響了現有的軟件設計模式。DevOps克服了傳統瀑布流所不能提供的快速交付能力,通過諸如代碼審查、編碼規范、持續集成等方式解決軟件開發遇到的挑戰,并且讓開發直接參與到了產品上線流程。而OpsDev考慮的方面卻不同。由于個性化服務依賴于底層一系列基礎設施,一旦我們知道了每個獨立的數據源的依賴關系和可用性,首先需要設計出將各個數據源結合在一起的組件。因此,設計者必須從運維的角度來考慮,對每個服務的依賴程度、故障修復、容錯等;同時,由于每個服務相對獨立由于每個服務相互獨立,個性化軟件服務的升級頻率受其依賴的服務升級頻率影響,這也需要從運維的角度考慮向下(向上)兼容。
什么是OpsDev?
OpsDev是在開發行為開始前,就需要了解應用程序依賴的所有組件,并進行建模。此外,對基礎設施穩定性的考量、環境建模、安全審計措施都是第一要務。其次,應用程序組件上線后的部署環境需要被建模。再次,將組件部署到生產環境的流程必須盡可能自動化。通過以上步驟,設計和研發團隊可以在開發和測試階段復制應用程序、環境模型和自動化部署流程。這樣設計、研發和測試團隊可以清楚的知道應用程序在生產環境的約束和參數。在傳統的項目模式下,大量時間浪費在完成驗證的應用程序部署到生產環境之后才發現的缺陷。
由于部署自動化在設計之初就被考慮到,應用程序可以隨時被部署到開發、測試和生產環境。這種方式不僅可以通過自動化流程加快各個環節的部署速度,還可以減少因為手工部署導致的質量問題。部署程序應該可以聚合多個獨立開發的模塊。每個模塊都可以由獨立的開發團隊進行開發,并且定制適合自己的持續基礎、持續交付流程。發布程序需要預先知道每個模塊之間的依賴關系,這樣可以快速的聚合每個通過持續集成、持續交付的流程的模塊,將它們整合之后部署到集成環境或者生產環境。
通過OpsDev方法,發布方式變得更加靈活。整個部署流程被設計的可以插入驗證流程。一個典型的持續交付流程可以是:發布程序首先將待發布應用程序部署到集成環境(UAT測試環境、預發布環境)上,然后觸發發布前的自動化、手工驗證、性能基線驗證等一系列驗證措施,整個過程通過之后,部署程序再將應用程序發布到生產環境,發布成功之后記錄基線信息和本次變更的狀態。
總結
對于物聯網或者基于用戶體驗的移動app廠商來說,傳統的軟件開發流程無法適應它們的產品,因為它們都會對很多SaaS服務有依賴,且應用程序包含很多組件(物聯網設備中的app、移動設備中的app、數據中心的后臺服務、網頁服務等)。像蘋果這樣鼓勵開發者優先思考用戶體驗,并提供個性化服務的公司,可能會加速思考方式從DevOps向OpsDev的轉變。