自訂Amazon GameLift Servers容器機群 - Amazon GameLift Servers

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

自訂Amazon GameLift Servers容器機群

本節中的主題說明Amazon GameLift Servers受管容器的一些選用功能。您可以選擇使用任何或所有這些功能。

設定資源限制

對於每個容器群組,您可以判斷容器群組執行其軟體所需的記憶體和運算能力。 Amazon GameLift Servers 依賴此資訊來管理整個容器群組的資源。它也會使用此資訊來計算機群映像可以容納多少遊戲伺服器容器群組。您也可以設定個別容器的限制。

您可以設定容器群組的記憶體和運算能力上限。根據預設,群組中的所有容器都會共用這些資源。您可以設定個別容器的限制,進一步自訂資源管理。

設定個別容器的選用限制

設定容器特定的資源限制可讓您對個別容器如何使用群組的資源進行更大的控制。如果您未設定容器特定的限制,群組中的所有容器都會共用群組資源。共用可提供更大的彈性,以在需要時使用資源。它也會提高程序彼此競爭並導致容器故障的可能性。

為任何容器設定下列任何ContainerDefinition屬性。

  • MemoryHardLimitMebibytes – 設定容器的記憶體上限。如果容器超過此限制,則會導致重新啟動。

  • Vcpu limit – 預留最低數量的 vCPU 資源,供容器專屬使用。容器一律有可用的預留數量。如果有其他資源可用,則可以隨時超過此最小值。(1024 CPU 單位相當於 1 個 vCPU。)

設定容器群組的總資源限制

如果您設定個別容器的限制,您可能需要修改容器群組所需的記憶體和 vCPU 資源數量。目標是配置足夠的資源來最佳化遊戲伺服器效能。 Amazon GameLift Servers 使用這些限制來計算如何在機群執行個體上封裝遊戲伺服器容器群組。您也會在為容器機群選擇執行個體類型時使用它們。

計算容器群組所需的總記憶體和 vCPU。考慮下列各項:

  • 容器群組中所有容器執行的所有程序有哪些? 新增這些程序所需的資源。請記下任何容器特定的限制。

  • 您計劃在每個容器群組中執行多少個並行遊戲伺服器程序? 您可以在遊戲伺服器容器映像中確定這一點。

根據您對容器群組需求的預估,設定下列ContainerGroupDefinition屬性:

  • TotalMemoryLimitMebibytes – 設定容器群組的記憶體上限。群組中的所有容器都會共用配置的記憶體。如果您設定個別容器限制,總記憶體限制必須等於或大於最高容器特定記憶體限制。

  • TotalVcpuLimit – 設定容器群組的 vCPU 上限。群組中的所有容器都會共用配置的 CPU 資源。如果您設定個別容器限制,總 CPU 限制必須等於或大於所有容器特定 CPU 限制的總和。最佳實務是考慮將此值設定為容器 CPU 限制總和的兩倍。

範例藍本

假設我們正在定義具有下列三個容器的遊戲伺服器容器群組:

  • 容器 A 是我們的遊戲伺服器容器。我們估計一個遊戲伺服器在 512 MiB 和 1024 CPU 的資源需求。我們計劃讓容器執行 1 個伺服器程序。由於此容器會執行我們最重要的軟體,因此我們不設定記憶體限制或 vCPU 預留限制。

  • 容器 B 是支援容器,其資源需求估計為 1024 MiB 和 1536 CPU。我們設定 2048 MiB 的記憶體限制,以及 1024 CPU 的 CPU 預留限制。

  • 容器 C 是另一個支援容器。我們設定硬記憶體限制為 512 MiB,CPU 預留限制為 512 CPU。

使用此資訊,我們為容器群組設定下列總限制:

  • 總記憶體限制:7680 MiB。此值超過最高記憶體限制 (1024 MiB)。

  • CPU 總限制:13312 CPU。此值超過 CPU 限制 (1024+512 CPU) 的總和。

指定必要容器

對於每個執行個體容器群組,請將每個容器指定為必要或非必要。每個執行個體容器群組必須至少有一個基本支援容器。基本容器會執行容器群組的重要工作。基本容器預期一律會執行。如果失敗,整個容器群組會重新啟動。

將每個容器的 ContainerDefinition 屬性Essential設定為 true 或 false。

設定網路連線

您可以自訂網路存取,以允許外部流量連接到容器機群中的任何容器。例如,您必須建立與執行遊戲伺服器程序之容器的網路連線,讓遊戲用戶端可以加入並玩遊戲。遊戲用戶端會使用連接埠和 IP 地址連線至遊戲伺服器。

在容器機群中,用戶端和伺服器之間的連線不是直接的。在內部,容器中的程序會接聽容器連接埠。在外部,傳入流量會使用連線連接埠連線至機群執行個體。 Amazon GameLift Servers會維護內部容器連接埠與對外連線連接埠之間的映射,以便傳入流量路由至執行個體上的正確程序。

Amazon GameLift Servers 為您的網路連線提供額外的控制層。每個容器機群都有傳入許可設定,可讓您控制對每個對外連線連接埠的存取。例如,您可以移除所有連線連接埠的許可,以關閉機群容器的所有存取。

您可以更新機群的傳入許可、連線連接埠和容器連接埠。

警告

如果您提供自訂 InstanceConnectionPortRange 或 InstanceInboundPermissions, Amazon GameLift Servers 將不再管理機群的任一值。您必須設定兩個欄位,以避免未定義的行為。

設定容器連接埠範圍

將容器連接埠範圍設定為每個容器定義的一部分。這是容器群組定義的必要參數。您需要設定足夠的連接埠,以容納所有同時執行且需要外部存取的程序。有些容器不需要任何連接埠。

執行遊戲伺服器的遊戲伺服器容器需要一個連接埠,才能用於每個同時執行的遊戲伺服器程序。遊戲伺服器程序會監聽指派的連接埠,並將其回報給 Amazon GameLift Servers。

設定連線連接埠範圍

使用一組連線連接埠設定容器機群。連線連接埠提供執行您容器之機群執行個體的外部存取權。 Amazon GameLift Servers會指派連線連接埠,並視需要將其映射至容器連接埠。

根據預設, 會Amazon GameLift Servers計算所有容器群組所需的連接埠數目,並設定連接埠範圍以容納它們。我們強烈建議您使用Amazon GameLift Servers計算值,這些值會在您將更新部署至容器群組定義時更新。如果您需要自訂連線連接埠範圍,請使用下列指引。

當您建立容器機群時,請定義連線連接埠範圍 (請參閱 ContainerFleet:InstanceConnectionPortRange)。請確定範圍有足夠的連接埠可對應至機群中兩個容器群組中所有容器所定義的每個容器連接埠。若要計算所需的最小連線連接埠,請使用下列公式:

[Total number of container ports defined for containers in the game server container group] * [Number of game server container groups per instance] + [Total number of container ports defined for containers in the per-instance container group]

最佳實務是連接連接埠數量下限的兩倍。

注意

連線連接埠的數量可能會限制每個執行個體的遊戲伺服器容器群組數量。如果機群每個執行個體只有一個遊戲伺服器容器群組的足夠連線連接埠,則 只會Amazon GameLift Servers部署一個遊戲伺服器容器群組,即使執行個體具有多個遊戲伺服器容器群組的足夠運算能力。

設定傳入許可

傳入許可透過指定要為傳入流量開啟的連線連接埠,來控制容器機群的外部存取。您可以使用此設定,視需要開啟和關閉機群的網路存取。

根據預設, 會Amazon GameLift Servers計算所有容器群組所需的連接埠數目,並設定連接埠範圍以容納它們。強烈建議您使用Amazon GameLift Servers計算值,這些值會在您將更新部署至容器群組定義時更新。如果您需要自訂連線連接埠範圍,請使用下列指引。

當您建立容器機群時,請定義一組傳入許可 (請參閱 ContainerFleet:InstanceInboundPermissions)。傳入許可連接埠應與機群的連線連接埠範圍相符。

注意

由於容器連接埠是從 InstanceConnectionPortRange 隨機選取,為了確保可以進行工作階段連線,InstanceConnectionPortRange 中的所有連接埠都應涵蓋在 InstanceInboundPermissions 中的連接埠

範例藍本

此範例說明如何設定所有三個網路連線屬性。

  • 我們機群的遊戲伺服器容器群組有 1 個容器,可執行 1 個遊戲伺服器程序。

    在遊戲伺服器容器群組定義中,我們會設定此容器的 PortConfiguration 參數,如下所示:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 10, "ToPort": 20, "Protocol": "TCP"} ] }
  • 我們的機群也有一個具有 1 個容器的每個執行個體容器群組。它有 1 個程序需要網路存取。在每個執行個體容器定義中,我們設定此容器的 PortConfiguration 參數,如下所示:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 25, "ToPort": 25, "Protocol": "TCP"} ] }
  • 我們的機群為每個機群執行個體設定了 20 個遊戲伺服器容器群組。根據此資訊,我們可以使用 公式來計算所需的連線連接埠數量:

    • 下限:21 個連接埠 【1 個遊戲伺服器容器連接埠 * 每個執行個體 20 個遊戲伺服器容器群組 + 每個執行個體容器連接埠 1 個】

    • 最佳實務:42 個連接埠 【最小連接埠 * 2】

    建立容器機群時,我們會設定 InstanceConnectionPortRange 參數,如下所示:

    "InstanceConnectionPortRange": { "FromPort": 1010, "ToPort": 1071 }
  • 我們希望允許存取所有可用的連線連接埠。建立容器機群時,我們會設定 InstanceInboundPermissions 參數,如下所示:

    "InstanceInboundPermissions": [ {"FromPort": 1010, "ToPort": 1071, "IpRange": "10.24.34.0/23", "Protocol": "TCP"} ]

