為 AWS 專家量身打造的 Google Cloud Platform:運算

更新日期:2017 年 11 月 21 日

Amazon Web Services (AWS) 和 Google Cloud Platform (GCP) 在各自的雲端環境提供運算服務,而下列將會比較這些服務。運算服務通常根據下列四種服務模型來提供:

  • 基礎架構式服務 (IaaS):在此模型中,使用者可依需求直接存取虛擬機器和一整套相關服務來自動化處理一般工作。
  • 平台式服務 (PaaS):在此模型中,機器層級會完全抽離,使用者使用高階服務和 API 與資源互動。
  • 函式式服務 (FaaS):這是一種無伺服器運算模型,可讓您執行個別函式來回應各種觸發條件。
  • 容器式服務 (CaaS):在此模型中會抽離機器層級並混合使用 IaaS/PaaS,但仍保有 IaaS 模型的多數彈性。

本文將著重說明 GCP 和 AWS 提供的 IaaS、PaaS、FaaS 和 CaaS 服務。

IaaS 比較

對於 IaaS,AWS 提供 Amazon Elastic Compute Cloud (EC2),而 GCP 提供 Compute Engine。Google 與 Amazon 對 IaaS 服務採用類似的方法。Amazon EC2 與 Compute Engine 具有以下特性:

  • 是雲端環境的基礎元件。
  • 可用來在平台上執行幾乎所有類型的客戶工作負載。

整體來說,Amazon EC2 的用語和概念與 Compute Engine 相對應:

功能 Amazon EC2 Compute Engine
虛擬機器 執行個體 執行個體
機器映像檔 Amazon 機器映像檔 映像檔
暫時虛擬機器 Spot 執行個體 先佔 VM
防火牆 安全性群組 Compute Engine 防火牆規則
自動進行執行個體資源調度 自動調整資源配置 Compute Engine 自動配置器
本機連接的磁碟 暫時磁碟 本機 SSD
VM 匯入 支援的格式:RAW、OVA、VMDK 與 VHD 支援的格式:RAW
部署位置 區域 區域

虛擬機器執行個體

Compute Engine 與 Amazon EC2 虛擬機器執行個體共用許多相同功能。在這兩項服務上,您可以:

  • 從儲存的磁碟映像檔建立執行個體。
  • 依需求啟動和終止執行個體。
  • 可在不受任何限制的情況下管理執行個體。
  • 標記執行個體。
  • 在執行個體上安裝各種可用的作業系統。

機器存取

Compute Engine 與 Amazon EC2 會採用略微不同的方式來處理機器存取:

  • 如果您希望透過終端機存取執行個體,Amazon EC2 會要求您包含自己的安全殼層 (SSH) 金鑰組。
  • Compute Engine 可以讓您在需要時建立金鑰,即使執行個體正在執行也可以。
  • 您可以使用 Google Cloud Platform 主控台提供的 Compute Engine 瀏覽器式 SSH 終端機,而不需要在本機電腦上儲存金鑰。

執行個體類型

Amazon EC2 和 Compute Engine 均會提供各種預先定義的執行個體設定,並搭配特定數量的虛擬 CPU、RAM 和網路。

  • Amazon EC2 把這些設定稱為執行個體類型
  • Compute Engine 將這些設定稱為機器類型
  • Compute Engine 可以讓您自訂執行個體的 CPU 與 RAM 以符合您的工作負載,而不使用預先定義的設定。

預先定義的執行個體可以按預訂用途大致分類,如下表所述:

機器類型 說明
共用核心

在單一實體 CPU 的一部分上執行的機器。

適合不需要大量資源,但需要長期保持在線上的工作。

標準

提供運算、網路與記憶體資源平衡的機器。

適合無特定資源需求的大部分一般應用程式。

高記憶體

記憶體對 vCPU 比高於標準的機器。

適合對運算能力要求不高的記憶體密集型應用程式。 一些範例包括高效能資料庫應用程式、必須保持大量資料快取的應用程式,以及大型資料驅動應用程式,例如企業管理系統。

高 CPU

vCPU 對記憶體比高於標準的機器。

適合沒有特別高記憶體需求的運算密集型應用程式。一些範例包括資料轉換軟體 (例如影片編碼)、科學與工程模擬軟體及高流量網路伺服器。

GPU

內含獨立圖形處理器 (GPU) 的機器。

適合需要高數學處理能力的應用程式。典型範例有機器學習,但有其他許多工作因進階數學處理 GPU 提供的增強效率而獲益。

SSD 儲存空間

具有本機固態硬碟 (SSD) 儲存空間的機器。

適合依賴儲存空間高總處理量的應用程式。 SSD 儲存空間可以提供比磁性儲存空間更快的資料存取速度。

密集儲存空間

內含高容量磁性媒體儲存空間的機器。

適合在本機磁碟保存大量資料的應用程式。在許多情況下,儲存需求較大的應用程式可在其他網路服務中儲存資料,而不用在連接 VM 的磁碟上儲存資料。

下表列出截至 2016 年 5 月為止,兩種服務的執行個體類型。

機器類型 Elastic Compute Cloud Compute Engine
共用核心 t2.micro - t2.large f1-micro
g1-small
標準 m3.medium - m3.2xlarge
m4.large - m4.10xlarge
n1-standard-1 - n1-standard-64
高記憶體 r3.large - r3.8xlarge
x1.32xlarge
n1-highmem-2 - n1-highmem-64
高 CPU c3.large - c3.8xlarge
c4.large - c4.8xlarge
n1-highcpu-2 - n1-highcpu-64
GPU g2.2xlarge
g2.8xlarge
將 GPU 新增至大多數機器類型
SSD 儲存空間 i2.xlarge - i2.8xlarge n1-standard-1 - n1-standard-64
n1-highmem-2 - n1-highmem-64
n1-highcpu-2 - n1-highcpu-64*
密集儲存空間 d2.xlarge - d2.8xlarge 不適用

