從DevOps到Serverless:通過“不用做”的方式解決“如何更高效做”的問題

作者 | 徐進(jìn)茂(羅離)?JAVA 開發(fā)工程師?

創(chuàng)新互聯(lián)公司是一家專業(yè)提供高唐企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都網(wǎng)站制作、H5場景定制、小程序制作等業(yè)務(wù)。10年已為高唐眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

導(dǎo)讀:近年來,Serverless 一詞越來越熱,它已經(jīng)逐漸成為了一種新型的軟件設(shè)計架構(gòu)。和 DevOps 概念提倡的是通過一系列工具和自動化的技術(shù)來降低運(yùn)維的難度,促進(jìn)研發(fā)運(yùn)維一體化不同, Serverless 更像是一種 NoOps,即通過“不用做”的方式來解決“如何更高效做”的問題。

DevOps 概述

DevOps 是一組用于促進(jìn)開發(fā)和運(yùn)維人員之間協(xié)作的過程、方法和系統(tǒng)的統(tǒng)稱。

DevOps 提倡通過一系列的技術(shù)和工具降低開發(fā)和運(yùn)維人員之間的隔閡,實(shí)現(xiàn)從開發(fā)到最終部署的全流程自動化,從而達(dá)到開發(fā)運(yùn)維一體化。通過將 DevOps 的理念引入到整個系統(tǒng)的開發(fā)過程中,能夠顯著提升軟件的開發(fā)效率,縮短軟件交付的周期,更加適應(yīng)當(dāng)今快速發(fā)展的互聯(lián)網(wǎng)時代。

說到 DevOps ,就必然會提到持續(xù)集成。持續(xù)集成指的是在軟件開發(fā)過程中,軟件開發(fā)人員持續(xù)不斷地將開發(fā)出來的代碼和其他的開發(fā)人員的代碼進(jìn)行合并,每次合并后自動地進(jìn)行編譯、構(gòu)建,并運(yùn)行自動化測試進(jìn)行驗(yàn)證,而不是等到最后各自開發(fā)完成后才合并在一起。

持續(xù)集成能從根本上提高一個團(tuán)隊的軟件開發(fā)效率。在軟件開發(fā)過程中引入持續(xù)集成,可以幫助團(tuán)隊及時的發(fā)現(xiàn)系統(tǒng)中的問題,并快速做出修復(fù),不僅可以縮短軟件開發(fā)的時間,而且可以交付更具質(zhì)量的系統(tǒng)。

基于 Docker 實(shí)現(xiàn)一個 DevOps 開發(fā)環(huán)境

一個 DevOps 開發(fā)環(huán)境需要滿足以下 8 點(diǎn)需求。

  • 環(huán)境一致性:在本地開發(fā)出來的功能,無論在什么環(huán)境下部署都應(yīng)該能得到一致的結(jié)果;

  • 代碼自動檢查:為了盡早發(fā)現(xiàn)問題,每一次代碼提交后,系統(tǒng)都應(yīng)該自動對代碼進(jìn)行檢查,及早發(fā)現(xiàn)潛在的問題,并運(yùn)行自動化測試;

  • 持續(xù)集成:每次代碼提交后系統(tǒng)可以自動進(jìn)行代碼的編譯和打包,無需運(yùn)維人員手動進(jìn)行;

  • 持續(xù)部署:代碼集成完畢后,系統(tǒng)可以自動將運(yùn)行環(huán)境中的舊版本應(yīng)用更新成新版本的應(yīng)用并且整個過程中不會讓系統(tǒng)不可用;

  • 持續(xù)反饋:在代碼自動檢查、持續(xù)集成、持續(xù)部署的過程中,一旦出現(xiàn)問題,要能及時將問題反饋給開發(fā)人員以及運(yùn)維人員。開發(fā)和運(yùn)維人員收到反饋后對問題及時進(jìn)行修復(fù);

  • 快速回滾:當(dāng)發(fā)現(xiàn)本次部署的版本出現(xiàn)問題時,系統(tǒng)應(yīng)能快速回退到上一個可用版本;

  • 彈性伸縮:當(dāng)某個服務(wù)訪問量增大時,系統(tǒng)應(yīng)可以對這個服務(wù)快速進(jìn)行擴(kuò)容,保證用戶的訪問。當(dāng)訪問量回歸正常時,系統(tǒng)能將擴(kuò)容的資源釋放回去,實(shí)現(xiàn)根據(jù)訪問情況對系統(tǒng)進(jìn)行彈性伸縮;

  • 可視化運(yùn)維:提供可視化的頁面,可實(shí)時監(jiān)控應(yīng)用、集群、硬件的各種狀態(tài)。

為了滿足以上 8 點(diǎn)要求,設(shè)計出的 DevOps 開發(fā)環(huán)境如下圖所示。

