Rancang armada GameLift kontainer Amazon - Amazon GameLift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Rancang armada GameLift kontainer Amazon

Dokumentasi ini untuk fitur yang ada dalam rilis pratinjau publik. Dokumentasi dapat berubah.

Topik-topik ini menyajikan keputusan penting yang akan Anda buat saat menyiapkan armada GameLift kontainer Amazon. Keputusan Anda memengaruhi cara Anda mengonfigurasi pengaturan untuk kontainer, grup kontainer, dan armada.

Arsitek struktur kontainer armada Anda

Sebagai langkah pertama, identifikasi perangkat lunak dan sumber daya yang diperlukan untuk meng-host server game Anda, termasuk yang berikut:

  • Aplikasi server game Anda. Aplikasi harus terintegrasi dengan GameLift fungsionalitas Amazon untuk hosting, termasuk server SDK versi 5+. Lihat Integrasikan game Anda dengan Amazon GameLift.

  • GameLift Agen Amazon. Agen on-compute ini memelihara komunikasi dengan GameLift layanan Amazon dan mengelola siklus hidup semua proses server game. Untuk detail selengkapnya, lihat Server game dan GameLift Agen Amazon.

  • Perangkat lunak dan sumber daya tambahan sesuai kebutuhan. Ini mungkin termasuk perangkat lunak yang diperlukan untuk menjalankan aplikasi server game Anda. Perangkat lunak pendukung umum digunakan untuk pencatatan dan pemantauan, keamanan, pengiriman konten, dan sinkronisasi data.

Selanjutnya, putuskan bagaimana menyusun perangkat lunak dan sumber daya Anda untuk armada GameLift kontainer Amazon. Amazon GameLift menggunakan grup kontainer untuk mengatur kontainer. Armada selalu memiliki satu grup kontainer replika dan secara opsional dapat memiliki armada kontainer daemon. Untuk detail selengkapnya, lihat Komponen armada kontainer.

  • Mulailah dengan mendesain grup kontainer replika Anda. Pertimbangkan panduan berikut ini:

    • Bundel aplikasi server game Anda dan GameLift Agen Amazon ke dalam wadah yang sama. Jadikan wadah ini sebagai satu-satunya wadah penting grup replika.

    • Atur semua perangkat lunak lain untuk server game Anda ke dalam wadah. Anda dapat memilih untuk memasukkan semuanya ke dalam satu wadah di grup replika. Atau Anda dapat memilih untuk membuat satu atau lebih wadah sespan. Beberapa alasan untuk menggunakan sespan meliputi:

      • Untuk mengatur urutan startup/shutdown untuk perangkat lunak individual. Anda dapat mencapai ini dengan menempatkan perangkat lunak dalam wadah terpisah dan mengatur dependensi di antara mereka.

      • Untuk menetapkan batas khusus kontainer untuk penggunaan memori dan CPU.

      • Untuk menentukan pengaturan konfigurasi kontainer yang berbeda untuk setiap kontainer, seperti perintah peluncuran, titik masuk, direktori kerja, variabel lingkungan, atau pemeriksaan kesehatan.

  • Putuskan apakah Anda memerlukan grup kontainer daemon untuk armada Anda. Pertimbangkan hal berikut:

    • Kontainer daemon biasanya digunakan untuk menjalankan proses latar belakang atau pemantauan.

    • Kontainer dalam grup daemon tidak direplikasi pada instance armada. Ini berarti bahwa kontainer dalam grup daemon tidak diskalakan bersama dengan grup kontainer replika.

    • Grup daemon dapat memiliki beberapa kontainer. Anda dapat menetapkan wadah apa pun dalam grup daemon sebagai hal yang penting.

Tetapkan batas sumber daya

Untuk setiap grup kontainer, tentukan berapa banyak memori dan CPU yang dibutuhkan grup untuk menjalankan perangkat lunaknya. Amazon GameLift mengandalkan informasi ini untuk mengelola sumber daya untuk grup kontainer. Ini juga menggunakan informasi ini untuk menghitung berapa banyak grup kontainer replika yang dapat disimpan oleh gambar armada. Anda juga dapat menetapkan batas untuk wadah individu.

