1. 程式人生 > >如何讓GIS公有云持續部署、高效交付?來看SuperMap Online的DevOps實踐!

如何讓GIS公有云持續部署、高效交付?來看SuperMap Online的DevOps實踐!

SuperMap Online是國內首家提供GIS雲主機業務的線上GIS平臺,可實現GIS資料的線上託管與應用。作為需要實時、線上運維的網際網路產品,既需要不斷開發、上線新功能,又需要保證線上網站的穩定、可靠。開發上線新功能與穩定的運維之間似乎天生就存在衝突,而產品總要不斷推出新功能,如何才能做到持續的交付上線?祕訣就在於SuperMap Online引入了DevOps理念!
DevOps是什麼?有什麼價值?誰最需要?SuperMap Online又是如何成功應用的?
本文將為您揭曉SuperMap Online在DevOps方面的實踐,分享DevOps帶來的持續、高效交付。

什麼是DevOps

DevOps(Development和Operations的組合詞),望文生義:開發+運維?是又做開發又做運維的崗位嗎?
DevOps是一種重視“軟體開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化、活動或慣例,可以直觀描述為“開發團隊與運營團隊之間更具協作性、更高效的關係”。再具體一些,我們可以把DevOps看作開發(軟體工程)、技術運營和質量保障(QA)三者的交集。

這裡寫圖片描述
圖 1 DevOps是三者的交集(出自:wikipedia)

DevOps的主要目標是,通過自動化“軟體交付”和“架構變更”的流程,來使得構建、測試、釋出軟體能夠更加地快捷、頻繁和可靠。DevOps涵蓋了程式碼開發、構建、測試、釋出以及部署和反饋等環節,閉合成一個”無限大”符號(∞)形狀的DevOps能力閉環。可以說,DevOps是一種使持續交付成為可能的理念,關注於所有人共同協作以改進開發效率、提高生產力,同時增加穩定性並降低平均故障修復時間。

這裡寫圖片描述
圖 2 DevOps能力環

DevOps帶來高效交付

DevOps帶來了什麼呢?實踐DevOps的組織與傳統組織有什麼不同?
參考Puppet釋出的《2016 State of DevOps Report》:根據全球4600位各IT公司的技術工作者的提交資料統計,高效組織平均每年可以完成1460次部署,與低效組織相比,高效組織部署頻率高200倍,交貨週期快2555倍,故障恢復時間快24倍,故障率低3倍。

這裡寫圖片描述
圖 3 高效IT組織的效率

高效和低效之間這麼大的差別是怎麼產生的?
體會一下,你和你的團隊是否害怕部署?是否害怕新部署帶來的“變更”會打破現有的一切?
對於傳統的軟體開發方法而言,部署通常都是罕見、痛苦且具有破壞性的事件。而對於應用DevOps實踐的組織而言,部署則是經常的、沒有痛苦且可靠的。這就是DevOps給產品團隊帶來的最大不同。
傳統的軟體組織將開發、IT運營和質量保障設為各自分離的部門,按照以前的工作方式,開發和部署不需要深入的跨部門的支援;而現在,基於DevOps理念卻需要極其緊密的協作。當然,DevOps考慮的還不止是軟體部署,它是一套針對這幾個部門間溝通與協作問題的流程和方法。需要頻繁交付、持續交付(Continuous Delivery)的企業可能更需要DevOps,高效交付正是DevOps的初衷。

看到這裡,你是不是覺得DevOps已經牛到飛起現在就想引進團隊?亦或覺得DevOps只是在敏捷開發的基礎上加了個運維?嗯,是(在敏捷的基礎上再進一步到生產環境下),也不是(環境複雜度更高且跨部門協作更多,不只是量變)。

持續交付:SuperMap Online的DevOps實踐

DevOps,是文化,是理念,是技術,是方法論,也是流程和工具的實踐。文化理念是略玄的,幾句話道不盡,而流程和工具則是可以學習和實踐的,下面我們結合SuperMap Online的實踐來具體體會DevOps下的工作流程。先來個總體流程圖,避免看暈。

這裡寫圖片描述
圖 4 Online持續交付流程

實踐1:紮根於平臺軟體的敏捷開發與持續整合

與傳統開發模式下那種大規模的、不頻繁的釋出(通常以“季度”或“年”為單位)相比,敏捷開發大大提升了釋出頻率(通常以“天”或“周”為單位)。SuperMap GIS平臺軟體基於敏捷的理念,構建了整套敏捷研發與質量保障體系,覆蓋從新產品研發、Scrum(團隊管理)、質量控制到CI(持續整合)的整個研發活動。
SuperMap Online正是誕生於這樣的敏捷研發與質量保障體系,所以天生具有敏捷的基因。但是,作為一個需要實時線上的網際網路產品,它與平臺軟體又不同,在部署方面有更多需求。主要包括:

  • 不間斷“上線”,需要不定期地把新功能部署到生產環境下的線上網站上,並不中斷服務
  • 監控,後臺各類程序的服務狀況、日誌收集、異常報警,日常運維以此為基礎
  • 災備,需保證7*24小時不間斷服務,做災備節點、提供故障切換機制,主節點有故障自動切換到備用節點
  • 隨時可回滾,必須可以很容易的回滾到前面的版本以處理意外問題

所以,要實現SuperMap Online生產環境下的持續交付(Continuous Delivery),在流程上,除了持續整合(CI),還需要關注持續部署(CD)、監控、災備、故障恢復等。

實踐2:基於公有云環境的持續部署

首先,什麼是持續部署(CD)?
我們知道,CI的目標是對開發團隊的程式碼進行整合,包括程式碼的構建、單元測試與整合測試的執行,以及生成執行結果的報表等等。而CD是與CI緊密聯絡在一起的下一環節。CD(Continuous Deployment)過程通過在管道(DeploymentPipeline)中定義的步驟,將CI生成的結果部署至整合、預釋出環境甚至生產環境中。CD的過程是“持續的”,理論上,一旦有程式碼簽入原始碼控制系統,後續過程就會自動進行測試、對程式碼進行構建、並將構建結果部署至目標環境中。
結果很美好,但是如何做到“持續”則是一個難題。DevOps理論出現了這麼多年,到這兩年用的人才真正多起來,原因就在於IT技術已經發展到了可以支撐“持續性”,而這項技術就是雲端計算。基於雲環境的自動化部署,在保證基本安全性的同時,可以利用雲的高可伸縮性、高可用性,並降低成本(按需使用)。同時,基於雲環境的部署本身是自服務的,可以縮短部署週期,從而使得持續部署的“持續”、“頻繁”成為可能。

SuperMap Online作為網際網路產品,其部署環節需要直接將產品或新功能部署到生產環境下。如果採用傳統的手動搭建環境、自行部署,則更新部署的週期必然很長,這顯然不能滿足網際網路產品的需求。而云計算技術的發展和成熟,使得DevOps有了更多的配合工具,且SuperMap Online本身是部署在公有云平臺(阿里雲)上的,因此其持續部署也首選公有云環境。
具體來說:SuperMap Online產品經過CI驗證並打包後,會通過自動化手段,持續部署到公有云平臺的生產環境。基本流程是:
1) CI打包,釋出包含新功能的完整產品包
2) 自動上傳至伺服器
3) 目標伺服器(公有云)定期檢測,發現新包
4) 自動下載至目標環境(生產環境)
5) 自動配置目標環境
6) 完成部署並生成部署報告
部署週期一般跟隨團隊進展,可固定為1-2個迭代週期(理論上可以每天,但根據實際需求只需短週期頻繁小部署),同時也會根據功能需求,隨時更新上線。

實踐3:自動化部署測試與上線前內測

  • 自動化測試

作為線上產品,SuperMap Online的自動化測試,包含兩個部分。
一方面,與原始碼一起提交、構建、執行的自動化部署測試,即持續整合(CI)的一部分,讓我們程式碼的每一次提交都可以觸發一次構建/測試。自動化測試不只是單元測試(UT),還包含模仿使用者行為的整合測試IT和驗證測試VT。
另一方面,為了驗證線上SuperMap Online網站的實時有效,也會對網站進行基本的可用性測試。這部分測試程式碼(VT)會定期向網站發請求,確保SuperMap Online可訪問、可登入、基本功能可用(PS:主要覆蓋實時運維監控做不到的粒度)。

  • 利用“映象”網站(itest)上線前內測

前面我們介紹了SuperMap Online的持續部署是直接部署到線上的生產環境下,是直面終端使用者的。是不是聽上去有點緊張?是的,從產品包直接到生產環境,是有風險的。考慮到這個風險,SuperMap Online的部署並不是直接從CI打包就部署到生產環境,中間還有一步終極保障——上線前的內測。
上線前內測,是在新功能正式部署上線前,通過自動化流程將新功能、新變更都部署到專門用於內測的“映象”網站,這個“映象“就是專門用來模擬SuperMap Online生產環境的。通過在映象網站的內測(自動化VT+手工),可以保證這些新功能、變更可以滿足預期,且不會帶來其他額外的問題。此時,才可以通過自動部署流程將這些新功能和變更同步到真正的生成環境下,即SuperMap Online網站。
那麼,到這裡,持續交付的流程就結束了嗎?當然不是,一個線上執行的網站還需要持續的監控及日誌體系。

實踐4:持續的監控和日誌體系

搭建一個持續可靠的監控/日誌體系,就是一個持續檢查和反饋的機制,這樣才能形成上文提到的DevOps”無限大”閉環。

  • 基於公有云平臺的持續監控

SuperMap Online部署於公有云平臺,直接使用雲平臺的監控功能來實時監控SuperMap Online站點,如CPU,記憶體、IO等伺服器資源,以及網路流量。如果網站或伺服器出現異常,監控平臺會通過郵件,簡訊自動報警。

這裡寫圖片描述
圖 5 基於公有云的實時監控
  • 持續的視覺化日誌體系

通過日誌體系可以實時檢查並展示伺服器和應用程式的執行狀態,如應用請求和錯誤等。同時,對伺服器和應用程式的問題日誌進行格式化處理,有利於排查,方便定位問題。此外,一個完善的日誌體系還包括日誌的集中管理(分散式系統尤其需要)與視覺化分析。雖然文字形式的日誌更詳細,但是不易閱讀和統計分析。
SuperMap Online採用ELK(ElasticSearch+Logstash+Kibana)實現日誌統計與視覺化,通過這種持續的記錄、處理、管理、分析,彙集所有干係程序的日誌,為網站的持續、穩定、安全執行提供保障。

這裡寫圖片描述
圖 6 日誌統計與視覺化

結語

實踐證明,SuperMap Online利用DevOps使產品開發與運維團隊的緊密合作,實現了公有云生產環境下的持續部署。並在此基礎上,通過持續監控與日誌體系,實現了良好的反饋機制,完成DevOps“無限大“閉環,真正實現了網站的持續交付、高效交付。
提高產品交付頻率,實現高效組織,跟SuperMap Online一起玩轉DevOps,你還在等什麼?