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