Tetapkan batas opsional untuk kontainer

Menyetel batas sumber daya khusus kontainer memungkinkan Anda memberikan kontrol yang lebih besar atas bagaimana kontainer individu dapat menggunakan sumber daya grup. Jika Anda tidak menetapkan batas khusus kontainer, semua kontainer dalam grup berbagi sumber daya grup. Berbagi menawarkan fleksibilitas yang lebih besar untuk menggunakan sumber daya di tempat yang dibutuhkan. Ini juga meningkatkan potensi proses untuk bersaing satu sama lain dan mengakibatkan kegagalan kontainer.

Tetapkan salah satu ContainerDefinition properti berikut untuk wadah apa pun.

  • SoftLimit(memori) — Cadangan jumlah minimum memori untuk penggunaan eksklusif wadah. Wadah selalu memiliki jumlah cadangan yang tersedia untuk itu. Ini dapat melebihi minimum ini kapan saja, jika sumber daya tambahan tersedia.

  • HardLimit(memori) - Tetapkan batas memori maksimum untuk wadah. Jika wadah melebihi batas ini, itu menghasilkan restart.

  • Cpulimit — Cadangan jumlah minimum sumber daya CPU untuk penggunaan eksklusif kontainer. Wadah selalu memiliki jumlah cadangan yang tersedia untuk itu. Ini dapat melebihi minimum ini kapan saja, jika sumber daya tambahan tersedia. (1024 unit CPU setara dengan 1 vCPU.)

Tetapkan batas sumber daya total untuk grup kontainer

Beri tahu Amazon GameLift berapa banyak memori dan sumber daya CPU yang dibutuhkan setiap grup kontainer. Tujuannya adalah untuk mengalokasikan sumber daya yang cukup untuk mengoptimalkan kinerja server game. Amazon GameLift menggunakan batasan ini untuk menghitung cara mengemas grup kontainer replika pada instance armada. Anda juga akan menggunakannya saat memilih jenis instance untuk armada kontainer.

Hitung total memori dan CPU yang dibutuhkan untuk semua proses di setiap kontainer dalam grup. Pertimbangkan hal berikut:

  • Proses apa yang berjalan di semua kontainer dalam grup kontainer? Tambahkan sumber daya yang diperlukan untuk proses ini.

  • Berapa banyak proses server game bersamaan yang Anda rencanakan untuk dijalankan di setiap grup kontainer? Anda menetapkan nilai ini sebagai bagian dari konfigurasi runtime armada, tetapi Anda perlu merencanakan memori yang cukup untuk mereka di sini (lihat Optimalkan konfigurasi runtime Anda).

Berdasarkan perkiraan persyaratan grup kontainer Anda, tetapkan ContainerGroupDefinition properti berikut:

  • TotalMemoryLimit— Tetapkan batas memori maksimum untuk grup kontainer. Semua kontainer dalam grup berbagi memori yang dialokasikan. Jika Anda menetapkan batas kontainer individual, batas memori total harus:

    • sama dengan atau lebih besar dari jumlah semua batas memori lunak kontainer

    • sama dengan atau lebih besar dari batas memori keras tertinggi untuk wadah dalam grup

  • TotalCpuLimit — Tetapkan batas CPU maksimum untuk grup kontainer. Semua kontainer dalam grup berbagi sumber daya CPU yang dialokasikan. Jika Anda menetapkan batas kontainer individual, batas total CPU harus:

    • sama dengan atau lebih besar dari jumlah semua batas CPU kontainer. Sebagai praktik terbaik, pertimbangkan untuk mengatur nilai ini untuk menggandakan jumlah batas CPU kontainer.

Contoh skenario

