Kinerja Gateway API Open-Source: APISIX 3.0 dan Kong 3.0

Zhengsong Tu

November 3, 2022

Products

Latar Belakang

Apache APISIX adalah sebuah API gateway yang bersifat cloud-native, berkinerja tinggi, dan dapat diskalakan. APISIX diimplementasikan berdasarkan NGINX dan etcd. Selain fitur-fitur yang dimiliki oleh API gateway tradisional, APISIX memiliki fitur routing dinamis dan plugin hot-reloading, yang membuatnya sangat kuat dalam manajemen API pada arsitektur cloud-native.

Arsitektur Apache APISIX

Pada musim gugur 2022, Apache APISIX dan Kong merilis versi 3.0 mereka hampir bersamaan. Khususnya, fitur baru Apache APISIX 3.0 berfokus pada ekosistem, kecerdasan, dan aplikasi. Anda dapat melihat Apache APISIX 3.0: 11 Sorotan API Gateway Open Source untuk mempelajari lebih lanjut.

Keduanya adalah API gateway open-source yang sangat baik untuk microservices. Ketika dua produk dirilis secara bersamaan, banyak pengguna tertarik dengan perbedaan fitur dan kinerja mereka. Dalam artikel ini, kami akan menyajikan hasil kinerja dari pengujian pada empat skenario yang berbeda.

Metode Pengujian

Topologi Permintaan

Berikut adalah diagram topologi dari permintaan pengujian. Alat uji tekanan yang digunakan adalah wrk2, dan layanan upstream yang digunakan adalah OpenResty.

APISIX

Topologi permintaan APISIX

Kong

Topologi permintaan Kong

Informasi Server

Pengujian ini dilakukan pada server cloud dengan spesifikasi Standard D8s v3 (8 vcpu, 32 GiB memori). Semua komponen yang terkait dengan pengujian di-deploy pada server ini.

Lingkungan Server

NamaNilai
OSDebian 10 "buster"
ulimit -n65535

Versi Perangkat Lunak

Berikut adalah versi perangkat lunak yang digunakan dalam pengujian ini:

NamaVersi
Docker20.10.18, build b40c2f6
APISIX3.0.0
Kong3.0.0
UpstreamOpenResty 1.21.4.1
Alat ujiwrk2

Pengaturan Jaringan

Saat meng-deploy APISIX dan Kong di docker, kami menggunakan mode jaringan host di docker untuk menghindari implikasi jaringan yang dapat memengaruhi hasil pengujian.

Deployment

Kami memilih wrk2 sebagai alat pengujian benchmark dan OpenResty sebagai upstream simulasi. Kami meng-deploy APISIX dan Kong di docker dengan konfigurasi deklaratif yang diaktifkan untuk keduanya.

Kami ingin membuat hasil pengujian lebih intuitif, jadi kami hanya menggunakan satu worker untuk pengujian. Biasanya, hubungan antara kapasitas beban dan jumlah worker bersifat linear. Jadi, hanya satu worker sudah cukup untuk pengujian.

Selain itu, APISIX telah mematikan plugin proxy-cache dan proxy-mirror, yang disebutkan dalam dokumen terkait benchmark di proyek APISIX (plugin proxy-cache dan proxy-mirror akan memengaruhi kinerja APISIX sekitar 4%).

Lihat skrip deployment dan referensi skrip pengujian di sini.

Pengujian

Pengujian #1: 1 Rute

Menguji skenario proxy murni. Kami hanya akan menggunakan satu rute dan tidak ada plugin untuk menguji kinerja APISIX dan Kong.

Konfigurasi APISIX:

routes: - uri: /hello upstream: nodes: "127.0.0.1:1980": 1 type: roundrobin #END

Konfigurasi Kong:

_format_version: "3.0" _transform: true services: - name: hello url: http://127.0.0.1:1980 routes: - name: hello paths: - /hello

Perbandingan Kinerja

performance(1).png

Kami menggunakan metrik QPS untuk mengukur kinerja. Total 10 putaran pengujian dilakukan.

Seperti yang dapat kita lihat dari grafik, dalam skenario proxy murni, kinerja APISIX 3.0 jauh lebih tinggi daripada Kong 3.0. Rata-rata QPS APISIX 3.0 dalam 10 putaran adalah 14104, dan rata-rata QPS Kong 3.0 dalam 10 putaran adalah 9857. Kinerja APISIX 3.0 adalah 140% dari Kong 3.0.

Pengujian #2: 1 Rute + 1 Plugin Rate-limiting