設定容器的運作狀態檢查

如果容器遇到終端故障並停止執行,容器會自動重新啟動。如果容器視為必要,它會提示整個容器群組重新啟動。

所有遊戲伺服器容器都會自動視為必要。支援容器可以指定為必要容器,但他們需要有機制來報告運作狀態。您也可以設定非必要支援容器的運作狀態檢查。

您可以定義其他自訂條件來測量容器運作狀態,並使用運作狀態檢查來測試該條件。若要設定容器運作狀態檢查,您可以在 Docker 容器映像或容器定義中定義它。如果您在容器定義中設定運作狀態檢查,它會覆寫容器映像中的任何設定。

為容器運作狀態檢查設定下列SupportContainerDefinition屬性:

  • Command — 提供可檢查容器運作狀態某些層面的命令。您可以決定使用哪些條件來測量運作狀態。命令必須導致結束值為 1 (運作狀態不佳) 或 0 (運作狀態良好)。

  • StartPeriod — 指定運作狀態檢查失敗開始計數之前的初始延遲。此延遲可讓容器有時間引導其程序。

  • Interval — 決定執行運作狀態檢查命令的頻率。您想要多快偵測和解決容器故障?

  • Timeout — 決定等待成功或失敗的時間,然後再重試運作狀態檢查命令。運作狀態檢查命令需要多長時間才能完成?

  • Retries — 在註冊失敗之前,應該重試多少次運作狀態檢查命令?

設定容器相依性

在每個容器群組中,您可以根據容器狀態在容器之間設定相依性。相依性會影響相依容器何時可以根據另一個容器的狀態啟動或關閉。

相依性的關鍵使用案例是為容器群組建立啟動和關閉序列。

例如,您可能希望容器 A 先啟動,並在容器 B 和 C 啟動之前成功完成。若要達成此目的,請先在容器 A 上建立容器 B 的相依性,條件為容器 A 必須成功完成。然後為容器 A 上具有相同條件的容器 C 建立相依性。啟動序列會以相反順序進行關機。

設定容器機群

當您建立容器機群時,請考慮下列決策點。這些點大多取決於您的容器架構和組態。

決定您要部署機群的位置

一般而言,您想要在玩家附近的地理位置部署機群,以將延遲降至最低。您可以將容器機群部署到任何 AWS 區域 Amazon GameLift Servers支援的 。如果您想要將相同的遊戲伺服器部署到其他地理位置,您可以將遠端位置新增至機群,包括 AWS 區域 和 Local Zones。對於多位置機群,您可以在每個機群位置獨立調整容量。如需支援的機群位置的詳細資訊,請參閱 Amazon GameLift Servers 服務位置

考慮使用 UDP ping 信標 收集不同地理位置的網路延遲資料,以預測玩家裝置和潛在機群位置之間的延遲。這些特殊端點接受 UDP 訊息,而不是傳統的 ICMP ping,提供準確的延遲測量,以協助您選擇最佳的機群位置。

為您的機群選擇執行個體類型和大小

Amazon GameLift Servers 支援各種 Amazon EC2 執行個體類型,所有類型都可以與容器機群搭配使用。執行個體類型可用性和價格因位置而異。您可以在 Amazon GameLift Servers主控台 (在資源、執行個體和服務配額下) 中檢視依位置篩選的支援執行個體類型清單。

選擇執行個體類型時,請先考慮執行個體系列。執行個體系列提供各種 CPU、記憶體、儲存和聯網功能的組合。取得 EC2 執行個體系列的詳細資訊。在每個系列中,您有各種執行個體大小可供選擇。選取執行個體大小時,請考慮下列問題:

  • 可支援工作負載的執行個體大小下限是多少? 使用此資訊來消除任何過小的執行個體類型。

  • 哪些執行個體類型大小非常適合您的容器架構? 理想情況下,您想要選擇大小,以最小的浪費空間容納遊戲伺服器容器群組的多個複本。

  • 擴展精細程度對遊戲有何意義? 擴展機群容量涉及新增或移除執行個體,而每個執行個體代表託管特定數量遊戲工作階段的能力。考慮您要為每個執行個體新增或移除多少容量。如果玩家的需求從分鐘到分鐘不等,那麼使用可以託管數百或數千個遊戲工作階段的非常大型執行個體可能很有意義。相反地,您可能偏好使用較小的執行個體類型進行更精細的擴展控制。

  • 是否有根據大小節省成本? 由於可用性,您可能會發現特定執行個體類型的成本因位置而異。

設定其他選用機群設定

您可以在設定容器機群時使用下列選用功能:

  • 設定您的遊戲伺服器以存取其他 AWS 資源。請參閱 與機群中的其他 AWS 資源通訊

  • 保護具有作用中玩家的遊戲工作階段,避免在縮減規模事件期間提早終止。

  • 限制一個人可以在有限的時間內在機群上建立的遊戲工作階段數量。