Katakanlah kita mendefinisikan grup kontainer replika dengan tiga kontainer berikut:

  • Wadah A adalah wadah replika penting kami. Ini menjalankan proses server game dan GameLift Agen Amazon. Kami memperkirakan kebutuhan sumber daya untuk satu server game di 512 MiB dan 1024 CPU. Kami berencana agar wadah menjalankan 10 proses server. Karena wadah ini menjalankan perangkat lunak kami yang paling penting, kami menetapkan cadangan memori lunak 6144 MiB dan tidak ada batas memori keras atau batas cadangan CPU.

  • Container B menjalankan perangkat lunak pendukung dengan persyaratan sumber daya diperkirakan 1024 MiB dan 1536 CPU. Kami menetapkan batas cadangan memori lunak 1024 MiB, batas memori keras 2048 MiB, dan batas cadangan CPU 1024 CPU.

  • Container C menjalankan pencatatan non-kritis dan utilitas pemantauan lainnya. Kami menetapkan batas memori keras 512 MiB dan batas cadangan CPU 512 CPU.

Dengan menggunakan informasi ini, kami menetapkan batas total berikut untuk grup kontainer:

  • Total batas memori: 7680 MiB. Nilai ini melebihi (1) jumlah batas memori lunak (6144+1024 MiB), dan (2) batas memori keras tertinggi (1024 MiB).

  • Total batas CPU: 13312 CPU. Nilai ini melebihi jumlah batas CPU (1024+512 CPU).

Tentukan wadah penting

Untuk setiap wadah, tentukan wadah sebagai penting atau tidak esensial. Semua grup kontainer harus memiliki setidaknya satu wadah penting. Wadah penting melakukan pekerjaan penting dari grup kontainer, seperti menghosting server game Anda. Wadah penting selalu diharapkan untuk berjalan. Jika gagal, seluruh grup kontainer akan dimulai ulang.

  • Grup kontainer replika armada Anda dapat memiliki tepat satu wadah penting. Wadah ini menjalankan GameLift Agen Amazon dan server game memprosesnya.

  • Jika armada Anda memiliki grup kontainer daemon, Anda dapat menunjuk beberapa kontainer penting. Jadikan wadah daemon penting jika Anda ingin kegagalan kontainer untuk meminta restart grup kontainer.

Setel ContainerDefinition properti Essential ke true atau false untuk setiap kontainer.

Konfigurasikan koneksi jaringan

Anda dapat membuat akses jaringan untuk membiarkan lalu lintas eksternal terhubung ke kontainer apa pun dalam armada kontainer. Misalnya, Anda harus membuat koneksi jaringan ke wadah yang menjalankan proses server game Anda, sehingga klien game dapat bergabung dan memainkan game Anda. Klien game terhubung ke server game menggunakan port dan alamat IP.

Dalam armada kontainer, koneksi antara klien dan server tidak langsung. Secara internal, proses dalam wadah mendengarkan pada port kontainer. Secara eksternal, lalu lintas masuk terhubung ke instance armada menggunakan port koneksi. Amazon GameLift mempertahankan pemetaan antara port kontainer internal dan port koneksi yang menghadap eksternal, sehingga lalu lintas yang masuk diarahkan ke proses yang benar pada instance.

Amazon GameLift menyediakan lapisan kontrol ekstra untuk koneksi jaringan Anda. Setiap armada kontainer memiliki pengaturan izin masuk, yang memungkinkan Anda mengontrol akses ke setiap port koneksi yang menghadap ke luar. Anda tidak dapat mengubah konfigurasi port armada yang ada, tetapi Anda dapat mengizinkan atau membatasi akses sesuai kebutuhan dengan menyesuaikan izin masuk. Misalnya, Anda dapat menghapus izin untuk semua port koneksi untuk mematikan semua akses ke kontainer armada.

Port jaringan memungkinkan lalu lintas eksternal untuk terhubung ke proses yang berjalan dalam armada kontainer. Izin masuk EC2 memungkinkan lalu lintas untuk mengakses port koneksi, yang dibuka pada setiap instance di armada. Port koneksi dipetakan secara internal ke port kontainer, yang ditugaskan untuk proses individual.
Atur rentang port kontainer

Konfigurasikan definisi kontainer dengan port kontainer yang cukup untuk proses apa pun yang membutuhkan akses eksternal. Beberapa kontainer tidak membutuhkan port apa pun. Yang lain harus memiliki port yang cukup untuk menetapkan satu untuk setiap proses yang membutuhkannya.

