API Gateway dan Service Discovery: Integrasi Microservices yang Mulus

February 7, 2024

Technology

Di era digital, Application Programming Interfaces (APIs) telah menjadi landasan komunikasi antara berbagai sistem dan layanan.

Dengan maraknya arsitektur microservices, pentingnya API gateway dan service discovery semakin menonjol. API gateway berfungsi sebagai pintu masuk arsitektur microservices, bertanggung jawab untuk menangani semua permintaan eksternal dan mengoordinasikan komunikasi antara layanan internal; sedangkan service discovery memastikan sistem dapat secara dinamis menemukan dan terhubung ke instance layanan yang benar.

Bersama-sama, mereka membangun sistem terdistribusi yang efisien, fleksibel, dan skalabel. Artikel ini membahas hubungan antara API gateway dan service discovery, serta peran penting mereka dalam sistem terdistribusi modern.

API Gateway dan Service Discovery

Sebagai pintu masuk arsitektur microservices, API gateway menangani semua permintaan eksternal dan memfasilitasi komunikasi dengan layanan internal. Fungsi utamanya meliputi:

  • Perutean dan penerusan permintaan: Mengarahkan permintaan ke layanan yang sesuai berdasarkan karakteristik permintaan.
  • Kontrol akses dan autentikasi keamanan: Memastikan hanya pengguna atau sistem yang berwenang yang dapat mengakses API.
  • Load balancing dan caching: Mengoptimalkan kinerja layanan dengan mendistribusikan permintaan secara merata ke berbagai instance layanan dan menyediakan caching untuk mengurangi permintaan ke layanan backend.
  • Pencatatan dan analisis: Mengumpulkan dan menganalisis data penggunaan API untuk mendukung pengambilan keputusan bisnis.

Service discovery adalah mekanisme yang digunakan untuk secara otomatis menemukan instance layanan yang tersedia dalam sistem terdistribusi. Ketika jumlah layanan besar dan berubah secara dinamis, service discovery menjadi sangat penting. Prinsip pendaftaran dan penemuan layanan adalah sebagai berikut:

  • Pendaftaran layanan: Ketika sebuah layanan dimulai, ia mendaftarkan informasinya (seperti alamat IP, nomor port, dll.) ke registri layanan.
  • Penemuan layanan: Ketika layanan lain perlu memanggil layanan ini, mereka menanyakan registri layanan untuk menemukan instance layanan yang tersedia dan memilih satu untuk komunikasi.

Hubungan antara API Gateway dan Service Discovery

API gateway berfungsi sebagai "penjaga gerbang" yang menangani semua permintaan eksternal dan secara cerdas mengarahkannya ke instance layanan yang benar. API gateway dan service discovery saling bergantung dalam arsitektur microservices, memberikan stabilitas dan skalabilitas.

Sebelum memperkenalkan service discovery, API gateway mengandalkan konfigurasi manual untuk menentukan alamat layanan upstream. Ketika alamat instance layanan berubah, seperti karena pembaruan, peralihan darurat ke instance cadangan, atau penambahan lebih banyak instance layanan karena peningkatan lalu lintas, administrator harus secara manual memperbarui konfigurasi API gateway secara tepat waktu. Pendekatan ini tidak hanya tidak efisien tetapi juga sulit untuk memastikan keakuratan dan ketepatan waktu.

Melalui mekanisme service discovery, API gateway dapat secara dinamis terhubung ke registri layanan secara real-time, secara otomatis mendapatkan alamat instance terbaru dari semua layanan upstream, dan memastikan permintaan diarahkan dengan tepat ke layanan baru.

Pada saat yang sama, mekanisme service discovery dapat segera memberi tahu API gateway tentang kondisi kesalahan, secara efektif menghindari pengarahan permintaan ke layanan yang tidak tersedia. Dengan mengonfigurasi alamat registri layanan dan nama layanan, API gateway telah membuat kemajuan signifikan dalam penggunaan ulang konfigurasi di berbagai lingkungan, mengurangi beban kerja konfigurasi, dan meningkatkan penggunaan ulang dan keakuratan konfigurasi.

