作者 | 徐進(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è)計(jì)架構(gòu)。和 DevOps 概念提倡的是通過一系列工具和自動(dòng)化的技術(shù)來降低運(yùn)維的難度,促進(jìn)研發(fā)運(yùn)維一體化不同, Serverless 更像是一種 NoOps,即通過“不用做”的方式來解決“如何更高效做”的問題。
DevOps 是一組用于促進(jìn)開發(fā)和運(yùn)維人員之間協(xié)作的過程、方法和系統(tǒng)的統(tǒng)稱。
DevOps 提倡通過一系列的技術(shù)和工具降低開發(fā)和運(yùn)維人員之間的隔閡,實(shí)現(xiàn)從開發(fā)到最終部署的全流程自動(dòng)化,從而達(dá)到開發(fā)運(yùn)維一體化。通過將 DevOps 的理念引入到整個(gè)系統(tǒng)的開發(fā)過程中,能夠顯著提升軟件的開發(fā)效率,縮短軟件交付的周期,更加適應(yīng)當(dāng)今快速發(fā)展的互聯(lián)網(wǎng)時(shí)代。
說到 DevOps ,就必然會提到持續(xù)集成。持續(xù)集成指的是在軟件開發(fā)過程中,軟件開發(fā)人員持續(xù)不斷地將開發(fā)出來的代碼和其他的開發(fā)人員的代碼進(jìn)行合并,每次合并后自動(dòng)地進(jìn)行編譯、構(gòu)建,并運(yùn)行自動(dòng)化測試進(jìn)行驗(yàn)證,而不是等到最后各自開發(fā)完成后才合并在一起。
持續(xù)集成能從根本上提高一個(gè)團(tuán)隊(duì)的軟件開發(fā)效率。在軟件開發(fā)過程中引入持續(xù)集成,可以幫助團(tuán)隊(duì)及時(shí)的發(fā)現(xiàn)系統(tǒng)中的問題,并快速做出修復(fù),不僅可以縮短軟件開發(fā)的時(shí)間,而且可以交付更具質(zhì)量的系統(tǒng)。
一個(gè) DevOps 開發(fā)環(huán)境需要滿足以下 8 點(diǎn)需求。
環(huán)境一致性:在本地開發(fā)出來的功能,無論在什么環(huán)境下部署都應(yīng)該能得到一致的結(jié)果;
代碼自動(dòng)檢查:為了盡早發(fā)現(xiàn)問題,每一次代碼提交后,系統(tǒng)都應(yīng)該自動(dòng)對代碼進(jìn)行檢查,及早發(fā)現(xiàn)潛在的問題,并運(yùn)行自動(dòng)化測試;
持續(xù)集成:每次代碼提交后系統(tǒng)可以自動(dòng)進(jìn)行代碼的編譯和打包,無需運(yùn)維人員手動(dòng)進(jìn)行;
持續(xù)部署:代碼集成完畢后,系統(tǒng)可以自動(dòng)將運(yùn)行環(huán)境中的舊版本應(yīng)用更新成新版本的應(yīng)用并且整個(gè)過程中不會讓系統(tǒng)不可用;
持續(xù)反饋:在代碼自動(dòng)檢查、持續(xù)集成、持續(xù)部署的過程中,一旦出現(xiàn)問題,要能及時(shí)將問題反饋給開發(fā)人員以及運(yùn)維人員。開發(fā)和運(yùn)維人員收到反饋后對問題及時(shí)進(jìn)行修復(fù);
快速回滾:當(dāng)發(fā)現(xiàn)本次部署的版本出現(xiàn)問題時(shí),系統(tǒng)應(yīng)能快速回退到上一個(gè)可用版本;
彈性伸縮:當(dāng)某個(gè)服務(wù)訪問量增大時(shí),系統(tǒng)應(yīng)可以對這個(gè)服務(wù)快速進(jìn)行擴(kuò)容,保證用戶的訪問。當(dāng)訪問量回歸正常時(shí),系統(tǒng)能將擴(kuò)容的資源釋放回去,實(shí)現(xiàn)根據(jù)訪問情況對系統(tǒng)進(jìn)行彈性伸縮;
為了滿足以上 8 點(diǎn)要求,設(shè)計(jì)出的 DevOps 開發(fā)環(huán)境如下圖所示。
整個(gè)環(huán)境主要由 6 部分組成:
整個(gè)環(huán)境的運(yùn)行流程主要分為以下 6 步:
開發(fā)人員在本地開發(fā)并驗(yàn)證好功能后,將代碼提交到代碼倉庫;
通過事先配置好的 Webhook 通知方式,當(dāng)開發(fā)人員提交完代碼后,部署在云端的持續(xù)集成工具 Jenkins 會實(shí)時(shí)感知,并從代碼倉庫中獲取最新的代碼;
獲取到最新代碼后,Jenkins 會啟動(dòng)測試平臺 SonarQube 對最新的代碼進(jìn)行代碼檢查以及執(zhí)行單元測試,執(zhí)行完成后在 SonarQube 平臺上生成測試報(bào)告。如果測試沒通過,則以郵件的方式通知研發(fā)人員進(jìn)行修改,終止整個(gè)流程。若測試通過,將結(jié)果反饋給 Jenkins 并進(jìn)行下一步;
代碼檢查以及單元測試通過后, Jenkins 會將代碼發(fā)送到持續(xù)集成服務(wù)器中,在服務(wù)器上對代碼進(jìn)行編譯、構(gòu)建然后打包成能在容器環(huán)境上運(yùn)行的鏡像文件。如果中間有步驟出現(xiàn)問題,則通過郵件的方式通知開發(fā)人員和運(yùn)維人員進(jìn)行處理,并終止整個(gè)流程;
將鏡像文件上傳到私有鏡像倉庫 Harbor 中保存;
通過上述幾步,我們就可以簡單實(shí)現(xiàn)一個(gè) DevOps 開發(fā)環(huán)境,實(shí)現(xiàn)代碼從提交到最終部署的全流程自動(dòng)化。
但是自從 2014 年 AWS 發(fā)布 ASW Lambda 以來, Serverless 的概念開始逐漸火熱起來。各大云廠商開始紛紛開始推出各自的 Serverless 產(chǎn)品,如 Google 的 Cloud Functions ,阿里云的函數(shù)計(jì)算、Serverless應(yīng)用引擎(SAE)等等。究竟什么是Serverless 無服務(wù)計(jì)算呢?
什么是 Serverless?
根據(jù) CNCF (云原生計(jì)算基金會)發(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ù)器計(jì)算并不意味著我們不再需要使用服務(wù)器來運(yùn)行代碼,代碼仍需要運(yùn)行在服務(wù)器上對外提供服務(wù)。
在無服務(wù)計(jì)算時(shí)代,研發(fā)人員無需對服務(wù)器進(jìn)行監(jiān)控、配置、更新、擴(kuò)容等運(yùn)維操作。只需要將代碼上傳到云廠商提供的無服務(wù)器計(jì)算平臺上即可,云廠商會保證代碼能正常運(yùn)行,當(dāng)流量突增時(shí),自動(dòng)對服務(wù)器進(jìn)行擴(kuò)容,流量減少時(shí),對服務(wù)器進(jìn)行縮容。
cdn.com/348b57cb1560dbb47e617afe1f0dd55e592a0e80.png">
這些運(yùn)維操作對研發(fā)人員來說都是黑盒的,會將開發(fā)人員從繁瑣的運(yùn)維工作中解放出來,只需要按運(yùn)行時(shí)長對資源進(jìn)行付費(fèi)即可。
和 DevOps 概念提倡的是通過一系列工具和自動(dòng)化的技術(shù)來降低運(yùn)維的難度,促進(jìn)研發(fā)運(yùn)維一體化不同, Serverless 更像是一種 NoOps,即通過“不用做”的方式來解決“如何更高效做”的問題。
Serverless 應(yīng)用引擎是面向應(yīng)用的 Serverless PaaS 平臺,它向上抽象了應(yīng)用的概念,支持 Spring Cloud、Apache Dubbo、HSF 等流行的開發(fā)框架,并通過 WAR 包、JAR 包和鏡像等多種方式部署應(yīng)用。它的使用可以通過下面這張圖來了解。
開發(fā)者在本地編寫代碼;
代碼開發(fā)完成后通過命令行工具 fcli、fun 或者可視化界面控制臺上傳到阿里云函數(shù)計(jì)算平臺;
開發(fā)者上傳完代碼后,平臺會自動(dòng)啟動(dòng)基于 Docker 的 DevOps 流程,對代碼進(jìn)行編譯、打包成鏡像文件。并上傳到鏡像倉庫;
開發(fā)者在平臺是配置事件觸發(fā)器,當(dāng)前阿里云已經(jīng)支持 OSS、HTTP、CDN、SLS、定時(shí)任務(wù)等多種形式的觸發(fā)器形式;
伯克利對 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ù)器計(jì)算平臺上運(yùn)行的代碼將會比傳統(tǒng)的方式更加安全可靠;
隨著無服務(wù)器計(jì)算收費(fèi)模式的不斷發(fā)展,幾乎任何應(yīng)用遷移到無服務(wù)器計(jì)算平臺都會比原先的有服務(wù)器計(jì)算的方式的成本更低;
有服務(wù)器計(jì)算在未來會促進(jìn) BaaS 的發(fā)展;
雖然現(xiàn)有的有服務(wù)器計(jì)算不會消失,但是隨著 Serverless r技術(shù)的不斷發(fā)展,有服務(wù)器計(jì)算在云上所占的比例會逐年下降;
當(dāng)前數(shù)據(jù)中心的資源利用率仍處于一個(gè)較低水平,特別是對于在線業(yè)務(wù)而言,日均資源使用率僅在 10% 左右,主要是由于當(dāng)今資源都是屬于獨(dú)享型的,不管你用不用,這些資源都需要保留。
一旦大規(guī)模使用 Serverless 之后,資源的使用由平臺統(tǒng)一調(diào)度,按需使用,整體的資源利用率會大幅提升,整個(gè)云計(jì)算資源的使用成本無疑也會大幅降低。
隨著 Serverless 的不斷發(fā)展,未來編程方式將會有很大的不同。無論是從成本的角度還是使用的角度,我們有理由相信下一個(gè)時(shí)代是 Serverless 的時(shí)代,并應(yīng)該朝著這個(gè)方向不斷探索。
作者簡介:徐進(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://www.rwnh.cn/article4/ihjeoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、網(wǎng)站制作、微信公眾號、網(wǎng)站收錄、營銷型網(wǎng)站建設(shè)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)