部署包含兩個(gè)相關(guān)聯(lián)的概念:流程和架構(gòu)
部署流程包括一些由開發(fā)人員和運(yùn)維人員執(zhí)行的步驟,以便將軟件投入到生產(chǎn)環(huán)境。
部署架構(gòu),定義了該軟件運(yùn)行的環(huán)境結(jié)構(gòu)。
四種部署選項(xiàng):
- 使用編程語言特定的發(fā)布包格式部署服務(wù),例如JAVA JAR或者WAR文件。
- 將服務(wù)部署為虛擬機(jī),把服務(wù)打包為虛擬機(jī)鏡像
- 將服務(wù)部署為容器
- 使用Serverless部署模式部署服務(wù)。
使用編程語言特定的發(fā)布包格式部署服務(wù)
好處是快速高效;高效的利用資源,一臺(tái)機(jī)器上,可以運(yùn)行多個(gè)實(shí)例
弊端是:
- 缺乏對(duì)技術(shù)棧的封裝,運(yùn)維團(tuán)隊(duì)需要了解每個(gè)服務(wù)的細(xì)節(jié),以準(zhǔn)備對(duì)應(yīng)的環(huán)境和web容器。
- 無法約束服務(wù)實(shí)例消耗的資源
- 同一臺(tái)服務(wù)器上運(yùn)行多個(gè)服務(wù)實(shí)例,缺乏隔離
將服務(wù)部署為虛擬機(jī)
將作為虛擬機(jī)鏡像打包的服務(wù)部署到生產(chǎn)環(huán)境中,每個(gè)服務(wù)實(shí)例都是一個(gè)虛擬機(jī)。
好處:
- 封裝了技術(shù)棧
- 隔離的服務(wù)實(shí)例
弊端:
- 資源利用率較低
- 部署速度較慢。構(gòu)建鏡像,從鏡像實(shí)例化虛擬機(jī)都比較耗時(shí)
- 系統(tǒng)管理的額外開銷。需要負(fù)責(zé)更新鏡像的操作系統(tǒng)和運(yùn)行時(shí)打補(bǔ)丁
將服務(wù)部署為容器
在構(gòu)建時(shí),部署流水線使用容器鏡像構(gòu)建工具,該工具讀取服務(wù)代碼和鏡像描述,以創(chuàng)建容器鏡像并將其存儲(chǔ)在鏡像倉庫中。在運(yùn)行時(shí),從個(gè)景象倉庫中拉取容器鏡像,并用于創(chuàng)建容器。
好處是:
- 封裝技術(shù)棧
- 服務(wù)實(shí)例是隔離的。
- 服務(wù)實(shí)例的資源收到限制
弊端,還是需要負(fù)責(zé)更新鏡像的操作系統(tǒng)和運(yùn)行時(shí)打補(bǔ)丁
Serverless部署
之前的三種部署方式,
- 都會(huì)存在資源浪費(fèi)的情況,例如即使處于閑置狀態(tài),也需要為容器和虛擬機(jī)付費(fèi)
2.需要負(fù)責(zé)系統(tǒng)管理,必須承擔(dān)操作系統(tǒng)和軟件打補(bǔ)丁的工作
Serverless提供一種受約束的編程模型,以換取最小化的系統(tǒng)管理開銷。如果需要更加精細(xì)化的管理基礎(chǔ)設(shè)施,那么就不要選擇Serverless
以AWS Lambda為例,只需要將應(yīng)用程序打包為ZIP或者JAR文件,上載到AWS Lamdba,并指定相應(yīng)請(qǐng)求的函數(shù)名稱。AWS Lambda會(huì)自動(dòng)運(yùn)行你的微服務(wù)實(shí)例來影響請(qǐng)求,只需要為所花費(fèi)的時(shí)間和消耗的內(nèi)存付費(fèi)。
好處:
- 消除系統(tǒng)管理任務(wù)
- 彈性,不需要預(yù)測負(fù)載,而判斷實(shí)例數(shù)量。AWS Lamdba會(huì)幫忙處理。
- 基于使用情況定價(jià)
弊端:
- 長尾延遲。AWS需要花費(fèi)時(shí)間來配置應(yīng)用程序?qū)嵗蛦?dòng)應(yīng)用程序,可能導(dǎo)致某些請(qǐng)求具有高延遲。
- 基于有限事件與請(qǐng)求的編程模型。不適應(yīng)長時(shí)間運(yùn)行的服務(wù),例如消息代理服務(wù)。