天天看點

OpsDev--軟體設計從Ops角度出發以規避風險

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的轉變。

繼續閱讀