Ikhtisar
Klien memanggil API Gateway, dan API Gateway memanggil layanan backend semuanya berdasarkan koneksi TCP. Untuk koneksi TCP, konfigurasi waktu habis yang tidak tepat dapat menyebabkan masalah atau bahkan kegagalan. Topik ini memberikan saran tentang cara mengonfigurasi periode waktu habis untuk koneksi TCP antara klien dan API Gateway serta antara API Gateway dan layanan backend. Konfigurasi periode waktu habis yang tepat membantu Anda memanfaatkan API Gateway dengan lebih baik dan mencegah masalah yang diketahui.
Parameter waktu habis berikut biasanya dikonfigurasi untuk koneksi TCP:
ConnectionTimeout: periode waktu habis untuk menetapkan koneksi TCP.
WriteTimeout: periode waktu habis untuk mengirim permintaan.
ReadTimeout: periode waktu habis untuk membaca respons dari layanan backend.
Anda dapat mengonfigurasi nilai yang berbeda untuk ConnectionTimeout dan untuk WriteTimeout berdasarkan jenis jaringan Anda. Biasanya, Internet memerlukan nilai yang lebih besar, seperti 10 detik untuk ConnectionTimeout dan WriteTimeout, sedangkan jaringan internal memerlukan nilai yang lebih kecil.
Kami menyarankan Anda mengonfigurasi parameter ReadTimeout berdasarkan waktu pemrosesan layanan backend. Secara khusus, jika Anda ingin mengonfigurasi ReadTimeout untuk aplikasi yang berbeda, Anda harus mengikuti aturan yang dijelaskan dalam topik ini.
Aturan konfigurasi
Gambar berikut menunjukkan proses keseluruhan dari panggilan API. Klien mengirimkan permintaan ke API Gateway, yang meneruskan permintaan tersebut ke layanan backend. Setelah menerima dan memproses permintaan, layanan backend mengembalikan respons ke API Gateway, yang kemudian meneruskan respons tersebut ke klien.

Dua konfigurasi waktu habis sangat penting dalam proses ini:
ClientReadTimeout: periode waktu habis untuk klien menerima respons dari API Gateway. Periode ini dikonfigurasi pada klien.
APIGatewayBackendTimeout: periode waktu habis untuk API Gateway menerima respons dari layanan backend. Periode ini dikonfigurasi di API Gateway.
Dari gambar sebelumnya, kita dapat melihat bahwa:
ClientReadTimeout = T2 + T3 + T4 + T5
APIGatewayBackendTimeout = T2 + T3 + T4
Oleh karena itu, saat mengonfigurasi ClientReadTimeout dan APIGatewayBackendTimeout, Anda harus mematuhi aturan berikut:
Nilai APIGatewayBackendTimeout harus lebih besar daripada waktu pemrosesan bisnis yang diperlukan oleh layanan backend.
Nilai ClientReadTimeout harus lebih besar daripada nilai APIGatewayBackendTimeout.
Sebagai contoh, jika Anda memperkirakan bahwa layanan backend Anda memproses permintaan API dalam 10 detik dalam sebagian besar kasus, Anda dapat mengatur APIGatewayBackendTimeout menjadi 10 detik dan ClientReadTimeout menjadi 15 detik untuk memastikan bahwa koneksi TCP tidak ditutup ketika layanan backend mengembalikan respons.
Jika Anda tidak mengikuti aturan ini dan mengonfigurasi periode waktu habis yang pendek, API Gateway gagal menemukan koneksi TCP yang tersedia karena koneksi sudah ditutup dalam kasus pemrosesan permintaan yang panjang oleh layanan backend. Dalam hal ini, API Gateway melaporkan kesalahan N502RE. Dalam kasus ekstrem, terjadi avalanche. Oleh karena itu, kami menyarankan Anda memperhatikan aturan ini secara khusus.
Contoh
Waktu habis layanan backend (APIGatewayBackendTimeout) yang dikonfigurasi di API Gateway memiliki nilai minimum 300ms. Pengaturan apa pun di bawah ambang batas ini akan default menjadi 300ms.
Gambar berikut menunjukkan contoh tentang konfigurasi ClientReadTimeout. Parameter ini dikonfigurasi dalam kode inisialisasi klien dari kumpulan koneksi klien HTTP. Dalam contoh ini, SDK API Gateway digunakan.

Gambar berikut menunjukkan contoh tentang konfigurasi APIGatewayBackendTimeout. Parameter ini dikonfigurasi dalam pengaturan layanan backend dari definisi API di konsol API Gateway.

Hirarki prioritas konfigurasi APIGatewayBackendTimeout
Anda dapat mengonfigurasi properti waktu habis layanan backend (APIGatewayBackendTimeout) di beberapa lokasi dalam konsol API Gateway:
Layanan backend
Backend API
Plugin rute
Saat nilai yang bertentangan diatur di seluruh lokasi ini, prioritas efektif adalah: Plugin rute > Backend API > Layanan backend