* 雖然 Compute Engine 不提供與這些 AWS 執行個體類型完全相符的機器類型,將 SSD 本機儲存空間連接到其他機器類型也可以達成相同的目標。

Compute Engine 與 AWS 共用數種高階系列的執行個體類型,包括標準、高記憶體、高 CPU 與共用核心。但是,Compute Engine 並沒有使用本機 SSD 儲存空間的特定執行個體類型,所有 Compute Engine 的非共用執行個體類型都支援新增本機 SSD 磁碟。如需更詳細地比較每種環境實作本機連接 SSD 的方式,請參閱本機連接的儲存空間一文。

Compute Engine 目前不提供大型磁性儲存空間。

暫時執行個體

暫時執行個體是一種在資源備用週期執行的虛擬機器,這些資源備用週期會分配給其他程序,因此會產生無法預測是否可用的 VM,價格低於使用專用資源建立的 VM。暫時執行個體適用於以下情形:

  • 可以中斷而不會失去進度的工作。
  • 優先順序較低,且不需要在特定時間範圍之內完成的工作。
  • 額外的工作資源,可因運算能力的增強而受益。例如,影片處理。

Amazon EC2 提供的暫時執行個體稱為 Spot 執行個體,Compute Engine 提供的類似執行個體稱為先佔 VM。這兩者的功能類似,但計費模式不同。

Spot 執行個體與先佔 VM 都具有以下特性:

  • 與一般的隨選執行個體相比,只能使用一組較小的可用執行個體類型與機器映像檔。
  • 執行時的效能能夠達到隨選執行個體的水準。
  • 執行時完全可控。

Amazon EC2 Spot 執行個體有兩種變化:

  • 定期 Spot 執行個體
    • 在 Spot Market 上競標。
    • 於得標時啟動。
    • 在您終止執行個體,或 AWS 中斷執行個體之前保持有效。
  • Spot 區塊
    • 低於定期、隨選費率的固定價格。
    • 折扣費率僅限最多六小時。

Compute Engine 先佔 VM 與 Spot 執行個體的差異如下:

  • 價格固定。根據機器類型而定,先佔 VM 的價格折扣幾乎可達隨選費率的 80%。
  • 若未由 Compute Engine 回收,先佔 VM 最長會執行 24 小時,然後自動終止。
  • 如果您以授權費使用付費作業系統,使用該先佔 VM 時,系統會向您收取完整的授權費用。

機器映像檔

Compute Engine 與 Amazon EC2 都使用機器映像檔來建立新執行個體。Amazon 將這些映像檔稱為 Amazon 機器映像檔 (AMI),Compute Engine 則簡單地將其稱呼為映像檔。

Amazon EC2 與 Compute Engine 非常類似,您可以在兩個平台上建立映像檔時使用相同的工作流程。例如,Amazon EC2 AMI 與 Compute Engine 映像檔都包含作業系統,也可能包含其他軟體,例如網路伺服器或資料庫。此外,這兩種服務都允許您使用第三方廠商發佈的映像檔,或建立供私人使用的自訂映像檔。

Amazon EC2 與 Compute Engine 會以不同的方式儲存映像檔。在 AWS,您會將映像檔儲存在  Amazon Simple Storage Service (S3) 或 Amazon Elastic Block Store (EBS) 中。如果您根據儲存在 Amazon S3 的映像檔建立執行個體,將會在建立程序時遇到比 Amazon EBS 更長的延遲時間。

在 GCP,映像檔儲存在 Compute Engine 中。如要查看可用映像檔或是建立或匯入映像檔,請造訪 Cloud Console「Images」(映像檔) 頁面,或在 gcloud 中使用 gcloud 指令列工具。

與 Amazon EC2 不同,Compute Engine 沒有公開發佈映像檔的機制,也沒有社群存放區可以從中取出映像檔。但是,您可將映像檔匯出至 Cloud Storage,並公開提供使用,藉以非正式地共用映像檔。

Amazon 的機器映像檔僅供特定地區使用。相對之下,Compute Engine 的機器映像檔則可提供全域使用。

公開映像檔

Amazon EC2 與 Compute Engine 都提供各種公開映像檔,其中包含常用的作業系統。如果您在這兩種平台上選擇安裝的付費映像檔含有需要授權的作業系統,則除了一般的執行個體費用外,您還必須支付授權費。

您可以在這兩種平台上存取大多數常用作業系統的機器映像檔。如需 Compute Engine 的可用映像檔完整清單,請參閱公開映像檔清單

對於在 Compute Engine 上並未公開提供映像檔的一些作業系統映像檔,Amazon EC2 提供了支援:

  • Amazon Linux
  • Windows Server 2003 (進階版)
  • Oracle Linux (進階版)

匯入自訂映像檔

Amazon EC2 和 Compute Engine 均會提供將現有的機器映像檔匯入其環境的方法。

Amazon EC2 提供的服務稱為 VM Import/Export。 這項服務支援一些虛擬機器映像檔類型,例如 RAW、OVA、VMDK 與 VHD,另外也支援一些作業系統,包括各種版本的 Windows、Red Hat Enterprise Linux (RHEL)、CentOS、Ubuntu 與 Debian。如要匯入虛擬機器,您可以使用指令列工具建立虛擬機器映像檔套件,並上傳至 Amazon Simple Storage Service (S3) 成為 AMI。

同樣的,Compute Engine 也能讓您匯入虛擬機器映像檔。此程序可以讓您從幾乎任何平台匯入 RAW 映像檔。例如,您可將 AMI 或 VirtualBox VDI 檔案轉換成 RAW 格式,然後匯入至 Compute Engine。匯入程序與 Amazon 的程序類似,但自動化的程度較低。儘管這個程序比 VM Import/Export 需要更多的手動介入,但優點是有更大的彈性。轉換映像檔之後,您可將映像檔上傳至 Cloud Storage,然後 Compute Engine 會複製映像檔供私人使用。如要進一步瞭解如何將現有映像檔匯入 Compute Engine,請參閱匯入現有映像檔一文。

如果您建立了自己的自訂作業統,並且打算在 Compute Engine 上執行,請確保其符合自訂映像檔的硬體支援和核心需求條件

除了在 Amazon S3 或 Cloud Storage 中儲存映像檔的費用以外,AWS 與 GCP 都不對各自的匯入服務收費。

自動進行執行個體資源調度

Compute Engine 和 Amazon EC2 都支援自動調度資源,亦即會依據使用者定義的政策來建立和移除執行個體。自動調度資源可用於在任何時間點維持特定數量的執行個體,或是為了回應特定條件而調整容量。自動調度資源執行個體都是採用使用者定義的範本建立。

Compute Engine 和 Amazon EC2 會以類似方式實作自動調度資源,如下所示:

  • Amazon 的 Auto Scaling 可調整群組中的執行個體資源。自動配置器會根據您選擇的資源調度計劃建立及移除執行個體。 該群組中每個新的執行個體都是從啟動設定建立。
  • Compute Engine 的自動配置器會在代管執行個體群組中調度執行個體資源。自動配置器會根據自動調度資源政策建立和移除執行個體。該執行個體群組中每個新的執行個體都是採用執行個體範本建立。

Amazon 的 Auto Scaling 允許三種資源調度方案:

  • 手動,您可以手動命令 Auto Scaling 擴充或縮減。
  • 已排定時間,您可以設定 Auto Scaling 在排定的時間擴充或縮減。
  • 動態,Auto Scaling 可根據政策調度資源。您可以根據 Amazon CloudWatch 指標或 Amazon Simple Queue Service (SQS) 佇列建立政策。

相對之下,Compute Engine 的自動配置器僅支援動態資源調度。您可以根據平均 CPU 使用率HTTP 負載平衡服務規模Stackdriver Monitoring 指標來建立政策。

內部網路

Compute Engine 與 Amazon EC2 的新執行個體都會自動連接到預設內部網路。此外,您可以建立替代網路,並將執行個體啟動到兩項服務的該網路中。如需完整比較 GCP 網路與 AWS 網路,請參閱網路一文。

防火牆

Amazon 和 Compute Engine 都可讓使用者設定防火牆政策,以選擇性地允許及拒絕虛擬機器執行個體的流量。根據預設,兩項服務都會封鎖網路外部的連入流量,使用者必須設定防火牆規則,封包才能抵達執行個體。

Amazon EC2 與 Amazon Virtual Private Cloud (VPC,虛擬私人雲端) 使用安全性群組網路存取控制清單 (NACL) 來允許或拒絕連入與外送流量。Amazon EC2 安全性群組會保護 Amazon EC2-Classic 中執行個體的安全,而 Amazon VPC 安全性群組與 NACL 會保護 Amazon VPC 中執行個體與網路子網路的安全。

Compute Engine 使用防火牆規則保護 Compute Engine 虛擬機器執行個體與網路的安全。您可指定來源 IP 位址範圍、通訊協定、通訊埠或使用者定義的標記來建立規則,這些項目代表虛擬機器執行個體的來源與目標群組。

區塊儲存空間

Amazon EC2 和 Compute Engine 都支援網路及本機連接區塊儲存空間。如需進一步瞭解兩者的區塊儲存空間服務詳細比較內容,請參閱區塊儲存空間一文。

費用

本節會比較 Compute Engine 和 Amazon EC2 的計費模式。

以量計價

Compute Engine 和 Amazon EC2 針對執行中執行個體採用的以量計價模式很類似:

  • Amazon EC2 按秒計費,最短計費週期為一分鐘。例如 Windows 或 RHEL 等付費作業系統按小時計費,四捨五入進位至小時。
  • Compute Engine 按分鐘計費,最少會收取十分鐘的使用費。

這兩種服務均可讓您無限期執行執行個體。

折扣優惠

Compute Engine 和 Amazon EC2 的折扣優惠方式不同。

您可以佈建預留執行個體,取得 Amazon EC2 的折扣價:

  • 您必須承諾租用特定數量的執行個體,簽訂一年或三年的合約。
  • 您將會以較低的價格取得這些執行個體。
  • 三年合約的折扣大於一年合約。
  • 預繳的費用越高,就能享受越大的折扣。
  • 預留執行個體方案在購買時需搭配特定執行個體類型與供應區域。
  • 只有在同一個系列中有不同執行個體類型的情況下,才能切換供應區域及交換預留執行個體。

您可以獲得 Compute Engine 執行個體的續用折扣

  • Compute Engine 會依據執行個體在某個月中的執行時間長短,自動將折扣套用到執行個體。
  • 在該月中使用執行個體的時間越長,獲得的折扣也越多。
  • 相較於標準的隨選費率,續用折扣最多可讓您省下 30% 的費用。

