Antipola: Menonaktifkan koneksi HTTP persisten (keep-alive yang dapat digunakan kembali)

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Proxy API adalah antarmuka untuk aplikasi klien yang digunakan untuk terhubung dengan layanan backend. Apigee Edge menyediakan beberapa cara untuk terhubung ke layanan backend melalui proxy API:

Koneksi Persisten

Koneksi persisten HTTP, juga disebut keep-alive HTTP atau penggunaan ulang koneksi HTTP, adalah konsep yang memungkinkan satu koneksi TCP untuk mengirim dan menerima beberapa permintaan/respons HTTP, bukan membuka koneksi baru untuk setiap pasangan permintaan/respons.

Apigee Edge menggunakan koneksi persisten untuk berkomunikasi dengan layanan backend. Secara default, koneksi tetap aktif selama 60 detik. Artinya, jika sebuah koneksi tidak ada aktivitas dalam kumpulan koneksi selama lebih dari 60 detik, koneksi akan ditutup.

Periode waktu tunggu keep-alive dapat dikonfigurasi melalui properti bernama keepalive.timeout.millis, yang ditentukan dalam konfigurasi TargetEndpoint proxy API. Misalnya, jangka waktu keep alive dapat ditetapkan ke 30 detik untuk layanan backend tertentu di TargetEndpoint.

Pada contoh di bawah, keepalive.timeout.millis disetel ke 30 detik dalam konfigurasi TargetEndpoint:

<!-- /antipatterns/examples/disable-persistent-connections-1.xml -->
<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="keepalive.timeout.millis">30000</Property>
    </Properties>
  </HTTPTargetConnection>Disable HTTP persistent (Reusable keep-alive) connections
</TargetEndpoint>

Pada contoh di atas, keepalive.timeout.millis mengontrol perilaku keep alive untuk layanan backend tertentu di proxy API. Ada juga properti yang mengontrol perilaku "tetap aktif" untuk semua layanan backend di semua proxy. HTTPTransport.keepalive.timeout.millis dapat dikonfigurasi dalam komponen Pemroses Pesan. Properti ini juga memiliki nilai default 60 detik. Melakukan perubahan pada properti ini akan memengaruhi perilaku koneksi tetap antara Apigee Edge dan semua layanan backend di semua proxy API.

Antipola

Menonaktifkan koneksi persisten (tetap aktif) dengan menetapkan properti keepalive.timeout.millis ke 0 dalam konfigurasi TargetEndpoint pada Proxy API tertentu atau menetapkan HTTPTransport.keepalive.timeout.millis ke 0 di Prosesor Pesan tidak direkomendasikan karena akan memengaruhi performa.

Dalam contoh di bawah, konfigurasi TargetEndpoint menonaktifkan koneksi persisten (tetap aktif) untuk layanan backend tertentu dengan menetapkan keepalive.timeout.millis ke 0:

<!-- /antipatterns/examples/disable-persistent-connections-2.xml -->
<TargetEndpoint name="default">
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
    <Properties>
      <Property name="keepalive.timeout.millis">0</Property>
     </Properties>
  </HTTPTargetConnection>
</TargetEndpoint>

Jika koneksi keep alive dinonaktifkan untuk satu atau beberapa layanan backend, Edge harus membuka koneksi baru untuk setiap permintaan baru ke layanan backend target. Jika backend adalah HTTP, Edge juga akan melakukan handshake SSL untuk setiap permintaan baru, sehingga menambah latensi permintaan API secara keseluruhan.

Dampak

  • Meningkatkan waktu respons keseluruhan permintaan API karena Apigee Edge harus membuka koneksi baru dan melakukan handshake SSL untuk setiap permintaan baru.
  • Koneksi dapat habis dalam kondisi traffic yang tinggi, karena perlu waktu untuk melepaskan koneksi kembali ke sistem.

Praktik Terbaik

  • Layanan backend harus mematuhi dan menangani koneksi persisten HTTP sesuai dengan standar HTTP 1.1.
  • Layanan backend harus merespons dengan header Connection:keep-alive jika dapat menangani koneksi persisten (tetap aktif).
  • Layanan backend harus merespons dengan header Connection:close jika tidak dapat menangani koneksi persisten.

Menerapkan pola ini akan memastikan bahwa Apigee Edge dapat otomatis menangani koneksi persisten atau non-persisten dengan layanan backend, tanpa memerlukan perubahan pada proxy API.

Bacaan lebih lanjut