Dari Traefik ke APISIX, Eksplorasi Horizon Robotics dalam Ingress Controller

Xin Zhang

October 10, 2022

Ecosystem

Dalam industri otomotif, sebagian besar perusahaan sedang beralih ke kendaraan otonom dan energi baru. Terutama untuk kendaraan otonom, setiap perusahaan telah menginvestasikan banyak sumber daya untuk menyelesaikan pengembangan dan pelatihan model kendaraan otonom.

Dalam proses ini, bagaimana memastikan stabilitas dan efisiensi bisnis sementara produk terus berkembang dengan cepat?

Artikel ini akan melihat platform pengembangan AI Horizon Robotics sebagai contoh untuk melihat bagaimana API gateway Apache APISIX dan Ingress Controller membantu tim R&D Horizon Robotics mengatasi tantangan ini.

Perbandingan Gateway

Keterbatasan Traefik

Sebelum menggunakan APISIX Ingress Controller, Ingress Controller yang digunakan oleh sistem bisnis adalah Traefik1.x, tetapi terdapat beberapa masalah.

  • Traefik 1.x mengonfigurasi aturan routing melalui Ingress, dan beberapa plugin perlu dikonfigurasi dengan menambahkan Annotation. Dengan cara ini, Anda hanya dapat menambahkan plugin untuk semua aturan di bawah Ingress saat ini, dan tidak dapat mencapai konfigurasi yang lebih granular.
  • Traefik 1.x tidak mendukung konfigurasi visual untuk aturan tertentu dan tidak dapat langsung mengarahkan ke layanan tertentu dengan mengakses URL permintaan melalui browser.
  • File konfigurasi default Traefik (ConfigMap) hanya memiliki sedikit atribut, dan banyak konfigurasi default perlu merujuk ke dokumentasi resmi, serta beberapa parameter tidak konsisten dengan konfigurasi default NGINX, yang membuat pemeliharaan menjadi lebih rumit.

Menanggapi masalah di atas, tim teknis Horizon Robotics memutuskan untuk mengganti Ingress Controller. Pada awal proses seleksi, tim mempertimbangkan untuk meningkatkan Traefik ke versi 2.0 untuk menyelesaikan masalah di atas, tetapi karena kami juga perlu menggunakan CRD baru untuk upgrade dan biaya migrasi yang mahal, kami harus mencoba solusi Ingress Controller lainnya.

Keunggulan APISIX Ingress Controller

Pada tahap awal seleksi, kami terutama membandingkan Apache APISIX, Kong, dan Envoy. Namun, solusi lain kurang lebih tidak memenuhi kebutuhan skenario yang ada dalam hal fungsionalitas atau kinerja, kecuali APISIX Ingress. Oleh karena itu, kami akhirnya memilih APISIX Ingress. Selain beberapa fitur umum, kami lebih tertarik pada poin-poin berikut.

  • Plugin yang Kaya: Plugin memiliki ekosistem yang baik, dan semua plugin yang didukung oleh APISIX dapat dikonfigurasi secara deklaratif menggunakan apisix-ingress-controller, serta plugin dapat disesuaikan untuk backend tunggal di bawah ApisixRoute.
  • Konfigurasi Visual: Dengan APISIX Dashboard, Anda dapat melihat setiap apisix route. Dan jika domain yang sama dikonfigurasi di beberapa namespaces atau file YAML, Anda dapat mencari prefiks path bersama dengan APISIX Dashboard untuk dengan cepat menemukan konflik.
  • Verifikasi Granular: APISIX Ingress Controller memverifikasi sumber daya yang dideklarasikan dalam CRD yang dikelolanya. Jika layanan yang tidak ada dideklarasikan dalam CRD, pesan kesalahan akan disimpan dalam event dari ApisixRoute dan perubahan tidak akan berlaku, yang dapat mengurangi beberapa masalah yang disebabkan oleh kesalahan penggunaan.
  • Fitur yang Kaya: APISIX mendukung pembaruan panas dan plugin panas, penulisan ulang permintaan proxy, berbagai autentikasi, pengembangan plugin multi-bahasa, dan banyak fitur lainnya. Silakan merujuk ke fitur APISIX untuk informasi lebih lanjut.
  • Komunitas yang Aktif: Dibandingkan dengan komunitas solusi open source lainnya, APISIX memiliki banyak maintainer dan kontributor aktif di Slack, GitHub, dan mailing list.
  • Kinerja Tinggi: Seperti yang dapat dilihat dari grafik di bawah ini, kinerja APISIX sekitar 120% dari Envoy saat dibandingkan dengan tes tekanan Envoy, dan semakin banyak core yang ada, semakin besar perbedaan QPS.

QPS

Arsitektur Keseluruhan

Seperti yang dapat dilihat dari diagram arsitektur di bawah ini, APISIX Ingress berfungsi sebagai titik masuk untuk semua lalu lintas. Semua lalu lintas yang diakses masuk ke upstream (layanan bisnis) melalui APISIX Ingress, baik itu dari alat baris perintah, Web, platform SaaS, atau OpenAPI. Untuk autentikasi, karena perusahaan memiliki layanan autentikasi khusus sendiri, mereka langsung menggunakan plugin forward-auth dari APISIX untuk mencapai autentikasi eksternal.