FaaS 比較

針對 FaaS (函式即服務),Amazon 提供 AWS Lambda,GCP 提供 Cloud Functions。這些服務具有類似的服務模式:

  • 這些服務都是無伺服器運算平台,可讓您執行個別函式來回應各種觸發條件。
  • 系統只會在您的函式執行時才向您收費。
  • 這些服務提供一種經濟實惠的方式,以不平均的使用模式來託管服務。

服務模式比較

AWS Lambda 和 Cloud Functions 兩者對應的用語和概念如下:

功能 AWS Lambda Cloud Functions
程式碼擷取 Zip 上傳線上 IDE、桌面 IDEAmazon S3 Zip 上傳、線上 IDE、Cloud Storage、GitHub
程式碼更新延遲時間 通常在幾秒之內完成 通常在 2 分鐘之內完成
並行執行數上限 預設每個地區 1,000 個 預設每個函式 1,000 個
部署作業大小上限 壓縮後為 50 MB,壓縮前為 250 MB        壓縮後為 100 MB,壓縮前為 500 MB       
觸發條件 S3DynamoDB、Kinesis StreamsFirehoseSNSSESCognitoCloudFormationCloudWatchCodeCommit排定的事件AWS 設定變更Amazon EchoAmazon LexAPI Gateway (HTTP)IoT ButtonCloudFront HTTPCloud StorageCloud Pub/SubFirebaseStackdriver Logging
支援的語言 Node.js、Java、Python、C#、Go Node.js 6Node.js 8Python
記憶體分配 128 MB 至 1.5GB,以 64 MB 累加 128 MB、256 MB、512 MB、1 GB、2 GB
逾時限制 1 秒至 5 分鐘 1 秒至 9 分鐘
版本設定 內建 透過 Cloud Source Repositories
自動調整資源配置
記錄 Amazon CloudWatch Stackdriver Logging
部署位置 地區 地區
定價模式 依要求、以 0.1 秒累加的時間長度,及資料移轉量。時間長度費用隨記憶體用量調整。 依要求、以 0.1 秒累加的時間長度,及資料移轉量。時間長度費用隨記憶體用量調整。

啟動與資源調度

AWS Lambda 與 Cloud Functions 有一些相同的功能。這兩者都提供無伺服器程式碼執行功能以及一些觸發條件,而且這兩者都會在有需要時自動調度資源。這兩者都提供簡單的部署、資源調度及錯誤復原功能。架構會使用您的程式碼複本啟動運算容器,並自動調度執行個體數目資源,藉以處理您的要求負載。不需要設定或管理,即可在部署函式之後調度資源。

Google 使用先佔映像檔產生架構,可顯著減少任何新執行個體的首批要求延遲時間。對於即時應用程式或必須以極快速度調度應用程式資源的解決方案而言,這種方式可能很有幫助。

支援的語言與觸發條件

Lambda 的推出時間比 Cloud Functions 久,因此支援更多的語言與觸發條件類型。Cloud Functions 支援 Firebase 觸發條件、Stackdriver 記錄與 Cloud Pub/Sub。您可以使用這些工具從其他幾乎任何 GCP 服務或事件觸發 Cloud 函式。

執行階段限制

由於 FaaS 平台專門設計為按要求的純交易式部署執行個體,因此您不可依賴這些平台來持續執行超出初始要求之外的程式碼。您應將應用程式設計為無狀態及短時間執行。此情況同時適用於 Lambda 與 Cloud Functions:

  • AWS 會在 5 分鐘之後終止執行。
  • Cloud Functions 會在 9 分鐘之後終止執行。

部署 FaaS

Amazon 與 Google 在部署 FaaS 方面採用稍微不同的方法。AWS Lambda 支援從 zip 或 jar 檔案部署,或透過 CloudFormation 或 S3 部署。 除了 zip 檔案以外,GCP Cloud Functions 還可從 GitHub 或 Cloud Source Repositories 的 Git 存放區部署。 Git 支援緊密連結了 Cloud Functions 與您的部署程序。 您甚至可以根據 Webhook 設定自動更新

費用

AWS Lambda 的收費項目包含每次要求的基本費率加上以 RAM 分配及運算時間為基礎的變化費率。AWS Lambda 會按標準 EC2 費率估算資料移轉的帳單金額。

除了叫用頻率以外,Cloud Functions 會根據佈建的記憶體與 CPU 數量收取變化費率費用。與 AWS Lambda 一樣,Cloud Functions 也會針對輸出頻寬收取標準費用,而且不會收取輸入流量費用。

詳情請參閱 Cloud Functions 定價頁面。如要估計特定工作負載的價格,請嘗試使用 GCP Pricing Calculator

PaaS 比較

針對 PaaS,AWS 提供 AWS Elastic Beanstalk,GCP 提供 App Engine。 這兩項服務都提供類似的功能:

  • 您可以將程式碼推送至代管平台服務來發佈應用程式。
  • 服務管理以下項目:
    • 基礎架構。
    • 自動調整資源配置。
    • 應用程式版本控制。

服務模式比較

AWS Elastic Beanstalk 會設定及部署一組基礎 AWS 資源,例如 Amazon EC2 執行個體或 Amazon RDS 資料庫,以根據您的輸入設定,為應用程式建立適當的執行階段。

App Engine 也採用相同的模式。但是,App Engine 提供兩種不同的環境:App Engine 標準環境與 App Engine 彈性環境,這兩種環境都是針對特定用途進行設計。

  • App Engine 標準環境中,您的程式碼會部署到在 Google 基礎架構上執行的容器執行個體。由於 App Engine 標準環境不依賴基礎 Compute Engine VM 執行個體,因此資源調度的速度比 App Engine 彈性環境快。但是,App Engine 標準環境的自訂選項所受到的限制比 App Engine 彈性環境受到的限制多,而且您必須從服務預先定義的一組執行階段環境中使用執行階段環境。
  • App Engine 彈性環境中,您的程式碼會部署到在 Compute Engine VM 執行個體上執行的 Docker 容器,且這些容器都由 App Engine 代管。與使用 App Engine 標準環境相比,您可以選擇較大的支援執行階段清單,而且您可以建立部分或完整的自訂執行階段。但是,在高流量尖峰時段,應用程式的資源調度速度可能比在 App Engine 標準環境時要慢。如要確認哪一個 App Engine 環境最適合您,請參閱選擇 App Engine 環境一文。

Elastic Beanstalk 可與下列服務整合:

  • Amazon DynamoDB:可儲存及擷取任何資料量的全代管 NoSQL 資料庫。
  • Amazon RDS:由 MySQL、PostgreSQL、MariaDB、Amazon Aurora、Oracle、Microsoft SQL Server 技術提供的代管關聯資料庫服務。
  • 自動調整資源配置及負載平衡。
  • 與 SQS 整合的工作站層環境允許處理背景與定期工作。
  • 與其他 AWS 服務和 API 整合。

這兩種 App Engine 環境都能使用一組相同的平台服務,例如:

  • Cloud Firestore:具有查詢、排序及交易功能的永久儲存空間。
  • Cloud SQL:由 MySQL 或 PostgreSQL 技術提供的關聯資料庫 (目前仍處於 Beta 測試階段)。
  • 自動調整資源配置及負載平衡。
  • 在要求範圍之外執行工作的非同步工作佇列。
  • 在特定時間或以固定間隔觸發事件的排定工作。
  • 與其他 Google Cloud Platform 服務和 API 整合。

重要元件

AWS Elastic Beanstalk 與 App Engine 均可在一組類似的重要元件上操作。從開發人員的觀點來看,AWS Elastic Beanstalk 包含下列重要元件:

  • 應用程式版本:針對開發人員提交的可部署程式碼的已命名/已加標籤疊代作業。
  • 環境:在 AWS 資源上部署的特定應用程式版本的執行中執行個體。
  • 環境設定:一組參數與設定,可控制 Elastic Beanstalk 針對與特定環境相關的特殊應用程式版本,部署及設定基礎 AWS 資源的方式。
  • 應用程式:一組環境、環境設定與應用程式版本的邏輯值區。

App Engine 包含下列重要元件:

  • 版本:由開發人員提交的可部署程式碼的已命名疊代作業,以及指定如何在 App Engine 部署此程式碼以建立服務的設定檔。
  • 服務:App Engine 應用程式由一或多項服務組成,可設定為使用不同的執行階段,以及使用不同的效能設定運作。每項服務都包含原始碼與設定檔。
  • 服務設定檔:指定網址路徑如何對應到要求處理常式和靜態檔案的檔案。這個檔案也包含了應用程式程式碼的相關資訊,例如應用程式 ID 及最新版的版本 ID。
  • 執行個體:執行服務所在的基礎運算資源。對於 App Engine 彈性環境而言,執行個體就是 Compute Engine VM 執行個體上的 Docker 容器。對於 App Engine 標準環境而言,執行個體就是在 Google 基礎架構上執行的容器。
  • 應用程式:包含一或多項服務的邏輯值區。這個值區可設定為使用不同的執行階段,以及使用不同的效能設定運作。

整體來說,平台效能的比較結果如下:

功能 AWS Elastic Beanstalk App Engine 標準環境 App Engine 彈性環境
支援的語言執行階段 Java、PHP、.NET、Node.js、Python (2.6、2.7、3.4)、Ruby、Go Python 2.7、Java 7、PHP 5.5、Go 1.6 Python (2.7、3.5)、Java 8、Node.js、Go 1.8、Ruby、PHP (5.6、7)、.NET
自訂執行階段
自動調度資源
免費版 有 (根據基礎 AWS 資源的免費版而定) 有 (每日 28 個執行個體時數)
儲存空間選項 Amazon S3、Amazon RDS、Amazon EFS、Amazon ElastiCache、Amazon DynamoDB Cloud Storage、Cloud SQL、Memcache、Cloud Firestore Cloud Storage、Cloud SQL、Memcache、Cloud Firestore
IAM 角色
服務地區 美國、歐洲、中東和非洲地區、亞太地區 美國、歐洲、中東和非洲地區、亞太地區 美國、歐洲、中東和非洲地區、亞太地區
應用程式使用者驗證與授權 無,必須在應用程式內開發 有,使用 Firebase (多個識別資訊提供者)、Google Cloud Identity、OAuth 2.0 與 OpenID 有,使用 Firebase (多個識別資訊提供者)、Google 與 G Suite 帳戶、OAuth 2.0 與 OpenID
工作與訊息佇列 有,使用 SQS 有,使用 Cloud Pub/Sub 與 Task Queue API 有,使用 Cloud Pub/Sub 與 Task Queue API
應用程式升級與 A/B 測試 根據後端容量使用資源調度進行輪動式更新,透過一次性流量更換進行藍/綠部署。可透過 DNS 方法進行加權循環配置資源。 有,透過版本之間拆分的精細流量 有,透過版本之間拆分的精細流量
監控 有,狀態回報、執行個體記錄與環境事件串流 有,使用 Stackdriver (要求/回應與活動記錄)、運作時間檢查 有,使用 Stackdriver (要求/回應與活動記錄)、運作時間檢查、基礎 Compute Engine 資源的自訂指標與快訊
網路 可放入虛擬私人雲端 無網路控制,只有 IP 端點向網際網路公開 可放入虛擬私人雲端網路
定價 視基礎 AWS 資源的費用而定 視所選的每小時執行個體數而定 定價由 3 個參數決定:
  • 每核心時數的 vCPU 數
  • 每 GB 時數的記憶體量
  • 每月每 GB 的永久磁碟數