Pembatasan laju adalah salah satu skenario pengguna utama dari API gateway. Jadi, dalam skenario ini, kami mengonfigurasi gateway dengan satu rute dan satu plugin pembatasan laju.

Konfigurasi APISIX:

routes: - uri: /hello upstream: nodes: "127.0.0.1:1980": 1 type: roundrobin plugins: limit-count: count: 999999999 time_window: 60 rejected_code: 503 key: remote_addr #END

Konfigurasi Kong:

_format_version: "3.0" _transform: true services: - name: hello url: http://127.0.0.1:1980 routes: - name: hello paths: - /hello plugins: - name: rate-limiting config: minute: 999999999 limit_by: ip policy: local

Pengujian ini mengukur kinerja API gateway dalam skenario pembatasan laju. Kami mengonfigurasi plugin pembatasan laju ke batas yang lebih tinggi untuk menghindari memicu tindakan pembatasan laju yang sebenarnya.

Perbandingan Kinerja

performance(2).png

Sekali lagi, kami melakukan total 10 putaran pengujian. Kita dapat melihat dari grafik bahwa setelah mengaktifkan plugin pembatasan laju, QPS APISIX 3.0 dan Kong 3.0 keduanya turun secara signifikan, tetapi QPS Kong 3.0 turun lebih banyak. Rata-rata QPS 10 putaran APISIX 3.0 adalah 9154, dan rata-rata QPS 10 putaran Kong 3.0 adalah 4810. Dalam skenario ini, kinerja APISIX 3.0 adalah 190% dari Kong 3.0.

Pengujian #3: 1 Rute + 1 Plugin Rate-limiting + 1 Plugin Autentikasi

Autentikasi adalah skenario pengguna umum lainnya dari API gateway.

Dalam skenario ini, kami mengonfigurasi gateway dengan satu rute, satu plugin pembatasan laju, dan satu plugin autentikasi.

Konfigurasi APISIX:

routes: - uri: /hello upstream: nodes: "127.0.0.1:1980": 1 type: roundrobin plugins: key-auth: limit-count: count: 999999999 time_window: 60 rejected_code: 503 key: remote_addr consumers: - username: jack plugins: key-auth: key: user-key #END

Konfigurasi Kong:

_format_version: "3.0" _transform: true services: - name: hello url: http://127.0.0.1:1980 routes: - name: hello paths: - /hello plugins: - name: rate-limiting config: minute: 999999999 limit_by: ip policy: local - name: key-auth config: key_names: - apikey consumers: - username: my-user keyauth_credentials: - key: my-key

Skenario ini mencakup pembatasan laju dan autentikasi sehingga beberapa plugin bekerja bersama dalam jalur permintaan. Ini adalah skenario khas yang menggunakan API gateway.

Perbandingan Kinerja

performance(3).png

Sekali lagi, kami melakukan sepuluh putaran pengujian untuk mengukur QPS.

Kita dapat melihat dari grafik bahwa setelah APISIX mengaktifkan plugin limit-count dan key-auth, rata-rata QPS APISIX 3.0 adalah 8933, yang hanya sedikit lebih rendah dari rata-rata QPS 9154 ketika hanya plugin limit-count yang diaktifkan.

Namun, pada Kong 3.0, rata-rata QPS turun menjadi 3977, yang merupakan penurunan yang signifikan dibandingkan dengan rata-rata QPS 4810 ketika hanya plugin rate-limiting yang diaktifkan.

Dalam skenario ini, dengan mengaktifkan plugin pembatasan laju dan autentikasi, kinerja APISIX 3.0 adalah 220% dari Kong 3.0.

Pengujian #4: 5000 Rute

Pengujian ini menggunakan skrip untuk menghasilkan 5000 rute unik. Pengujian mengukur kinerja APISIX dan Kong dalam pencocokan rute: seberapa cepat menemukan kecocokan.

Perbandingan Kinerja

performance(4).png

Dalam 10 putaran pengujian, rata-rata QPS APISIX 3.0 adalah 13787, dan rata-rata Kong 3.0 adalah 9840. Kinerja APISIX 3.0 adalah 140% dari Kong 3.0.

Kesimpulan

Dari hasil pengujian beberapa skenario, terlihat bahwa:

  • kinerja APISIX 3.0 adalah sekitar 140% dari Kong 3.0 ketika plugin tidak digunakan (Pengujian #1 dan Pengujian #4).
  • Kinerja APISIX 3.0 adalah sekitar 200% dari Kong 3.0 ketika plugin digunakan (Pengujian #2 dan Pengujian #3)

Kita dapat melihat bahwa APISIX mempertahankan keunggulan kinerja yang cukup besar dalam versi 3.0-nya.

Tags: