View a markdown version of this page

Bagaimana solusinya bekerja - Ruang Tunggu Virtual di AWS

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

Bagaimana solusinya bekerja

Bagian ini menjelaskan langkah-langkah dalam alur kerja Ruang Tunggu AWS Virtual pada tingkat tinggi. Lihat Panduan Pengembang GitHub untuk detail tentang membangun, menyesuaikan, dan mengintegrasikan ruang tunggu untuk situs web Anda.

API publik ruang tunggu dapat ditemukan di belakang keamanan perimeter situs Anda atau dapat tersedia tanpa otorisasi apa pun. Bergantung pada pendekatan yang Anda gunakan untuk mengintegrasikan ruang tunggu dengan situs web, pengguna mungkin diminta untuk terlebih dahulu mengautentikasi ke situs web sebelum diizinkan untuk menavigasi ke ruang tunggu dan mendapatkan posisi dalam antrian.

Perangkat lunak klien harus memiliki ID Acara untuk memasuki ruang tunggu dan membuat permintaan lainnya. ID Acara adalah ID unik yang diperlukan untuk sebagian besar permintaan terhadap publik dan pribadi APIs. ID Peristiwa disetel selama instalasi tumpukan API inti. Selama operasi, ID Acara dapat diberikan sebagai parameter URL atau cookie melalui halaman ruang tunggu; itu dapat disediakan sebagai bagian dari klaim token otentikasi atau dapat didistribusikan ke klien melalui jalur data yang berbeda.

Ada kasus di mana klien membutuhkan ID Peristiwa dan ID Permintaan untuk melakukan panggilan API tertentu. ID Permintaan adalah ID unik yang dikeluarkan dari ruang tunggu yang mewakili klien tertentu dalam antrean.

Langkah-langkah berikut menjelaskan alur permintaan API untuk entri antrian, menunggu antrian berkembang, dan keluar dari ruang tunggu dengan token akses untuk situs web.

Pengguna memasuki ruang tunggu:

  1. Pengguna disajikan dengan layar atau halaman yang mewakili titik masuk ruang tunggu. Mereka memilih untuk memasuki antrian dan perangkat lunak klien (browser, seluler, perangkat) memanggil API assign_queue_num publik untuk meminta posisi antrian.

  2. Permintaan API segera dikirim ke antrean Amazon SQS oleh API Gateway.

  3. Panggilan assign_queue_num API kembali ketika permintaan ditempatkan ke dalam antrian. Klien menerima ID Permintaan unik yang dapat digunakan nanti untuk mengambil posisi antrian, waktu permintaan, dan token akses.

  4. Fungsi AssignQueueNum Lambda menerima batch hingga sepuluh permintaan dari antrian SQS. Layanan Lambda menggemari pemanggilan untuk memproses beberapa batch permintaan.

  5. Fungsi AssignQueueNum Lambda memvalidasi setiap pesan dalam batch, menambah penghitung antrian di Elasticache (Redis OSS), dan menyimpan setiap permintaan di Elasticache (Redis OSS) dengan posisi antrian yang terkait.

  6. Setiap pesan dihapus karena berhasil diproses. Pesan yang terlibat dalam kondisi kesalahan diproses ulang sekali dalam batch berikutnya. Setelah kegagalan kedua, mereka dikirim ke yang dead-letter-queue terhubung ke CloudWatchalarm.

  7. Klien dapat mulai melakukan polling queue_num API setelah menerima ID Permintaan dari assign_queue_num panggilan. Klien mengirimkan ID Peristiwa dan ID Permintaan queue_num ke API dan menerima posisi antrian numerik atau respons yang menunjukkan permintaan belum diproses. Klien mungkin perlu melakukan panggilan ini lebih dari sekali selama acara besar. Fungsi GetQueueNum Lambda dipanggil oleh API Gateway dan mengembalikan posisi numerik klien dalam antrian dari DynamoDB.

Pengguna menunggu di ruang tunggu:

  1. Setelah klien memiliki posisi dalam antrian, klien dapat mulai melakukan polling serving_num API secara berkala. serving_numAPI dipanggil dengan ID Peristiwa dan mengembalikan posisi penyajian antrian saat ini. Respons dari serving_num API memberi tahu klien kapan mereka dapat berpindah dari ruang tunggu ke situs target yang sebenarnya di mana transaksi akhir dapat terjadi. Fungsi GetServingNum Lambda mengembalikan posisi servis saat ini dari ruang tunggu.

  2. Ketika posisi servis sama dengan atau lebih besar dari posisi antrian klien (permintaan), klien dapat meminta JSON Web Token (JWT) dari API publik. Token dapat digunakan dengan situs target untuk menyelesaikan transaksi. generate_tokenAPI dipanggil dengan ID Peristiwa dan ID Permintaan. API Gateway memanggil fungsi GenerateToken Lambda dengan parameter.

  3. Fungsi GenerateToken Lambda memvalidasi permintaan dan memeriksa apakah token ini telah dibuat sebelumnya. Fungsi Lambda menanyakan tabel DynamoDB untuk token yang cocok. Jika ditemukan, token itu dikembalikan ke pemanggil dan tidak dibuat ulang. Proses ini mencegah satu ID Permintaan digunakan untuk menghasilkan beberapa token berbeda dengan waktu kedaluwarsa baru.

  4. Jika token tidak ditemukan di DynamoDB, fungsi Lambda mengambil kunci untuk membuat token dan menyimpan token di DynamoDB dengan ID Peristiwa dan ID Permintaan klien. Fungsi Lambda menulis sebuah peristiwa EventBridge untuk memberi sinyal bahwa token baru telah dihasilkan. Fungsi Lambda meningkatkan penghitung Elasticache (Redis OSS) yang melacak jumlah token yang dihasilkan untuk acara tersebut.

  5. Jika queue_pos_expiry diaktifkan, klien dapat melakukan kueri sisa waktu sebelum kedaluwarsa dengan memanggil queue_pos_expiry API yang memanggil fungsi LambdaGetQueuePositionExpiryTime.

Pengguna meninggalkan ruang tunggu:

  1. Ketika klien menerima tokennya, ia memasuki situs target untuk memulai transaksinya. Bergantung pada bagaimana infrastruktur Anda mendukung integrasi dengan JWT, klien mungkin perlu menyajikan token di header permintaan, cookie, atau cara lain. Authorizer untuk API Gateway dapat digunakan untuk memvalidasi token yang disertakan dalam permintaan klien. Pustaka komersial atau sumber terbuka apa pun untuk memvalidasi dan mengelola JWTs dapat digunakan dengan Ruang Tunggu Virtual pada token. AWS Jika token valid, klien diizinkan untuk melanjutkan transaksi mereka.

  2. Setelah klien menyelesaikan transaksi mereka, API pribadi dipanggil untuk memperbarui status token klien dan diselesaikan di DynamoDB.

Kedaluwarsa posisi antrian:

  1. Ketika fitur ini diaktifkan, ID Permintaan yang sesuai dengan posisi antrian tertentu memenuhi syarat untuk menghasilkan token hanya untuk interval waktu tertentu.

Penghitung penayangan kenaikan pada posisi antrian kedaluwarsa:

  1. Ketika fitur ini diaktifkan, penghitung penayangan secara otomatis bertambah berdasarkan posisi antrian kedaluwarsa yang tidak dapat menghasilkan token.