天天看點

從 DevOps 到 Serverless

從 DevOps 到 Serverless

沒有比“不用做”更有效的方式來解決“如何更高效做”的問題了。

阿裡雲 Serverless 應用引擎6折特惠,節省閑置資源,IaaS免運維。

https://cn.aliyun.com/product/sae

DevOps 概述

DevOps 是一組用于促進開發和運維人員之間協作的過程、方法和系統的統稱。

DevOps 提倡通過一系列的技術和工具降低開發和運維人員之間的隔閡,實作從開發到最終部署的全流程自動化,進而達到開發運維一體化。通過将 DevOps 的理念引入到整個系統的開發過程中,能夠顯著提升軟體的開發效率,縮短軟體傳遞的周期,更加适應當今快速發展的網際網路時代。

說到 DevOps ,就必然會提到持續內建,持續內建指的是在軟體開發過程中,軟體開發人員持續不斷地将開發出來的代碼和其他的開發人員的代碼進行合并,每次合并後自動地進行編譯、建構,并運作自動化測試進行驗證,而不是等到最後各自開發完成後才合并在一起。持續內建能從根本上提高一個團隊的軟體開發效率。在軟體開發過程中引入持續內建,可以幫助團隊及時的發現系統中的問題,并快速做出修複,不僅可以縮短軟體開發的時間,而且可以傳遞更具品質的系統。

基于 Docker 實作一個 DevOps 開發環境

一個 DevOps 開發環境需要滿足以下 8 點需求。

1、環境一緻性:在本地開發出來的功能,無論在什麼環境下部署都應該能得到一緻的結果。

2、代碼自動檢查:為了盡早發現問題,每一次代碼送出後,系統都應該自動對代碼進行檢查,及早發現潛在的問題,并運作自動化測試。

3、持續內建:每次代碼送出後系統可以自動進行代碼的編譯和打包,無需運維人員手動進行。

4、持續部署:代碼內建完畢後,系統可以自動将運作環境中的舊版本應用更新成新版本的應用并且整個過程中不會讓系統不可用。

5、持續回報:在代碼自動檢查、持續內建、持續部署的過程中,一旦出現問題,要能及時将問題回報給開發人員以及運維人員。開發和運維人員收到回報後對問題及時進行修複。

6、快速復原:當發現本次部署的版本出現問題時,系統應能快速回退到上一個可用版本。

7、彈性伸縮:當某個服務通路量增大時,系統應可以對這個服務快速進行擴容,保證使用者的通路。當通路量回歸正常時,系統能将擴容的資源釋放回去,實作根據通路情況對系統進行彈性伸縮。

8、可視化運維:提供可視化的頁面,可實時監控應用、叢集、硬體的各種狀态。

為了滿足以上 8 點要求,設計出的 DevOps 開發環境如下圖所示。

從 DevOps 到 Serverless

整個環境主要由 6 部分組成:

1、代碼倉庫 Gitlab 。

2、容器技術 Docker 。

3、持續內建工具 Jenkins 。

4、代碼品質檢測平台 SonarQube 。

5、鏡像倉庫 Harbor 。

6、容器叢集管理系統 Kubernetes 。

整個環境的運作流程主要分為以下 6 步:

1、開發人員在本地開發并驗證好功能後,将代碼送出到代碼倉庫。

2、通過事先配置好的 Webhook 通知方式,當開發人員送出完代碼後,部署在雲端的持續內建工具 Jenkins 會實時感覺,并從代碼倉庫中擷取最新的代碼。

3、擷取到最新代碼後,Jenkins 會啟動測試平台 SonarQube 對最新的代碼進行代碼檢查以及執行單元測試,執行完成後在 SonarQube 平台上生成測試報告。如果測試沒通過,則以郵件的方式通知研發人員進行修改,終止整個流程。若測試通過,将結果回報給 Jenkins 并進行下一步。

4、代碼檢查以及單元測試通過後, Jenkins 會将代碼發送到持續內建伺服器中,在伺服器上對代碼進行編譯、建構然後打包成能在容器環境上運作的鏡像檔案。如果中間有步驟出現問題,則通過郵件的方式通知開發人員和運維人員進行處理,并終止整個流程。

5、将鏡像檔案上傳到私有鏡像倉庫 Harbor 中儲存。

6、鏡像上傳完成後, Jenkins 會啟動持續傳遞伺服器,對雲環境中運作的應用進行版本更新,整個更新過程會確定服務的通路不中斷。持續傳遞伺服器會将最新的鏡像檔案拉取到 Kubernetes 叢集中,并采用逐漸替換容器的方式進行對應用進行更新,在服務不中斷的前提下完成更新。

通過上述幾步,我們就可以簡單實作一個 DevOps 開發環境,實作代碼從送出到最終部署的全流程自動化。

但是自從 2014 年 AWS 釋出 ASW Lambda 以來, Serverless 的概念開始逐漸火熱起來。