偵錯 有,使用 X 光 有,使用 Stackdriver 有,使用 Stackdriver

自訂執行階段

AWS Elastic Beanstalk 與 App Engine 彈性環境都可讓您建立自己的自訂執行階段。這項功能可以讓您使用其他程式設計語言,或使用不同版本或實作平台的標準執行階段。

AWS Elastic Beanstalk 支援透過自訂平台進行自訂,這些平台是指 Amazon 機器映像檔 (AMI),其中包含執行應用程式所需的二進位檔。 您可以使用 Packer 建立自訂平台,這是從單一來源設定,為多平台建立相同機器映像檔的開放原始碼工具。您可以使用 Packer 設定範本自訂作業系統、語言與架構,也可以自訂提供應用程式所需的中繼資料與設定選項。

App Engine 彈性環境支援透過自訂執行階段進行自訂。如要建立自訂執行階段,請使用您選擇的基本映像檔建立 Dockerfile,然後新增 Docker 指令來建立您想要的執行階段環境。您的 Dockerfile 可能包含其他元件,例如語言翻譯程式或應用程式伺服器。您可以利用任何能夠服務 HTTP 要求的軟體。

在這兩種情況下,您都必須負責確保所有元件都相容,而且能夠符合預期的效能。

AWS Elastic Beanstalk 使用 Packer 並且允許使用者控制完整的 OS 映像檔。App Engine 彈性環境只建構 Docker 容器,讓使用者只控制應用程式程式碼及其相依項目。系統不允許 App Engine 彈性環境使用者控制例如基礎 VM 上的 OS 核心版本之類的項目。

自動調度資源

AWS Elastic Beanstalk 與 App Engine 都支援自動調度資源。 自動調度資源可以讓您根據應用程式的資源使用量,自動增減執行中後端執行個體的數目。

AWS Elastic Beanstalk 自動調度資源可以根據下列資源調度選項設定:

  • 「Launch Configuration」可讓您選擇資源調度觸發條件,並說明這些觸發條件的參數。
  • 「Manual scaling」可讓您設定執行個體計數上限與下限、供應區域與資源調度等待期。
  • 「Automatic scaling」可讓您設定指標參數。支援的觸發條件包括:網路傳入/傳出、CPU 使用率、磁碟讀取/寫入作業/位元組、延遲時間、要求計數、健康狀態良好/不良的主機計數。
  • 「Time-based Scaling」可讓您根據週期性或預定的一次性事件預測,縮小或放大執行個體的資源 (設定執行個體的上限、下限與/或所需數目)。

App Engine 標準環境提供下列資源調度選項:

  • 「Launch Configuration」(啟動設定) 可讓您挑選資源調度選項並說明參數。
  • 「Manual scaling」(手動資源調度) 可讓您設定要在一開始指派給服務的執行個體數量。
  • 「Basic scaling」(基本資源調度) 可讓您設定執行個體數目上限與閒置時間,超過這段時間之後,執行個體會在收到最後一個要求之後關閉。
  • 「Automatic scaling」(自動資源調度) 可讓您設定服務的執行個體數量、延遲時間與並行連線的最低與最高層級。

App Engine 彈性環境提供下列資源調度選項:

  • 「Launch Configuration」(啟動設定) 可讓您挑選資源調度選項並說明參數。
  • 「Manual scaling」(手動資源調度) 與在 App Engine 標準環境中運作的方式相同。
  • 「Automatic scaling」(自動資源調度) 可讓您設定執行個體數量的下限與上限、等待期與目標 CPU 使用率。

應用程式升級與 A/B 測試

您在 AWS Elastic Beanstalk 與 App Engine 中可以依循類似的步驟部署或升級應用程式:

  1. 在設定檔中說明您的應用程式。
  2. 使用指令列工具部署新版本。

這兩項服務也都透過管理主控台提供部署功能。

在 AWS Elastic Beanstalk,執行直接升級可能會導致應用程式短暫無法使用。如要避免停機時間,您可以執行藍/綠部署,透過這種部署方式,您會將新版本部署到單獨的環境中,然後交換環境網址。您只能為每個環境提供一個有效的版本。您可以透過 DNS 方法進行加權循環配置資源。

App Engine 可以讓您在不停機的情況下將更新導入目前版本,進而建立新版本並切換至新版本。您也可以設定使 App Engine 應用程式根據要求者的 IP 位址或 Cookie 拆分流量。您可為每個應用程式及每個服務提供一些版本。

偵錯

針對偵錯,AWS Elastic Beanstalk 主控台可以讓您在開發環境中對執行個體執行 AWS X-Ray Daemon。Daemon 會收集對伺服器發出之要求的相關資料,以及應用程式與其他服務協作的相關資料。您可以建構服務對應,協助您排解應用程式的問題,並找到最佳化的可能方式。