從 DevOps 到 Serverless:通過“不用做”的方式解決“如何更高效做”的問題

整個環(huán)境主要由 6 部分組成:

  • 代碼倉庫 Gitlab
  • 容器技術(shù) Docker
  • 持續(xù)集成工具 Jenkins
  • 代碼質(zhì)量檢測平臺 SonarQube
  • 鏡像倉庫 Harbor
  • 容器集群管理系統(tǒng) Kubernetes

整個環(huán)境的運(yùn)行流程主要分為以下 6 步:

  • 開發(fā)人員在本地開發(fā)并驗(yàn)證好功能后,將代碼提交到代碼倉庫;

  • 通過事先配置好的 Webhook 通知方式,當(dāng)開發(fā)人員提交完代碼后,部署在云端的持續(xù)集成工具 Jenkins 會實(shí)時感知,并從代碼倉庫中獲取最新的代碼;

  • 獲取到最新代碼后,Jenkins 會啟動測試平臺 SonarQube 對最新的代碼進(jìn)行代碼檢查以及執(zhí)行單元測試,執(zhí)行完成后在 SonarQube 平臺上生成測試報告。如果測試沒通過,則以郵件的方式通知研發(fā)人員進(jìn)行修改,終止整個流程。若測試通過,將結(jié)果反饋給 Jenkins 并進(jìn)行下一步;

  • 代碼檢查以及單元測試通過后, Jenkins 會將代碼發(fā)送到持續(xù)集成服務(wù)器中,在服務(wù)器上對代碼進(jìn)行編譯、構(gòu)建然后打包成能在容器環(huán)境上運(yùn)行的鏡像文件。如果中間有步驟出現(xiàn)問題,則通過郵件的方式通知開發(fā)人員和運(yùn)維人員進(jìn)行處理,并終止整個流程;

  • 將鏡像文件上傳到私有鏡像倉庫 Harbor 中保存;

  • 鏡像上傳完成后, Jenkins 會啟動持續(xù)交付服務(wù)器,對云環(huán)境中運(yùn)行的應(yīng)用進(jìn)行版本更新,整個更新過程會確保服務(wù)的訪問不中斷。持續(xù)交付服務(wù)器會將最新的鏡像文件拉取到 Kubernetes 集群中,并采用逐步替換容器的方式進(jìn)行對應(yīng)用進(jìn)行更新,在服務(wù)不中斷的前提下完成更新。

通過上述幾步,我們就可以簡單實(shí)現(xiàn)一個 DevOps 開發(fā)環(huán)境,實(shí)現(xiàn)代碼從提交到最終部署的全流程自動化。

但是自從 2014 年 AWS 發(fā)布 ASW Lambda 以來, Serverless 的概念開始逐漸火熱起來。各大云廠商開始紛紛開始推出各自的 Serverless 產(chǎn)品,如 Google 的 Cloud Functions ,阿里云的函數(shù)計算、Serverless應(yīng)用引擎(SAE)等等。究竟什么是Serverless 無服務(wù)計算呢?

什么是 Serverless?

根據(jù) CNCF (云原生計算基金會)發(fā)布的 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.

首先需要強(qiáng)調(diào)一點(diǎn)的是無服務(wù)器計算并不意味著我們不再需要使用服務(wù)器來運(yùn)行代碼,代碼仍需要運(yùn)行在服務(wù)器上對外提供服務(wù)。

在無服務(wù)計算時代,研發(fā)人員無需對服務(wù)器進(jìn)行監(jiān)控、配置、更新、擴(kuò)容等運(yùn)維操作。只需要將代碼上傳到云廠商提供的無服務(wù)器計算平臺上即可,云廠商會保證代碼能正常運(yùn)行,當(dāng)流量突增時,自動對服務(wù)器進(jìn)行擴(kuò)容,流量減少時,對服務(wù)器進(jìn)行縮容。

從 DevOps 到 Serverless:通過“不用做”的方式解決“如何更高效做”的問題cdn.com/348b57cb1560dbb47e617afe1f0dd55e592a0e80.png">

這些運(yùn)維操作對研發(fā)人員來說都是黑盒的,會將開發(fā)人員從繁瑣的運(yùn)維工作中解放出來,只需要按運(yùn)行時長對資源進(jìn)行付費(fèi)即可。

和 DevOps 概念提倡的是通過一系列工具和自動化的技術(shù)來降低運(yùn)維的難度,促進(jìn)研發(fā)運(yùn)維一體化不同, Serverless 更像是一種 NoOps,即通過“不用做”的方式來解決“如何更高效做”的問題。

阿里云在 Serverless 上的實(shí)踐

當(dāng)前阿里云上實(shí)現(xiàn) Serverless 技術(shù)的產(chǎn)品有 Serverless 應(yīng)用引擎和函數(shù)計算 FaaS。

Serverless 應(yīng)用引擎

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

從 DevOps 到 Serverless:通過“不用做”的方式解決“如何更高效做”的問題

函數(shù)計算

FaaS 是 Serverless 所提供的服務(wù)的另一種形態(tài)。以阿里云函數(shù)計算為例,阿里云函數(shù)計算的流程大致如下圖所示。

從 DevOps 到 Serverless:通過“不用做”的方式解決“如何更高效做”的問題

  • 開發(fā)者在本地編寫代碼;

  • 代碼開發(fā)完成后通過命令行工具 fcli、fun 或者可視化界面控制臺上傳到阿里云函數(shù)計算平臺;

  • 開發(fā)者上傳完代碼后,平臺會自動啟動基于 Docker 的 DevOps 流程,對代碼進(jìn)行編譯、打包成鏡像文件。并上傳到鏡像倉庫;

  • 開發(fā)者在平臺是配置事件觸發(fā)器,當(dāng)前阿里云已經(jīng)支持 OSS、HTTP、CDN、SLS、定時任務(wù)等多種形式的觸發(fā)器形式;

  • 當(dāng)觸發(fā)器被觸發(fā)后,會到達(dá)事件調(diào)度器。平臺會將鏡像快速啟動成容器并執(zhí)行代碼,根據(jù)流量自動對服務(wù)進(jìn)行彈性伸縮。保證代碼能正常并執(zhí)行完成。

伯克利對 Serverless 未來的預(yù)測

盡管 Serverless 仍存在諸多的挑戰(zhàn),但是我們相信隨著市場規(guī)模的不斷擴(kuò)大,這些挑戰(zhàn)會逐漸被解決。UC 伯克利對 Serverless 未來十年的發(fā)展趨勢做了以下幾點(diǎn)預(yù)測。

  • 新型的 BaSS 存儲服務(wù)會被創(chuàng)造出來,這樣更多類型的應(yīng)用可以遷移到 Serverless 平臺上。這種存儲服務(wù)的性能會和本地存儲的性能相當(dāng),并提供長期和短期的存儲。更多適用于 Serverless 平臺的硬件會被使用;

  • 由于更高級別的編程抽象以及更加細(xì)粒度的資源隔離,在無服務(wù)器計算平臺上運(yùn)行的代碼將會比傳統(tǒng)的方式更加安全可靠;

  • 隨著無服務(wù)器計算收費(fèi)模式的不斷發(fā)展,幾乎任何應(yīng)用遷移到無服務(wù)器計算平臺都會比原先的有服務(wù)器計算的方式的成本更低;

  • 有服務(wù)器計算在未來會促進(jìn) BaaS 的發(fā)展;

  • 雖然現(xiàn)有的有服務(wù)器計算不會消失,但是隨著 Serverless r技術(shù)的不斷發(fā)展,有服務(wù)器計算在云上所占的比例會逐年下降;

  • 無服務(wù)器計算將會成為云時代默認(rèn)的編程方式,它將大規(guī)模取代傳統(tǒng)的基于服務(wù)器的編程方式,并終結(jié)傳統(tǒng)的 C/S 架構(gòu)。

總結(jié)

當(dāng)前數(shù)據(jù)中心的資源利用率仍處于一個較低水平,特別是對于在線業(yè)務(wù)而言,日均資源使用率僅在 10% 左右,主要是由于當(dāng)今資源都是屬于獨(dú)享型的,不管你用不用,這些資源都需要保留。

一旦大規(guī)模使用 Serverless 之后,資源的使用由平臺統(tǒng)一調(diào)度,按需使用,整體的資源利用率會大幅提升,整個云計算資源的使用成本無疑也會大幅降低。

隨著 Serverless 的不斷發(fā)展,未來編程方式將會有很大的不同。無論是從成本的角度還是使用的角度,我們有理由相信下一個時代是 Serverless 的時代,并應(yīng)該朝著這個方向不斷探索。

作者簡介:徐進(jìn)茂(羅離) Java 開發(fā)工程師?,F(xiàn)就職于阿里云智能基礎(chǔ)設(shè)施事業(yè)部,主要負(fù)責(zé)阿里巴巴數(shù)據(jù)中心運(yùn)營平臺的研發(fā)工作。


“ 阿里巴巴云×××icloudnative×××erverless、容器、Service Mesh等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)×××

網(wǎng)頁標(biāo)題:從DevOps到Serverless:通過“不用做”的方式解決“如何更高效做”的問題
網(wǎng)址分享:http://muchs.cn/article4/ihjeoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計網(wǎng)站制作、微信公眾號網(wǎng)站收錄、營銷型網(wǎng)站建設(shè)、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作