各大雲廠商開始紛紛開始推出各自的 Serverless 産品,如 Google 的 Cloud Functions ,阿裡雲的函數計算、Serverless應用引擎(SAE),等等。那麼什麼是Serverless 無服務計算呢?

什麼是 Serverless?

根據CNCF(雲原生計算基金會)釋出的 Serverless 白皮書裡的定義:

Serverless computing refers to the concept of building and running applications that do not require server management. It describes a finer-grained deployment model where applications, bundled as one or more functions, are uploaded to a platform and then executed, scaled, and billed in response to the exact demand needed at the moment.

首先需要強調一點的是無伺服器計算并不意味着我們不再需要使用伺服器來運作代碼,代碼仍需要運作在伺服器上對外提供服務。

在無服務計算時代,研發人員無需對伺服器進行監控、配置、更新、擴容等運維操作。隻需要将代碼上傳到雲廠商提供的無伺服器計算平台上即可,雲廠商會保證代碼能正常運作,當流量突增時,自動對伺服器進行擴容,流量減少時,對伺服器進行縮容。

從 DevOps 到 Serverless

這些運維操作對研發人員來說都是黑盒的,會将開發人員從繁瑣的運維工作中解放出來,隻需要按運作時長對資源進行付費即可。和 DevOps 概念提倡的是通過一系列工具和自動化的技術來降低運維的難度,促進研發運維一體化不同, Serverless 更像是一種 NoOps,即通過“不用做”的方式來解決“如何更高效做”的問題。

阿裡雲在 Serverless 上的實踐

目前阿裡雲上實作 Serverless 技術的産品有Serverles應用引擎和函數計算FAAS。

Serverles應用引擎

Serverless 應用引擎是面向應用的 Serverless PaaS 平台,它向上抽象了應用的概念,支援 Spring Cloud、Dubbo、HSF 等流行的開發架構,并通過WAR包、JAR包和鏡像等多種方式部署應用。它的使用可以通過下面這張圖來了解。

從 DevOps 到 Serverless

函數計算

FAAS 是 Serverless 所提供的服務的另一種形态。以阿裡雲函數計算為例,阿裡雲函數計算的流程大緻如下圖所示。

從 DevOps 到 Serverless

Photo @

https://yq.aliyun.com/articles/574222

1、開發者在本地編寫代碼。

2、代碼開發完成後通過指令行工具 fcli, fun 或者可視化界面控制台上傳到阿裡雲函數計算平台。

3、開發者上傳完代碼後,平台會自動啟動基于 Docker 的 DevOps 流程,對代碼進行編譯、打包成鏡像檔案。并上傳到鏡像倉庫。

4、開發者在平台是配置事件觸發器,目前阿裡雲已經支援 OSS、HTTP、CDN、SLS、定時任務等多種形式的觸發器形式。

5、當觸發器被觸發後,會到達事件排程器。平台會将鏡像快速啟動成容器并執行代碼,根據流量自動對服務進行彈性伸縮。保證代碼能正常并執行完成。

伯克利對 Serverless 未來的預測

盡管 Serverless 仍存在諸多的挑戰,但是我們相信随着市場規模的不斷擴大,這些挑戰會逐漸被解決。 UC 伯克利對 Serveless 未來十年的發展趨勢做了以下幾點預測。

1、新型的 Bass 存儲服務會被創造出來,這樣更多類型的應用可以遷移到 Serveless 平台上。這種存儲服務的性能會和本地存儲的性能相當,并提供長期和短期的存儲。更多适用于 Serveless 平台的硬體會被使用。

2、由于更進階别的程式設計抽象以及更加細粒度的資源隔離,在無伺服器計算平台上運作的代碼将會比傳統的方式更加安全可靠。

3、随着無伺服器計算收費模式的不斷發展,幾乎任何應用遷移到無伺服器計算平台都會比原先的有伺服器計算的方式的成本更低。

4、有伺服器計算在未來會促進 BaaS 的發展。

5、雖然現有的有伺服器計算不會消失,但是随着Serveless技術的不斷發展,有伺服器計算在雲上所占的比例會逐年下降。

6、無伺服器計算将會成為雲時代預設的程式設計方式,它将大規模取代傳統的基于伺服器的程式設計方式,并終結傳統的 C/S 架構。

總結

目前資料中心的資源使用率仍處于一個較低水準,特别是對于線上業務而言,日均資源使用率僅在 10% 左右,主要是由于當今資源都是屬于獨享型的,不管你用不用,這些資源都需要保留。而一旦大規模使用 Serveless 之後,資源的使用由平台統一排程,按需使用,整體的資源使用率會大幅提升,整個雲計算資源的使用成本無疑也會大幅降低。

随着 Serverless 的不斷發展,未來程式設計方式将會有很大的不同。無論是從成本的角度還是使用的角度,我們有理由相信下一個時代是 Serveless 的時代,并應該朝着這個方向不斷探索。

本文作者:徐進茂,花名羅離, Java 開發工程師。現就職于阿裡雲智能基礎設施事業部,主要負責阿裡巴巴資料中心營運平台的研發工作。