在 GCP,您可以使用 Stackdriver Debugger 在任何程式碼位置檢查 App Engine 應用程式的狀態,而無須使用記錄陳述式,也無須停止應用程式或減慢應用程式的速度。偵錯作業進行時不會影響使用者。您可以透過這款實作環境偵錯工具,擷取本機變數和呼叫堆疊,並將這些變數往回連結至原始碼中的特定行位置;也可以使用偵錯工具來分析應用程式的實作狀態,瞭解實際工作環境中的程式碼行為。

監控

在 AWS 管理主控台中,AWS Elastic Beanstalk 環境的監控包含一些基本指標,例如 CPU 使用率與網路傳入和傳出。Amazon CloudWatch 加入了 Environment Health,以及基礎執行個體適用的基本 EC2 監控指標。使用者也可為這裡的每個指標加入「鬧鐘」。所有 EC2 執行個體都會產生記錄,您可以使用這些記錄排解應用程式的問題。

在 Google Cloud Platform 主控台資訊主頁中,App Engine 應用程式的監控功能可讓您深入掌握一些參數,例如要求總數、CPU 與記憶體使用量、延遲時間與執行個體運作時間。Stackdriver 可以讓您為不同的參數建立快訊並儲存記錄。

網路

AWS Elastic Beanstalk 可以讓您管理環境使用的 AWS 資源連線。您可以提示 Elastic Beanstalk 將 EC2 VM 連接到特定虛擬私人雲端,並設定這些執行個體中的安全性群組。這樣可以讓 Elastic Beanstalk 應用程式達到與 App Engine 彈性環境類似的網路連線透明度。

App Engine 標準環境徹底捨棄了網路設定。您唯一需要處理的網路相關設定適用於應用程式外部位址的負載平衡與自訂網域名稱。 您也可以使用 dos.yaml 檔案建立網路「黑名單」來套用 DOS 保護服務。當與應用程式一起部署時,該檔案會提示 App Engine 提供錯誤頁面來回應禁止 IP 範圍發出的要求。

App Engine 彈性環境使用 Compute Engine 虛擬機器 (VM) 在 Docker 容器中託管應用程式。您可以:

  • 設定要連接至虛擬私人雲端網路的 App Engine 彈性環境代管 VM。虛擬私人雲端網路可以位於 Flex 應用程式所在的專案中,或跨多個專案共用。
  • 設定含有 App Engine 彈性環境執行個體的虛擬私人雲端網路,使用 Cloud VPN 連線至其他目的地。
  • 使用執行個體標記,將防火牆設定套用至 App Engine 彈性環境執行個體。
  • 將 Flex 執行個體上的網路通訊埠對應至 Docker 容器通訊埠,以進行偵錯與剖析。

如果您建構的 App Engine 彈性環境應用程式在 GCP 之中或之外執行 (內部部署或在其他雲端),且需要公開透明地連線至其他服務,這樣的彈性就很有幫助。

費用

AWS 不收取 Elastic Beanstalk 的任何額外費用。您只需要為基礎 EC2 執行個體與其他資源付費。

App Engine 標準環境按執行個體的執行分鐘數收費。 系統會在執行個體啟動時開始計費,並在執行個體經手動關閉 15 分鐘後,或是基本執行個體處理完最後一項要求的 15 分鐘後停止計費。閒置的執行個體數量如超過「效能設定」中設定的閒置執行個體上限,不另計費。另外還有免費配額:自動調整資源配置模組每天有 28 小時的免費執行個體時數,基本與手動資源調度模組有每天 9 小時的免費執行個體時數。

App Engine 彈性環境會針對您指定的虛擬機器類型資源收費。費用由以下使用參數決定:

  • vCPU (每核心時數)
  • 記憶體 (每 GB 時數)
  • 永久磁碟 (每月 GB 數)

這些費用按分鐘計費,最小計費單位為十分鐘的使用費。

詳情請參閱 Compute Engine 價格頁面。如要估計特定工作負載的價格,請嘗試使用 GCP Pricing Calculator

CaaS 比較

對於 CaaS,AWS 提供 Amazon EC2 Container Service (ECS),而 GCP 提供 Google Kubernetes Engine。

GKE 與 Amazon ECS 的服務模式非常類似。您可在每項服務中建立容器節點的叢集。每個節點都是虛擬機器執行個體,而且都會執行節點代理程式來發出節點包含在叢集中的信號。每個節點也都會執行容器 Daemon (例如 Docker),讓節點能夠執行容器化應用程式。您建立的 Docker 映像檔中包含您的應用程式檔案與執行應用程式的指令,然後您會在叢集中部署應用程式。

Amazon ECS 由 Amazon 開發及維護。Google Kubernetes Engine 在 Kubernetes 上建構,這是一個開放原始碼容器管理系統。

整體來說,Amazon ECS 和 GKE 兩者對應的位置用語和概念如下:

功能 Amazon ECS GKE
叢集結點 Amazon EC2 執行個體 Compute Engine 執行個體
支援的 Daemon Docker Docker 或 rkt
節點代理程式 Amazon ECS 代理程式 Kubelet
容器群組 工作 Pod
部署規模服務 服務 複製控制器
命令列工具 Amazon ECS CLI kubectl 或 gcloud
可攜權 僅在 AWS 執行 可在 Kubernetes 執行的位置執行

平台元件

叢集

在 Amazon ECS 與 GKE 中,叢集都是虛擬機器節點的邏輯分組。在 Amazon ECS,叢集使用 Amazon EC2 執行個體做為節點。如要建立叢集,您只需要提供叢集名稱,Amazon ECS 就會建立叢集。但是根據預設,這個叢集是空的。您必須將容器執行個體啟動到叢集中,才能啟動您的應用程式。