Arsitektur

Di lapisan gateway, semua lalu lintas masuk melalui nama domain, dan lalu lintas akan melewati LVS terlebih dahulu, yang akan diteruskan ke node APISIX di belakang, dan kemudian APISIX akan mendistribusikan lalu lintas ke Pod yang sesuai berdasarkan aturan routing. Pada LVS, mereka juga mengubah port default APISIX Ingress dari 9180 ke 80 agar LVS dapat langsung menunjuk ke APISIX Ingress, yang memudahkan penerusan lalu lintas.

Diagram Alir

Skenario

Setelah memahami arsitektur keseluruhan, kami akan berbagi beberapa skenario yang saat ini diimplementasikan oleh perusahaan kami dengan APISIX Ingress.

Unggah File Berukuran Besar

Pertama adalah skenario unggah file besar, yang mungkin kurang umum di perusahaan umum, tetapi lebih umum di perusahaan yang melakukan pelatihan model AI. Skenario ini terutama ada dalam sistem pelatihan model Horizon Robotics, di mana data yang dikumpulkan oleh R&D akan diunggah ke sistem melalui jaringan, dan ukuran data biasanya lebih dari beberapa ratus GB, dan OOM akan terjadi ketika jumlah data yang diunggah terlalu besar tanpa menyesuaikan parameter APISIX.

iTerm

Karena client_body_buffer_size default adalah 1MB, ketika buffer penuh, file sementara akan ditulis ke disk, sehingga menyebabkan IO disk yang tinggi.

Jika direktori tempat file sementara ditulis diarahkan ke memori bersama (/dev/shm), ini lagi-lagi menyebabkan APISIX (cache) yang tinggi.

Monitor

Setelah debugging terus-menerus, kami menemukan alasannya adalah APISIX tidak mengaktifkan unggah streaming. Untuk skenario ini, kami meningkatkan versi APISIX dari 2.11 ke 2.13 dan menyesuaikan parameter APISIX. Pertama, kami mengubah parameter proxy_request_buffering menjadi off dari APISIX ConfigMap untuk mengaktifkan unggah streaming. Kedua, kami mengekstrak konfigurasi yang dapat digunakan kembali dari CRD ApisixPluginConfig yang disediakan oleh APISIX Ingress Controller dan secara dinamis mengatur client_max_body_size untuk rute yang membutuhkan skenario ini sebagai konfigurasi tingkat namespace.

Debug

Panggilan Layanan di Lingkungan Multi-cloud

Untuk panggilan layanan di lingkungan multi-cloud, sebagian lalu lintas bisnis pertama kali tiba di IDC lokal, dan kemudian melewati APISIX Ingress untuk mencapai Pod. Beberapa layanan di Pod akan mengakses layanan AliCloud melalui nama domain. Selain itu, beberapa skenario di mana layanan memanggil layanan lain juga ada terutama untuk pelatihan multi-cloud. Pengguna akan mengambil IDC sebagai titik masuk dan memilih kluster untuk mengirimkan tugas ke kluster cloud yang sesuai.

Arsitektur Multi-cloud

Autentikasi Eksternal dengan forward-auth

Ketika kami pertama kali mulai menggunakan APISIX Ingress, APISIX tidak mendukung plugin forward-auth, jadi kami mendefinisikan plugin kustom berdasarkan apisix-go-plugin-runner, tetapi ini menciptakan lapisan panggilan gRPC tambahan, yang membuat debugging sulit dan logging tidak terlihat. Karena APISIX mendukung plugin forward-auth pada awal tahun ini, kami mengganti plugin kustom dengan yang resmi, yang mengurangi satu lapisan panggilan gRPC dan membuat pemantauan lebih mudah.

Arsitektur Autentikasi

Pemantauan Aplikasi

Dalam pemantauan aplikasi, kami mengaktifkan plugin Prometheus APISIX secara global dan melakukan beberapa debugging dan optimasi untuk bisnis kami sendiri, seperti menambahkan konkurensi real-time, QPS, tingkat keberhasilan API APISIX real-time, dan bandwidth APISIX real-time untuk pemantauan yang lebih granular terhadap APISIX.

Pemantauan

Ringkasan

Kami saat ini menggunakan Apache APISIX Ingress Controller sebagai gateway lalu lintas hanya untuk beberapa lini bisnis kami, dan akan meluncurkan bisnis lain untuk memberikan skenario aplikasi yang lebih kaya kepada komunitas. Jika Anda juga membandingkan solusi Ingress Controller, kami berharap artikel ini dapat memberikan beberapa petunjuk. Semakin banyak pengguna yang menggunakan Apache APISIX Ingress di lingkungan produksi, dan jika Anda juga menggunakan APISIX Ingress, silakan bagikan kasus penggunaan Anda di komunitas.

Tags: