Spring Cloud: Service Discovery Menggunakan Eureka

RZLWLDN
TLabCircle
Published in
4 min readDec 2, 2020

Salah satu aspek utama arsitektur microservice adalah service discovery. Spring Cloud menyediakan beberapa solusi seperti Eureka, Zookeeper, Cloud Foundry dan Consul untuk memfasilitasi proses Service Discovery tersebut. Artikel ini ditujukan untuk memberi penjelasan sederhana tentang Service Discovery dengan Eureka. Saya akan membahas topik-topik berikut di artikel ini.

  • Apa itu Service Discovery?
  • Apa itu Spring Cloud Eureka?
  • Komunikasi Eureka Client-Server.

Apa itu Service Discovery?

Sistem terdistribusi biasanya terdiri dari sejumlah service yang saling berkomunikasi untuk melakukan operasi tertentu. Service Discovery adalah proses satu layanan secara dinamis menemukan lokasi jaringan (alamat IP dan Port) dari service lain untuk berkomunikasi.

Bayangkan skenario yang mana satu service REST (Service A) mencoba memanggil service REST lain (Service B). Untuk membuat request, Service A perlu mengetahui lokasi jaringan (alamat IP dan port) Service B. Dalam ekosistem SOA (Service Oriented Architecture) konvensional, lokasi jaringan suatu service hampir tidak akan berubah, karena mereka ditempatkan di satu data center. Sehingga kita perlu menyimpan lokasi jaringan setiap service di dalam file konfigurasi, yang mana jarang diperbarui. Misalnya, Service A menyimpan alamat IP dan port Service B dalam file konfigurasi dan menggunakan nilai-nilai tersebut saat membuat request. Gambar berikut menggambarkan aliran ini.

Namun, pendekatan ini hampir tidak mungkin dilakukan dalam arsitektur microservice berbasis cloud karena alasan berikut.

Jumlah service semakin banyak: seperti yang kalian ketahui, arsitektur microservice adalah sebuah metode untuk memecah sistem monolith menjadi pecahan service kecil yang saling berkomunikasi. Oleh karena itu, sulit bagi satu service untuk mempertahankan lokasi jaringan dari semua service lain, yang harus berkomunikasi dengannya, dalam file konfigurasi.

Lokasi jaringan yang ditetapkan secara dinamis: Microservice umumnya di deploy di dalam cloud dengan kondisi server instance memiliki lokasi jaringan yang dinamis. Cloud pun memiliki fitur dasar seperti auto scaling yang membuat setiap service yang berjalan di atas server instance baru akan memiliki lokasi jaringan yang berbeda. Karena itulah, sulit untuk mempertahankan alamat IP target dan nomor port dari service tertentu dalam file properti, sebab nilainya cenderung sering berubah.

Permasalahan tersebutlah yang memunculkan kebutuhan baru akan mekanisme yang lebih canggih agar microservice dapat secara dinamis menemukan lokasi jaringan service lain untuk berkomunikasi. Dan mekanisme tersebut adalah service discovery yang menggunakan central registry untuk memelihara lokasi jaringan dari semua service. Dengan service discovery, ketika alamat IP dan nomor port dari service tertentu berubah karena alasan tertentu, maka nilai baru akan segera didaftarkan ulang di dalam registry.

Apa itu Spring Cloud Eureka ?

Eureka adalah service berbasis REST yang bertugas untuk memperoleh informasi tentang service yang ingin diajak berkomunikasi. Service REST ini juga dikenal sebagai Eureka Server. Service yang terdaftar di Eureka Server untuk mendapatkan informasi tentang service lainnya disebut Eureka Client. Diagram berikut menggambarkan bagaimana klien dan server Eureka bekerja sama.

Seperti yang ditunjukkan diagram di atas, Service A dan Service B terdaftar di server Eureka. Jika salah satu dari dua service ini ingin berkomunikasi dengan layanan lain, service tersebut dapat memperoleh alamat IP target dan port melalui server Eureka.

Komunikasi Eureka Client-Server

Register: Eureka Client mendaftarkan informasi tentang instance yang sedang berjalan ke Eureka Server.

Renew: Eureka Client perlu memperbarui kontrak dengan mengirimkan heartbeats setiap 30 detik. Pembaruan memberi tahu Eureka Server bahwa instance masih hidup.

Fetch Registry: Eureka Client mengambil informasi registry dari server dan menyimpannya secara lokal. Setelah itu, klien menggunakan informasi tersebut untuk mencari service lain.

Cancel: Eureka Client mengirimkan permintaan pembatalan ke Eureka Server saat dimatikan. Ini menghapus instance dari server.

Kesimpulan

Tujuan utama artikel ini adalah memberi pengantar tentang penggunaan Eureka untuk Service Discovery. Dalam skenario dunia nyata, ekosistem microservice dapat memiliki ribuan service yang diterapkan di berbagai wilayah di dunia. Dalam hal ini, mungkin tidak praktis untuk hanya memiliki satu cluster Eureka. Sebagai gantinya, kita harus menerapkan beberapa cluster Eureka di berbagai wilayah untuk meminimalkan latensi dan meningkatkan ketersediaan. Ini diilustrasikan pada gambar di bawah ini.

Referensi lain untuk belajar lebih dalam tentang Eureka dan Service Registry Pattern, bisa kunjungi situs-situs ini:

--

--