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