Serverless 时代 DevOps 的最佳打开方式
作者 |?許成銘(競霄)
來源 | 阿里巴巴云原生公眾號
DevOps 簡析
傳統(tǒng)軟件開發(fā)過程中,開發(fā)和運維是極其分裂的兩個環(huán)節(jié),運維人員不關心代碼是怎樣運作的,開發(fā)人員也不知道代碼是如何運行的。
而對于互聯(lián)網(wǎng)公司而言,其業(yè)務發(fā)展迅速,需要快速更新以滿足用戶差異化的需求或者競對的產(chǎn)品策略,需要進行產(chǎn)品的快速迭代,通過小步快跑的方式進行敏捷開發(fā)。
對于這種每周發(fā)布 n 次甚至每天發(fā)布 n 次的場景,高效的協(xié)作文化就顯得尤為重要。DevOps 就在這種場景下應運而生,它打破了開發(fā)人員和運維人員之間的壁壘。
DevOps 是一種重視“軟件開發(fā)人員(Dev)”和“IT 運維技術人員(Ops)”之間溝通合作的文化、運動或慣例。通過自動化“軟件交付”和“架構(gòu)變更”的流程,來使得構(gòu)建、測試、發(fā)布軟件能夠更加地快捷、頻繁和可靠。
上圖是一個完整的軟件開發(fā)生命周期,DevOps 運動的主要特點是倡導對構(gòu)建軟件的整個生命周期進行全面的管理。
DevOps 工程師的職責:
- 管理應用的全生命周期,比如需求、設計、開發(fā)、QA、發(fā)布、運行;
- 關注全流程效率提升,挖掘瓶頸點并將其解決;
- 通過標準化、自動化、平臺化的工具來解決問題。
DevOps 的關注點在于縮短開發(fā)周期,增加部署頻率,更可靠地發(fā)布。通過將 DevOps 的理念引入到整個系統(tǒng)的開發(fā)過程中,能夠顯著提升軟件的開發(fā)效率,縮短軟件交付的周期,更加適應當今快速發(fā)展的互聯(lián)網(wǎng)時代。
Serverless 簡析
上圖左側(cè)是谷歌趨勢,對比了 Serverless 和微服務的關鍵詞趨勢走向,可看出隨著時間變化,Serverless 的熱度已經(jīng)逐漸超過微服務,這說明全世界的開發(fā)人員及公司對 Serverless 非常青睞。
那 Serverless 究竟是什么?上圖右側(cè)是軟件邏輯架構(gòu)圖,有開發(fā)工程師寫的應用,也有應用部署的 Server(服務器),還有 Server 的維護操作,比如資源申請、環(huán)境搭建、負載均衡、擴縮容、監(jiān)控、日志、告警、容災、安全、權(quán)限等。而 Serverless 實際上是把 Server 的維護工作屏蔽了,對于開發(fā)者是黑盒,這些工作都由平臺方支持,對業(yè)務來說只需關注核心邏輯即可。
總得來說,Serverless 架構(gòu)是“無服務器”架構(gòu),是云計算時代的一種架構(gòu)模式,能夠讓開發(fā)者在構(gòu)建應用的過程中無需關注計算資源的獲取和運維,降低運營成本,縮短上線時間。
Serverless 時代 DevOps 的變化
1. Serverless?的特性
上圖左側(cè)為 2020 年中國云原生用戶調(diào)查報告中 Serverless 技術在國內(nèi)的采用情況,圖中顯示近三成用戶已經(jīng)把 Serverless 應用在生產(chǎn)環(huán)境中,16% 的用戶已經(jīng)將 Serverless 應用在核心業(yè)務的生產(chǎn)環(huán)境,12% 的用戶也已經(jīng)在非核心業(yè)務的生產(chǎn)環(huán)境中用到 Serverless,可見國內(nèi)對 Serverless 接受度較高。
上圖右側(cè)為咨詢公司 O’Reilly 對全球不同地區(qū)不同行業(yè)的公司進行的調(diào)查報告結(jié)果,圖中顯示一馬當先使用 Serverless 架構(gòu)的就是 DevOps 人員。
那么當 Serverless 遇上 DevOps,會發(fā)生哪些變化呢?首先我們看一下云原生架構(gòu)白皮書中對 Serverless 特性的歸納總結(jié):
- 全托管的計算服務
用戶只需要編寫自己的代碼來構(gòu)建應用,無需關注同質(zhì)化的復雜的基礎設施的開發(fā)運維工作。
- 通用性
能夠在云上構(gòu)建普適的各種類型應用。
- 自動的彈性伸縮
用戶無需對資源進行預先的容量規(guī)劃,業(yè)務如果有明顯的波峰波谷或臨時容量需求,Serverless 平臺都能夠及時且穩(wěn)定地提供對應資源。
- 按量計費
企業(yè)可以使成本管理更加有效,不用為閑置資源付費。
Serverless 讓運維行為對開發(fā)透明,開發(fā)人員只需關注核心業(yè)務邏輯的開發(fā),進而精益整個產(chǎn)品開發(fā)流程,快速適應市場變化。而上述 Serverless 的這些特性與 DevOps 的文化理念及目標是天然契合的。
2. Serverless?開發(fā)運維體驗
傳統(tǒng)應用構(gòu)建的流程中,DevOps 人員管理整個生命周期的步驟非常多:
- 在資源準備階段,要購買 ECS 進行機器初始化等系列操作;
- 在研發(fā)部署階段,需要把業(yè)務應用、監(jiān)控系統(tǒng)、日志系統(tǒng)等旁路系統(tǒng)部署在 ECS 上;
- 在運維階段,你不僅需要運維自己的應用,還需運維 Iaas 及其他旁路的監(jiān)控、日志、告警組件。
而如果遷到 Serverless,其開發(fā)體驗是怎么樣的呢?
- 在資源準備階段,不需要任何資源準備,因為 Serverless 是按需使用、按量付費的,不用關注底層 Server;
- 在研發(fā)部署階段,只需要將自己的業(yè)務部署到對應的 Serverless 平臺上;
- 在運維階段,徹底做到了免運維。
可以看到,傳統(tǒng)應用構(gòu)建流程中的 Iaas 及監(jiān)控、日志、告警,在 Serverless 上完全沒有,它以全托管、免運維的形式展現(xiàn)給用戶。
Serverless?時代 DevOps?的最佳實踐
上文介紹的體驗其實就是基于阿里云的一款 Serverless 產(chǎn)品——SAE 來實現(xiàn)的。Serverless 應用引擎(SAE)是阿里云 Serverless 產(chǎn)品矩陣中提供的 DevOps 最佳實踐。先簡單介紹一下 SAE:
1. Serverless?應用引擎(SAE)
SAE 是一款面向應用 Serverless PaaS 平臺,支持 Spring Cloud、Dubbo、HSF 等主流的應用開發(fā)框架。用戶可以零代碼改造,直接將應用部署到 SAE 上,并且按需使用、按量付費、秒級彈性,可以充分發(fā)揮 Serverless 的優(yōu)勢,為用戶節(jié)省閑置的資源成本。
在體驗上,SAE 采用全托管、免運維的方式,用戶可以聚焦于核心的業(yè)務邏輯開發(fā),而應用的整個生命周期管理,如監(jiān)控、日志、告警,這些都由 SAE 完成。可以說,SAE 提供了一個成本更優(yōu)、效率更高的一站式應用托管方案,用戶可以做到零門檻、零改造、零容器基礎就可以享受到 Serverless 帶來的技術紅利。
Serverless 應用引擎(SAE)三大特點:
- 0 代碼改造:微服務無縫遷移,開箱即用,支持 War/Jar 自動構(gòu)建鏡像;
- 15s 彈性效率:應用端到端快速擴容,應對突發(fā)流量;
- 57% 降本提效:多套環(huán)境按需啟停,降本且提效。
2. 構(gòu)建高效閉環(huán)的 DevOps?體系
SAE 內(nèi)構(gòu)建了高效閉環(huán) DevOps 體系,覆蓋開發(fā)態(tài)、部署態(tài)和運維態(tài)的整個過程。
中大型企業(yè)一般都使用企業(yè)級的 CICD 工具(如 Jenkins 或云效)部署到 SAE,從而完成從源碼到構(gòu)建再到部署的整個流程。
對于個人開發(fā)者或者中小企業(yè),更傾向于使用 Maven 插件或 IDEA 插件一鍵部署到云端,方便本地調(diào)試,也提升了整個的用戶體驗。
當部署到 SAE 之后,可以進行可視化的智能運維操作,比如高可用運維(服務治理、性能壓測、限流降級等)、應用診斷(線程診斷、日志診斷、數(shù)據(jù)庫診斷等)以及數(shù)據(jù)化運營。以上操作都是部署到 SAE 之后,用戶可以開箱即用的現(xiàn)成的功能。
用戶通過 SAE 可以非常方便地實現(xiàn)整體的開發(fā)運維流程,感受 Serverless 帶來的全方位體驗和效率上的提升。下面介紹幾個 SAE 的最佳實踐:
3. 部署態(tài)最佳實踐:CI/CD
SAE 目前支持三種部署方式,分別是 War、Jar 和鏡像。
如果用戶使用 Spring Cloud、Dubbo 或 HSF 這類應用,可以直接打包或者填寫對應的 URL 地址,就可以直接部署到 SAE 上。而對于非 Java 語言的場景,可以通過鏡像方式進行部署。后續(xù)我們也會支持其他的語言包以自動化構(gòu)建的方式進行部署。
除了直接部署之外,SAE 也支持本地部署、云效部署和自建部署這三種方式。
本地部署依賴 CloudToolkit 插件,對 IDEA/Eclipse 進行了支持,用戶可以在 IDEA 里一鍵部署到 SAE 上,無需登錄,方便地進行自動化操作。
云效部署是阿里云提供的企業(yè)級一體化 CICD 平臺型產(chǎn)品,通過云效可以監(jiān)聽代碼庫的變動,如果進行 Push 操作,就會觸發(fā)云效的整個發(fā)布流程。比如進行代碼檢查或者單元測試,在對這個代碼進行編譯、打包、構(gòu)建,構(gòu)建好后會生成對應的構(gòu)建物,之后它會調(diào)用 SAE 的 API,然后執(zhí)行整體的部署操作。這一整套流程也是開箱即用的,用戶只需要在云效控制臺上進行可視化配置就可以把整個流程串起來。
自建部署指用戶的公司如果是直接通過 Jenkins 進行構(gòu)建的話,也可以直接使用 SAE。Jenkins 作為開源的最大的 CICD 平臺,我們也提供了有力支持,許多用戶也通過 Jenkins 成功地部署到 SAE 上。
4. 部署態(tài)最佳實踐:應用發(fā)布三板斧
應用發(fā)布三板斧包括:可灰度、可監(jiān)控、可回滾。在阿里內(nèi)部所有的變更都需要嚴格做到上述的“三板斧”,而 SAE 作為一款云產(chǎn)品,也是把阿里巴巴的最佳實踐對外輸出進行產(chǎn)品化的集成。
- 可灰度:支持單批、分批、金絲雀等多種發(fā)布策略;支持按流量灰度,批次間自動/手動發(fā)布,分批間隔等多種發(fā)布選項;
- 可監(jiān)控:發(fā)布過程中清晰對比不同批次基礎監(jiān)控與應用監(jiān)控指標異動,及時暴露問題,定位變更風險;
- 可回滾:在發(fā)布過程中,允許人工介入控制發(fā)布流程,如異常中止、一鍵回滾。
上圖為控制臺截圖,可以看到在部署上我們支持單批、分批和灰度三種方式進行發(fā)布。
執(zhí)行發(fā)布的過程都是通過發(fā)布端進行,每個發(fā)布端都有具體的步驟,首先進行構(gòu)建鏡像,然后初始化環(huán)境,接著創(chuàng)建和更新部署配置。用戶可以清晰地看到發(fā)布端當前的運行進度與狀態(tài),方便排查。
5. 運維態(tài)最佳實踐:全方位可觀測
SAE 提供全方位可觀測,可以對分布式系統(tǒng)中的任何變化進行觀測。當系統(tǒng)出現(xiàn)問題時,可以便捷地定位問題、排查問題、分析問題;當系統(tǒng)平穩(wěn)運行時,也可以提前暴露風險,預測可能出現(xiàn)的問題。通過 SAE 用戶可以對自己的應用了如指掌。
這里列舉了可觀測性的三個方面:Metrics、Logging 、Tracing。
- Metrics
代表聚合的數(shù)據(jù),SAE 提供如下基礎監(jiān)控指標:
1)基礎監(jiān)控:CPU、MEM、Load、Network、Disk、IO;
2)應用監(jiān)控:QPS、RT、異常數(shù)、HTTP 狀態(tài)碼、JVM 指標;
3)監(jiān)控告警:豐富的告警源上報、告警收斂處理、多種告警渠道觸達(如郵箱、短信、電話等)。
- Logging
代表離散的數(shù)據(jù),提供以下功能:
1)實時日志:Stdout、Stderr 實時查看;
2)文件日志:自定義采集規(guī)則、持久化存儲、高效查詢;
3)事件:發(fā)布單變更事件、應用生命周期事件、事件通知回調(diào)機制。
- Tracing
意味著可以按請求維度進行排查,提供如下開箱即用的功能:
1)請求調(diào)用鏈堆棧查詢;
2)應用拓撲自動發(fā)現(xiàn);
3)常用診斷場景的指標下鉆分析;
4)事務快照查詢;
5)異常事務和慢事務捕捉。
6. 運維態(tài)最佳實踐:在線調(diào)試
通過 SAE 在線調(diào)試可以訪問單實例的目標端口,相當于用戶在本地可以直接訪問云端某個應用的某個具體實例,原理是為實例提供了端口映射的 SLB,通過這個能力用戶可以實現(xiàn)如下功能:
- SSH / SFTP 訪問實例
可以在本地通過 SSH 直接連到應用的具體的實例上,或者通過 SFTP 進行上傳/下載文件。
- Java retmote debug
相當于在 IDEA 里配置一個斷點,再遠程連接到對應的 SAE 的實例上,這樣就可以通過斷點來查看整個方法的調(diào)用站與上下文信息,對線上正在運行的應用進行診斷。
- 其他診斷工具連接實例
其他診斷工具也可以通過在線調(diào)試的手段連接到 SAE 的實例上,進而看到 Java 的一些信息,比如堆棧或者線程等。?適用場景:針對運行時在線應用的實時觀測運維及問題排查求解。
7. 開發(fā)態(tài)最佳實踐:端云聯(lián)調(diào)
針對微服務場景,我們提供了一個非常好用的能力:端云聯(lián)調(diào)。它基于 CloudToolkit 插件+ 跳板機,可以實現(xiàn):
1)本地服務訂閱并注冊到云端 SAE 內(nèi)置的注冊中心;
2)本地服務可以和云端 SAE 服務互相調(diào)用。
適用場景:
1)微服務應用遷移到云端 SAE,遷移過程中的開發(fā)聯(lián)調(diào);
2)本地開發(fā)測試驗證。
這個功能的原理是需要在用戶的 VPC 內(nèi),然后通過 ECS 代理服務器作為跳板機,ECS 可以和同一個 VPC 內(nèi)的 SAE 應用進行互調(diào),然后這臺 ECS 通過反應代理的方式,可以與本地進行連接。
CloudToolkit 插件會在應用啟動時就注入對應 SAE 注冊中心的地址,以及微服務的一些上下文參數(shù),使得用戶本地的應用通過跳板機連到 SAE 的應用上,從而進行整個端云聯(lián)調(diào)的過程。
作者簡介
許成銘,花名:競霄,先后參與 aPaaS 領域 EDAS 和 SAE 后端研發(fā)工作,經(jīng)歷云原生與 Serverless 技術趨勢變革。
本文整理自【Serverless Live 系列直播】2 月 2 日場
直播回看鏈接:https://developer.aliyun.com/topic/serverless/practices
Serverless 電子書下載
本書亮點:
- 從架構(gòu)演進開始,介紹 Serverless 架構(gòu)及技術選型構(gòu)建 Serverless 思維;
- 了解業(yè)界流行的 Serverless 架構(gòu)運行原理;
- 掌握 10 大 Serverless 真實落地案例,活學活用。
下載鏈接:https://developer.aliyun.com/topic/download?id=1128
總結(jié)
以上是生活随笔為你收集整理的Serverless 时代 DevOps 的最佳打开方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云原生时代下,容器安全的“四个挑战”和“
- 下一篇: Fluid 0.5 版本发布:开启数据集