Service Discovery

Aplikasi Praktis Integrasi API Gateway dengan Kubernetes Service Discovery

Misalkan kita memiliki sistem arsitektur microservices berbasis Kubernetes, yang mengimplementasikan beberapa layanan seperti layanan pengguna, layanan pesanan, layanan pembayaran, dll. Setiap layanan memiliki beberapa replika (Pods), dan alamat IP serta nomor port dari replika ini berubah secara dinamis seiring dengan pembuatan dan penghancuran container.

Dalam skenario ini, kita ingin menggunakan API gateway untuk menangani permintaan eksternal dan secara cerdas mengarahkannya ke layanan Kubernetes yang benar. Pada saat yang sama, kita ingin memanfaatkan mekanisme service discovery Kubernetes untuk secara dinamis menemukan dan mengelola instance layanan.

Langkah 1: Penyebaran dan Pendaftaran Layanan

Di Kubernetes, kita menggunakan Deployments atau StatefulSets untuk menyebarkan layanan dan membuat Services yang sesuai sebagai abstraksi layanan. Kubernetes Services secara otomatis menyediakan load balancing untuk Pods backend dan memetakan nama layanan ke alamat IP internal cluster yang stabil dan nomor port.

Ketika Pods dibuat atau dihancurkan, Service Controller Kubernetes secara otomatis memperbarui objek Endpoint dari layanan, yang berisi alamat IP dan nomor port dari semua Pods terkait. Objek Endpoint ini disimpan di API server Kubernetes untuk ditanyakan oleh komponen lain.

Langkah 2: Penyebaran dan Konfigurasi API Gateway

Mengambil API7 Enterprise sebagai contoh, kita terhubung ke alamat registri layanan Kubernetes di grup gateway. Ketika kita mempublikasikan layanan ke grup gateway, alih-alih memasukkan alamat instance upstream secara manual, kita memilih registri Kubernetes ini dan menentukan namespace serta Service yang sesuai di dalamnya. API7 Enterprise secara otomatis mengambil informasi Endpoint dari layanan yang sesuai dari API server Kubernetes sebagai alamat upstream layanan.

Langkah 3: Penanganan Permintaan

Ketika API gateway menerima permintaan eksternal, ia menentukan layanan mana yang akan mengarahkan permintaan berdasarkan aturan perutean yang dikonfigurasi. Kemudian, ia menanyakan API server Kubernetes untuk mendapatkan informasi upstream terbaru. API gateway memilih instance dari informasi ini (berdasarkan strategi load-balancing yang berbeda) dan meneruskan permintaan ke instance tersebut. Karena informasi Endpoint diperbarui secara dinamis, API gateway dapat secara otomatis menangani pembuatan, penghancuran, dan migrasi Pods, memastikan permintaan selalu diarahkan ke upstream yang tersedia.

Langkah 4: Penemuan dan Pembaruan Layanan

Di Kubernetes, service discovery dilakukan secara otomatis. Ketika status Pods berubah (seperti pembuatan, penghancuran, atau migrasi), Service Controller Kubernetes secara otomatis memperbarui objek Endpoint dari layanan yang sesuai.

API gateway secara teratur mengambil informasi Endpoint terbaru dari API server Kubernetes dan memperbarui upstream-nya berdasarkan informasi ini. Hal ini memungkinkan API gateway untuk segera merasakan perubahan status layanan dan secara otomatis menyesuaikan aturan perutean untuk memastikan permintaan diarahkan dengan benar ke instance layanan yang tersedia.

Kesimpulan

Melalui integrasi API gateway dan service discovery Kubernetes, sistem kita dapat mencapai pendaftaran dan penemuan layanan dinamis, perutean cerdas, dan load balancing. Pendekatan ini menyederhanakan konfigurasi dan manajemen sistem, meningkatkan keandalan dan skalabilitas sistem, dan memanfaatkan sepenuhnya fitur kuat yang disediakan oleh Kubernetes, membuat penyebaran dan operasi arsitektur microservices menjadi lebih sederhana dan efisien.

Tags: