Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
GAMEREL03-BP02 Terapkan kopling longgar fitur permainan untuk menangani kegagalan dengan dampak minimal terhadap pengalaman pemain
Komponen decoupling mengacu pada konsep merancang komponen server sehingga mereka dapat beroperasi semandiri mungkin. Beberapa aspek permainan sulit dipisahkan karena data harus mutakhir mungkin untuk memberikan pengalaman dalam game yang baik bagi pemain. Namun, banyak komponen dan tugas permainan dapat dipisahkan. Misalnya, papan peringkat dan layanan statistik tidak penting untuk pengalaman bermain game, dan pembacaan dan penulisan ke layanan ini dapat dilakukan secara asinkron dari game.
Tingkat risiko yang terjadi jika praktik terbaik ini tidak diterapkan: Tinggi
Panduan implementasi
Terapkan degradasi anggun untuk fitur dalam game Anda yang dapat dinonaktifkan secara otomatis atau oleh administrator jika masalah terdeteksi, serta konfigurasikan layanan hulu yang bergantung pada fitur untuk dapat menangani kegagalan dengan anggun. Misalnya, jika data pemain tertentu tidak dimuat dengan benar dalam klien game Anda, Anda harus mempertimbangkan apakah data ini penting untuk pengalaman bermain game. Jika tidak, konfigurasikan klien game untuk menangani kegagalan ini dengan anggun tanpa mengganggu pengalaman pemain, pilih untuk mencoba kembali mengambil data ini nanti ketika pemain mengunjungi kembali layar.
Gunakan logika seperti batas waktu, percobaan ulang, dan mundur untuk menangani kesalahan dan kegagalan. Batas waktu mencegah sistem menggantung untuk jangka waktu yang tidak masuk akal. Percobaan ulang dapat memberikan ketersediaan kesalahan sementara dan acak yang tinggi.
Mendefinisikan komponen non-kritis yang dapat digabungkan secara longgar ke komponen kritis. Kopling longgar memungkinkan sistem menjadi lebih tangguh karena kegagalan dalam satu komponen tidak mengalir ke yang lain. Ketika fitur game tidak memerlukan koneksi stateful ke server game atau backend Anda, Anda harus menerapkan protokol stateless untuk menskalakan secara dinamis dan memulihkan dari kegagalan sementara. Kembangkan komponen non-kritis Anda yang dapat digabungkan secara longgar dengan protokol stateless menggunakan API. HTTP/JSON Terapkan panggilan jaringan dari klien game menjadi asinkron dan non-pemblokiran untuk meminimalkan dampak pada pemain dari fitur game yang berkinerja lambat atau layanan dependen lainnya.
Untuk lebih meningkatkan ketahanan melalui kopling longgar, gunakan layanan pesan seperti antrian, streaming, atau sistem berbasis topik antara komponen yang dapat ditangani secara asinkron. Model ini cocok untuk interaksi yang tidak memerlukan tanggapan segera atau di mana pengakuan bahwa permintaan telah didaftarkan sudah cukup. Solusi ini melibatkan satu komponen yang menghasilkan peristiwa dan komponen lain yang mengkonsumsinya. Kedua komponen tidak akan terintegrasi melalui interaksi point-to-point langsung tetapi melalui perantara seperti penyimpanan tahan lama atau lapisan antrian. Ini juga membantu meningkatkan keandalan sistem dengan menjaga pesan ketika pemrosesan gagal.
Teliti dan pilih mekanisme perpesanan yang sesuai, karena berbagai layanan perpesanan memiliki karakteristik yang berbeda, seperti mekanisme pemesanan dan pengiriman. Rancang operasi agar idempoten sehingga sistem pesan yang dipilih mengirimkan pesan setidaknya sekali. Sebagai contoh, pertimbangkan kasus penggunaan game biasa di mana game Anda perlu melacak waktu bermain pemain, statistik, atau data relevan lainnya yang dapat menyebabkan kasus penggunaan throughput tulis yang tinggi pada saat konkurensi pemain puncak.
Untuk menerapkan arsitektur yang andal, pertimbangkan apakah kasus penggunaan memerlukan konsistensi baca-sesudah tulis seperti yang dirasakan oleh pemain. Biasanya, skenario seperti ini cocok untuk pemrosesan asinkron dan dapat dicapai dengan menerapkan pola antrian tulis di mana permintaan dicerna ke dalam antrian pesan yang dapat diskalakan dan tahan lama seperti Amazon SQS dan dapat dimasukkan ke dalam database backend Anda secara batch menggunakan layanan konsumen, seperti fungsi Lambda. Pendekatan ini lebih dapat diandalkan daripada komunikasi sinkron antara beberapa komponen terdistribusi termasuk klien game pemain, server web dan aplikasi backend Anda, dan sistem database internal Anda. Ini juga mengurangi biaya karena database backend tidak perlu diskalakan untuk memenuhi throughput penulisan puncak karena pemrosesan konsumen dari antrian tulis dapat digunakan untuk memperlambat laju konsumsi ini sesuai kebutuhan.
Langkah-langkah implementasi
-
Pisahkan komponen non-kritis seperti papan peringkat dan layanan statistik dari fitur gameplay penting untuk memungkinkan operasi asinkron dan meningkatkan ketahanan.
-
Terapkan degradasi anggun untuk fitur non-kritis dengan logika untuk batas waktu, percobaan ulang, dan mundur, dan verifikasi bahwa klien game menangani kegagalan tanpa mengganggu pengalaman pemain.
-
Gunakan sistem perpesanan seperti Amazon SQS untuk komunikasi asinkron antar komponen, memungkinkan pemrosesan kasus penggunaan throughput tinggi yang dapat diskalakan, tahan lama, dan andal.