Menguasai Service Discovery & Registry Spring Boot menggunakan Spring Cloud Netflix Eureka

Article image

Pengenalan Microservice Traffic

Arsitektur layanan mikro adalah pendekatan yang membagi sebuah aplikasi menjadi sejumlah layanan kecil yang berdiri sendiri dan saling berkomunikasi melalui jaringan. Metode ini mendistribusikan fungsi aplikasi secara terdesentralisasi, sehingga meningkatkan kemampuan aplikasi untuk diskalakan dan ketahanannya terhadap gangguan. Namun, karena banyaknya interaksi antar layanan, pengelolaan lalu lintas komunikasi antar layanan ini bisa menjadi sangat kompleks. Oleh karena itu, pengelolaan lalu lintas yang efektif sangat penting untuk menjaga performa dan keandalan sistem, sehingga mekanisme penemuan dan pendaftaran layanan menjadi elemen kunci dalam arsitektur ini

Service Discovery & Registry

Service discovery dan registry memungkinkan layanan mikro untuk saling menemukan dan berkomunikasi secara dinamis tanpa perlu menggunakan alamat yang ditetapkan secara statis. Mekanisme penemuan dinamis ini mendukung proses penskalaan dan ketahanan sistem secara mulus, karena layanan dapat dengan mudah ditambahkan atau dihapus tanpa mengganggu keseluruhan sistem. Beberapa komponen utama dari mekanisme ini meliputi:

  • Service Registry: Basis data berisikan instans layanan yang tersedia
  • Service Discovery: Proses menemukan layanan
  • Service Registration: Proses mendaftarkan layanan ke registri

Kenapa tradisional load balancer tidak cocok untuk microservices

  1. load balancer tradisional dibuat untuk lingkungan yang statis, dengan server backend yang jarang berubah dan menggunakan metode seperti round-robin untuk mendistribusikan permintaan. Namun, dalam arsitektur microservice yang dinamis, layanan sering dijalankan dalam kontainer yang bisa bertambah atau berkurang sesuai kebutuhan. tradisional load balancer sulit mengikuti perubahan cepat ini karena tidak dapat memperbarui konfigurasinya secara otomatis berdasarkan kondisi sistem saat ini.
  2. tradisional load balancer bekerja berdasarkan alamat IP, port, atau URL, tanpa menyadari perubahan dinamis microservice. Akibatnya, permintaan bisa diarahkan ke instans yang sudah tidak aktif, atau instans baru tidak dimanfaatkan secara optimal, sehingga mengurangi efisiensi dan skalabilitas.
  3. Meskipun mendukung pemeriksaan kesehatan dasar, penyeimbang tradisional load balancer tidak mampu melakukan pengecekan mendalam atau integrasi dengan mekanisme pemulihan otomatis microservice. Hal ini membuatnya kurang efektif dalam menjaga ketersediaan dan kesehatan layanan secara real-time.

 Dynamic Service Discovery and Load Balancing

Service discovery dan dynamic load balancing adalah solusi penting untuk mengatasi keterbatasan penyeimbang beban tradisional dalam arsitektur microservices. Setiap layanan secara otomatis mendaftar ke service registry saat mulai berjalan dan menghapus pendaftarannya saat berhenti, sehingga registry selalu memiliki daftar instans layanan yang terbaru.

 Load balancer dinamis menggunakan data ini untuk mengarahkan permintaan ke instans yang sehat dan tersedia, dengan konfigurasi yang diperbarui secara otomatis sesuai perubahan status layanan. Contohnya adalah Spring Cloud Netflix Eureka, yang memungkinkan layanan mendaftar dan menemukan layanan lain secara otomatis, menghilangkan kebutuhan pembaruan manual dan mendukung skalabilitas sistem secara mulus.

Setup Service Discovery Using Netflix Eureka Server

Eureka, sebuah registri layanan yang disediakan oleh Netflix, digunakan secara luas dalam aplikasi Spring Cloud.

1. Menambahkan dependecy di pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2. Mengaktifkan eureka

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

3. Config application.properties

spring.application.name=eureka-server
server.port=8761

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

Connect Service To Eureka Server

Disalah satu service yang tersedia dapat menginstall client service discovery

1. Install dependency eureka client 

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2. Enable eureka client

@SpringBootApplication
@EnableEurekaClient
public class AccountsServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(AccountsServiceApplication.class, args);
    }
}

3. Config application.properties

spring.application.name=accounts-service
server.port=8081

eureka.client.service-url.defaultZone=http://localhost:8761/eureka

Setup Heatbeat Mechanism From Client To Eureka Server

Client Service mengirimkan heartbeat berkala ke server Eureka untuk mengonfirmasi ketersediaannya. Jika server tidak menerima heartbeat dalam waktu yang ditentukan, server akan menandai service tersebut sebagai tidak tersedia. Hal ini dapat dikonfigurasikan di application.properties:

eureka.instance.lease-renewal-interval-in-seconds=10
eureka.instance.lease-expiration-duration-in-seconds=30

Usage to invoke other microservice

Kita dapat menggunakan feign client untuk melakukan panggilan API keservice yang diinginkan dengan menyebutkan nama servicenya

contoh: 

@FeignClient(name = "loans-service")
public interface LoansClient {
    @GetMapping("/loans")
    List<Loan> getLoans();
}

@Service
public class AccountsService {
    @Autowired
    private LoansClient loansClient;
    public List<Loan> getCustomerLoans() {
        return loansClient.getLoans();
    }
}




More Articles

bg-cta suiten

Unleash your inner tech geek! Explore our new blog section for the hottest gadget reviews and tech trends.