Grup kontainer replika penting Anda, yang menjalankan server game Anda, memerlukan port untuk setiap proses server game yang berjalan secara bersamaan (seperti yang dikonfigurasi dalam armadaRuntimeConfiguration). Proses server game mendengarkan port yang ditetapkan dan melaporkannya ke Amazon GameLift.

Saat Anda membuat definisi grup kontainer, tentukan rentang port kontainer untuk setiap kontainer yang membutuhkan akses jaringan (lihat ContainerDefinitionInput: PortConfiguration). Pastikan jangkauannya cukup besar untuk menetapkan port ke setiap proses yang membutuhkannya. Proses harus diberi nomor port dalam konfigurasi port kontainer.

Atur rentang port koneksi

Konfigurasikan armada kontainer Anda dengan satu set port koneksi. Port koneksi menyediakan akses eksternal ke instance armada yang menjalankan kontainer Anda. Amazon GameLift menetapkan port koneksi dan memetakannya ke port kontainer sesuai kebutuhan.

Saat Anda membuat armada kontainer, tentukan rentang port koneksi (lihat ContainerGroupsConfiguration: ConnectionPortRange). Pastikan bahwa jangkauan memiliki port yang cukup untuk dipetakan ke setiap port kontainer di seluruh instance armada. Untuk menghitung port koneksi minimum yang diperlukan, gunakan rumus berikut:

[Total number of container ports defined for containers in the replica container group] * [Number of replica container groups per instance] + [Total number of container ports defined for containers in the daemon container group]

Sebagai praktik terbaik, gandakan jumlah minimum port koneksi.

catatan

Jumlah port connecton berpotensi membatasi jumlah grup kontainer replika per instance. Jika armada hanya memiliki port koneksi yang cukup untuk satu grup kontainer replika per instance, Amazon hanya GameLift akan menerapkan satu grup kontainer replika, bahkan jika instance memiliki daya komputasi yang cukup untuk beberapa grup kontainer replika.

Tetapkan izin masuk

Izin masuk mengontrol akses eksternal ke armada kontainer dengan menentukan port koneksi mana yang akan dibuka untuk lalu lintas masuk. Anda dapat menggunakan pengaturan ini untuk mengaktifkan dan menonaktifkan akses jaringan armada sesuai kebutuhan.

Saat Anda membuat armada kontainer, tentukan satu set izin masuk ( CreateFleetlihat:EC2). InboundPermissions Tetapkan properti port izin masuk untuk menyertakan beberapa atau semua nilai dalam pengaturan port koneksi armada. Untuk mengubah izin masuk pada armada kontainer yang ada, hubungi. UpdateFleetPortSettings

Contoh skenario

Contoh ini menggambarkan cara mengatur ketiga properti koneksi jaringan.

  • Grup kontainer replika armada kami memiliki 1 kontainer, yang menjalankan proses server game. Konfirmasi runtime memberitahu container untuk menjalankan 10 proses server game bersamaan.

    Dalam definisi grup kontainer replika, kami menetapkan PortConfiguration parameter untuk wadah ini sebagai berikut:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 10, "ToPort": 20, "Protocol": "TCP"} ] }
  • Armada kami juga memiliki grup kontainer daemon dengan 1 kontainer. Ini memiliki 1 proses yang membutuhkan akses jaringan. Dalam definisi grup kontainer daemon, kami menetapkan PortConfiguration parameter untuk wadah ini sebagai berikut:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 25, "ToPort": 25, "Protocol": "TCP"} ] }
  • Armada kami dikonfigurasi dengan 3 grup kontainer replika per instance armada. Dengan informasi ini, kita dapat menggunakan rumus untuk menghitung jumlah port koneksi yang kita butuhkan:

    • Minimum: 31 port [10 port kontainer replika * 3 grup kontainer replika per instance+1 port kontainer daemon]

    • Praktik terbaik: 62 port [port minimum* 2]

    Saat membuat armada kontainer, kami mengatur ConnectionPortRange parameter ContainerGroupsConfiguration sebagai berikut:

    "ConnectionPortRange": { "FromPort": 1010, "ToPort": 1071 }
  • Kami ingin mengizinkan akses ke semua port koneksi yang tersedia. Saat membuat armada kontainer, kami mengatur EC2InboundPermissions parameter sebagai berikut:

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

Siapkan pemeriksaan kesehatan untuk kontainer

Sebuah kontainer secara otomatis restart jika mengalami kegagalan terminal dan berhenti berjalan. Jika wadah penting, seluruh grup kontainer akan dimulai ulang.

Anda dapat menentukan kriteria khusus tambahan untuk mengukur kesehatan kontainer dan menggunakan pemeriksaan kesehatan untuk menguji kriteria tersebut. Untuk menyiapkan pemeriksaan kesehatan container, Anda dapat mendefinisikannya dalam image docker container atau dalam definisi container Anda. Jika Anda menetapkan pemeriksaan kesehatan dalam definisi kontainer, itu akan mengganti pengaturan apa pun dalam gambar kontainer.

Tetapkan pemeriksaan kesehatan opsional berdasarkan jenis wadah sebagai berikut:

  • Untuk wadah replika penting, jangan mengonfigurasi pemeriksaan kesehatan. GameLiftAgen Amazon secara otomatis menangani pelaporan kesehatan untuk wadah ini.

  • Untuk wadah replika yang tidak penting dan wadah daemon apa pun, Anda dapat mengatur parameter pemeriksaan kesehatan secara opsional.

Tetapkan ContainerDefinition properti berikut untuk pemeriksaan kesehatan kontainer:

  • Command— Berikan perintah yang memeriksa beberapa aspek kesehatan wadah. Anda memutuskan kriteria apa yang akan digunakan untuk mengukur kesehatan. Perintah harus menghasilkan nilai keluar 1 (tidak sehat) atau 0 (sehat).

  • StartPeriod— Tentukan penundaan awal sebelum kegagalan pemeriksaan kesehatan mulai menghitung. Penundaan ini memberi waktu penampung untuk mem-bootstrap prosesnya.

  • Interval— Putuskan seberapa sering menjalankan perintah pemeriksaan kesehatan. Seberapa cepat Anda ingin mendeteksi dan menyelesaikan kegagalan kontainer?

  • Timeout— Putuskan berapa lama menunggu keberhasilan atau kegagalan sebelum mencoba kembali perintah pemeriksaan kesehatan. Berapa lama perintah pemeriksaan kesehatan harus diselesaikan?

  • Retries— Berapa kali perintah pemeriksaan kesehatan harus dicoba lagi sebelum mendaftarkan kegagalan?

Tetapkan dependensi kontainer

Dalam setiap grup kontainer Anda dapat mengatur dependensi antar kontainer berdasarkan status kontainer. Ketergantungan berdampak ketika kontainer dependen dapat memulai atau mematikan berdasarkan status wadah lain.

Kasus penggunaan utama untuk dependensi adalah membuat urutan startup dan shutdown untuk grup kontainer.

Misalnya, Anda mungkin ingin Container A dimulai terlebih dahulu dan berhasil diselesaikan sebelum Container B dan C dimulai. Untuk mencapai hal ini, pertama buat dependensi untuk Container B pada Container A, dengan syarat bahwa Container A harus berhasil diselesaikan. Kemudian buat dependensi untuk Container C pada Container A dengan kondisi yang sama. Urutan startup terjadi dalam urutan terbalik untuk shutdown.

Konfigurasikan armada kontainer

Saat Anda membuat armada kontainer, pertimbangkan poin keputusan berikut. Sebagian besar poin ini bergantung pada arsitektur dan konfigurasi kontainer Anda.

Tentukan di mana Anda ingin menyebarkan armada Anda