在 GKE,叢集使用 Compute Engine 執行個體做為節點。如要建立叢集,您首先應提供設定為所需值的基本設定詳細資料,包括以下項目:

  • 叢集名稱
  • 部署區域
  • Compute Engine 機器類型
  • 叢集大小

設定叢集之後,GKE 會在要求的一或多個區域中建立叢集。

容器群組

Amazon ECS 與 GKE 群組都會將互相依賴或相關的容器組分組為較高層級的服務單位。在 Amazon ECS,這些單位稱為工作,由工作定義所定義。在 GKE,這些單位稱為 Pod,由 PodSpec 定義。不管是工作還是 Pod,容器都會共置及共同排程,並在共用 IP 位址與通訊埠空間的共用環境中執行。

容器 Daemon

每個節點機器都必須執行容器 Daemon 才能支援容器化服務。Amazon ECS 支援 Docker 做為容器 Daemon。Google Kubernetes Engine 支援 Docker 與 rkt。

節點代理程式

在 Amazon ECS,每個 Amazon EC2 節點都執行 Amazon ECS 代理程式,該代理程式會代表 Amazon ECS 啟動容器。同樣的,在 GKE,每個 GKE 節點都執行 kubelet,kubelet 會維持在節點上執行的容器健康狀態與穩定性。

服務探索

Amazon ECS 不在叢集中提供原生服務探索機制。您可以透過這種解決方法設定第三方服務探索服務 (例如 Consul),藉以在指定叢集中啟用服務探索。

GKE 叢集可以透過 Kubernetes DNS 外掛程式啟用服務探索功能,根據預設,此功能為啟用狀態。系統會為每項 Kubernetes 服務指派虛擬 IP 位址,只要服務存在,該位址就會保持穩定。 DNS 伺服器會等待 Kubernetes API 中出現新服務,然後為每項服務建立一組 DNS 記錄。這些記錄可讓 Kubernetes Pod 自動執行 Kubernetes 服務名稱解析。

排程

Amazon ECS 僅支援自己的原生排程器。

GKE 內建於 Kubernetes 之上,是插入式架構。因此,GKE 與 Kubernetes 排程器完全相容,是一種開放原始碼程式,可在執行 Kubernetes 的任何環境中執行。

部署自動化

在 On Amazon ECS,您可以建立指令碼以在每個節點上部署工作。但是,服務中並未內建這種行為。

在 GKE,您可以使用 DaemonSet,在叢集中的每個節點上執行特定 Pod 的複本。在叢集中新增或移除節點時,DaemonSet 會將 Pod 自動複製到新節點,或者對舊節點執行資源回收。刪除 DaemonSet 時,DaemonSet 會清除建立的任何 Pod。

磁碟管理

由於 Amazon ECS 磁碟為主機專屬,因此無法將依賴特定磁碟的容器移至其他主機。

相對之下,GKE 可將磁碟動態掛接到節點上,並將磁碟自動指派給特定的 Pod。您不需要在特定節點上執行 Pod 即可使用特定磁碟。

身分與存取權管理

Amazon ECS 和 AWS 身分與存取權管理 (IAM) 服務完全相容。GKE 目前不支援 GCP 的身分與存取權管理服務。

多租戶架構

在 Amazon ECS,您可以建立單獨的叢集,然後手動設定 AWS 身分與存取權管理,限制在每個叢集上的使用,藉以達到多租戶架構的目標。

相對之下,GKE 支援命名空間,可允許使用者以符合邏輯的方式分組叢集,並提供支援多租戶叢集的範圍。命名空間可允許執行下列作業:

  • 在單一叢集上建立多個使用者社群
  • 在叢集分區上將權限委派給受信任的使用者
  • 限制每個社群能夠消耗的資源數量
  • 限制只有與特定使用者社群相關的資源才開發使用
  • 將特定使用者社群使用的資源與在叢集上的其他使用者社群隔離

健康狀態檢查

在 Amazon ECS,您可以使用 Amazon ELB 健康狀態檢查偵測失敗狀況。Amazon ELB 可對 HTTP/TCP 執行健康狀態檢查。如要接收健康狀態檢查,所有容器化服務 (甚至是不需要接聽 TCP 通訊埠的服務) 都必須設定 HTTP 伺服器。此外,每項服務都必須與 ELB 相關,即使服務不需要負載平衡也是如此。

在 GKE 中,您可以使用已就緒與執行中的探測器執行健康狀態檢查:

  • 已就緒的探測器可讓您在初始化期間檢查 Pod 的狀態。
  • 執行中的探測器可讓您偵測及重新啟動不再正常運作的 Pod。

這些探測器都包含在 Kubernetes API 中,可以設定為 PodSpec 的一部分。

可攜權

由於 Amazon ECS 代理程式只能在 Amazon EC2 執行個體上執行,因此 Amazon ECS 設定只能在 Amazon ECS 上有效執行。相對之下,因為 GKE 內建在 Kubernetes 中,所以 Google Kubernetes Engine 設定只能在任何 Kubernetes 安裝上執行。

費用

Amazon 會對您在部署中使用的 Amazon EC2 執行個體與 Amazon EBS 磁碟區收費。Amazon ECS 的容器管理服務不會產生額外費用。

GCP 會對您在部署中使用的 Compute Engine 執行個體與永久磁碟收費。此外,GKE 會按小時收取叢集管理費用。 節點數只有五個或不足五個的叢集不會產生此費用。詳情請參閱 GKE 定價一文。

後續步驟

請參閱其他「為 AWS 專家量身打造的 Google Cloud Platform」文章:

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
為 AWS 專家量身打造的 Google Cloud Platform