Secara umum, Anda ingin menyebarkan armada Anda secara geografis di dekat pemain Anda untuk meminimalkan latensi. Anda dapat menerapkan armada kontainer Anda ke Masing-masing Wilayah AWS yang GameLift didukung Amazon. Jika Anda ingin menyebarkan server game yang sama ke lokasi geografis tambahan, Anda dapat menambahkan lokasi terpencil ke armada termasuk Wilayah AWS dan Local Zones. Untuk armada multi-lokasi, Anda dapat menyesuaikan kapasitas secara mandiri di setiap lokasi armada. Untuk informasi selengkapnya tentang lokasi armada yang didukung, lihatLokasi GameLift hosting Amazon.

Pilih jenis dan ukuran instans untuk armada Anda

Amazon GameLift mendukung berbagai jenis instans Amazon EC2, yang semuanya tersedia untuk digunakan dengan armada kontainer. Ketersediaan dan harga jenis instans bervariasi menurut lokasi. Anda dapat melihat daftar jenis instans yang didukung, yang difilter berdasarkan lokasi, di GameLift konsol Amazon (di bawah kuota Sumber Daya, Instance, dan layanan).

Saat memilih jenis instance, pertama-tama pertimbangkan keluarga instance. Keluarga instans menawarkan berbagai kombinasi kemampuan CPU, memori, penyimpanan, dan jaringan. Dapatkan informasi lebih lanjut tentang keluarga instans EC2. Dalam setiap keluarga Anda memiliki berbagai ukuran instans untuk dipilih. Pertimbangkan masalah berikut saat memilih ukuran instans:

  • Berapa ukuran instans minimum yang dapat mendukung beban kerja Anda? Gunakan informasi ini untuk menghilangkan jenis instance apa pun yang terlalu kecil.

  • Ukuran tipe instance apa yang cocok untuk arsitektur kontainer Anda? Idealnya, Anda ingin memilih ukuran yang dapat menampung beberapa salinan grup wadah replika Anda dengan ruang terbuang minimal.

  • Granularitas penskalaan apa yang masuk akal untuk game Anda? Kapasitas armada skala melibatkan penambahan atau penghapusan instance, dan setiap instance mewakili kemampuan untuk menyelenggarakan sejumlah sesi permainan tertentu. Pertimbangkan berapa banyak kapasitas yang ingin Anda tambahkan atau hapus dengan setiap instance. Jika permintaan pemain bervariasi ribuan dari menit ke menit, maka mungkin masuk akal untuk menggunakan contoh yang sangat besar yang dapat menampung ratusan atau ribuan sesi permainan. Sebaliknya, Anda mungkin lebih memilih kontrol penskalaan yang lebih halus dengan tipe instance yang lebih kecil.

  • Apakah ada penghematan biaya yang tersedia berdasarkan ukuran? Anda mungkin menemukan bahwa biaya jenis instans tertentu bervariasi menurut lokasi karena ketersediaan.

Optimalkan konfigurasi runtime Anda

Konfigurasi runtime armada adalah serangkaian instruksi tentang cara menjalankan proses server untuk hosting sesi game. Instruksi ini diterapkan oleh GameLift Agen Amazon di setiap grup kontainer replika di armada.

Konfigurasi runtime armada menentukan berapa banyak proses server yang berjalan secara bersamaan di setiap grup kontainer replika. Pengaturan ini memengaruhi cara Anda menghitung batas sumber daya grup kontainer dan cara Anda memilih jenis instans untuk armada Anda. Anda perlu menyeimbangkan ketiga elemen ini saat merancang armada Anda.

Untuk informasi selengkapnya tentang cara menggunakan konfigurasi runtime, lihat. Mengelola cara Amazon GameLift meluncurkan server game

Atur pengaturan armada opsional lainnya

Anda dapat menggunakan fitur opsional berikut saat mengonfigurasi armada kontainer:

  • Siapkan server game Anda untuk mengakses AWS sumber daya lain. Lihat Berkomunikasi dengan sumber daya AWS lain dari armada.

  • Lindungi sesi permainan dengan pemain aktif agar tidak berhenti sebelum waktunya selama acara penurunan skala.

  • Batasi jumlah sesi permainan yang dapat dibuat oleh satu individu di armada dalam rentang waktu terbatas.