Spring Cloud Euroka Server kullanarak Microserviceler arası load balancing mekanizması nasıl çalışır? Spring Cloud LoadBalancer Feign clientla load balancing yapar mı? Arka planda load balancingi gerçekleştiren unsurlar varsa özelleştirilmiş yapılar nelerdir?

Spring Cloud Euroka Server kullanarak Microserviceler arası load balancing mekanizması nasıl çalışır? Spring Cloud LoadBalancer Feign clientla load ba



Spring Cloud Eureka Server, microserviceler arasında yük dengeleme (load balancing) ve servis keşfi (service discovery) için kullanılan güçlü bir araçtır. Eureka Server ve Eureka Client bileşenlerinin nasıl çalıştığını ve load balancing mekanizmasının nasıl işlediğini açıklayalım:

1. Eureka Server Kurulumu

Eureka Server, microservicelerin kendi durumlarını kaydettikleri ve diğer servislerin bu kayıtları kullanarak iletişim kurdukları merkezi bir kayıt defteridir.

Adımlar:

  1. Spring Boot Projesi Oluşturun:

    bash
    spring init --dependencies=cloud-eureka-server eurekaserver cd eurekaserver
  2. pom.xml veya build.gradle Dosyasına Eureka Server Bağımlılığını Ekleyin:

    xml
    <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
  3. Ana Uygulama Sınıfını Yapılandırın:

    java
    @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
  4. application.yml veya application.properties Dosyasını Yapılandırın:

    yaml
    server: port: 8761 eureka: client: register-with-eureka: false fetch-registry: false server: wait-time-in-ms-when-sync-empty: 0

2. Eureka Client Kurulumu

Microservice'lerin Eureka Server'a kayıt olabilmesi ve diğer servisleri keşfedebilmesi için Eureka Client olarak yapılandırılması gerekmektedir.

Adımlar:

  1. Spring Boot Projesi Oluşturun:

    bash
    spring init --dependencies=web,cloud-eureka-client microservice-a cd microservice-a
  2. pom.xml veya build.gradle Dosyasına Eureka Client Bağımlılığını Ekleyin:

    xml
    <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
  3. Ana Uygulama Sınıfını Yapılandırın:

    java
    @SpringBootApplication @EnableEurekaClient public class MicroserviceAApplication { public static void main(String[] args) { SpringApplication.run(MicroserviceAApplication.class, args); } }
  4. application.yml veya application.properties Dosyasını Yapılandırın:

    yaml
    eureka: client: service-url: defaultZone: http://localhost:8761/eureka/

3. Load Balancing Mekanizması

Eureka ile load balancing mekanizmasını kullanmak için, Spring Cloud Netflix Ribbon veya Spring Cloud LoadBalancer kullanılabilir.

Ribbon Kullanımı:

  1. Ribbon Bağımlılığını Ekleyin:

    xml
    <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
  2. RestTemplate ile Load Balancing Kullanımı:

    java
    @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); }
  3. Servis Çağrısı:

    java
    @Autowired private RestTemplate restTemplate; public String callService() { return restTemplate.getForObject("http://microservice-b/endpoint",
  4. String.class); }

Özet:

  • Eureka Server, servislerin kendilerini kayıt ettikleri merkezi bir noktadır.
  • Eureka Client, servislerin Eureka Server'a kayıt olup diğer servisleri keşfetmelerini sağlar.
  • Load balancing mekanizması, servis çağrılarının yükünü dengeleyerek performansı artırır ve kesintisiz hizmet sunar.
  • Ribbon veya Spring Cloud LoadBalancer kullanarak RestTemplate ile load balancing gerçekleştirilebilir.

Bu yapı ile microservisler arasında etkin bir yük dengeleme ve servis keşfi sağlanmış olur.


Spring Cloud LoadBalancer, Feign client ile load balancing yapabilir. Spring Cloud LoadBalancer, Netflix Ribbon'un yerini alarak modern ve daha esnek bir yük dengeleme mekanizması sağlar.

Feign Client ile Load Balancing

Spring Cloud LoadBalancer, Feign client ile entegre çalışarak yük dengeleme işlemini gerçekleştirir. Feign client, servis çağrıları yaparken Spring Cloud LoadBalancer'ı kullanarak servisler arası yük dengeleme sağlar.

Feign Client Yapılandırması:

  1. Spring Boot Projesi Oluşturun:

    bash
    spring init --dependencies=web,cloud-eureka-client,cloud-loadbalancer,
  2. cloud-openfeign feign-client cd feign-client
  3. pom.xml veya build.gradle Dosyasına Bağımlılıkları Ekleyin:

    xml
    <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
  4. Feign Client Arayüzünü Tanımlayın:

    java
    @FeignClient(name = "microservice-b") public interface MicroserviceBClient { @GetMapping("/endpoint") String getEndpoint(); }
  5. Feign Client Kullanımı:

    java
    @SpringBootApplication @EnableFeignClients public class FeignClientApplication { public static void main(String[] args) { SpringApplication.run(FeignClientApplication.class, args); } } @RestController public class FeignClientController { @Autowired private MicroserviceBClient microserviceBClient; @GetMapping("/call") public String callServiceB() { return microserviceBClient.getEndpoint(); } }
  6. application.yml veya application.properties Dosyasını Yapılandırın:

    yaml
    eureka: client: service-url: defaultZone: http://localhost:8761/eureka/

Arka Planda Load Balancing'i Gerçekleştiren Unsurlar

Spring Cloud LoadBalancer, yük dengeleme işlemini gerçekleştirmek için çeşitli unsurlar kullanır:

  1. ServiceInstanceListSupplier: ServiceInstanceListSupplier, yük dengeleme için kullanılacak servis örneklerinin listesini sağlar. Varsayılan olarak, Eureka üzerinden alınan servis örnekleri kullanılır.

    Özelleştirilmiş bir ServiceInstanceListSupplier tanımlayabilirsiniz:

    java
    @Bean public ServiceInstanceListSupplier serviceInstanceListSupplier() { return ServiceInstanceListSupplier.builder() .withDiscoveryClient() .withHealthChecks() .build(); }
  2. LoadBalancerClient: LoadBalancerClient, servis çağrıları sırasında yük dengeleme işlemini gerçekleştirir. Feign client, bu bileşeni kullanarak uygun bir servis örneğine yönlendirilir.

  3. LoadBalancerConfiguration: Özelleştirilmiş yük dengeleme stratejileri oluşturmak için LoadBalancerConfiguration kullanılabilir. Örneğin, rastgele seçim yerine ağırlıklı seçim gibi farklı stratejiler uygulanabilir.

    Özelleştirilmiş bir yük dengeleme yapılandırması örneği:

    java
    @Configuration public class CustomLoadBalancerConfiguration { @Bean public ReactorLoadBalancer<ServiceInstance> randomLoadBalancer( Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) { String name = environment.getProperty(LoadBalancerClientFactory.
  4. PROPERTY_NAME); return new RandomLoadBalancer( loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name); } }

Özet

  • Spring Cloud LoadBalancer, Feign client ile entegre çalışarak yük dengeleme sağlar.
  • ServiceInstanceListSupplier, servis örneklerini sağlar.
  • LoadBalancerClient, yük dengeleme işlemini gerçekleştirir.
  • Özelleştirilmiş yük dengeleme stratejileri ve yapılandırmaları LoadBalancerConfiguration ile oluşturulabilir.

Bu yapı ile Feign client kullanarak servisler arasında etkin bir yük dengeleme sağlanabilir ve ihtiyaçlarınıza göre özelleştirilmiş stratejiler uygulanabilir.

Hiç yorum yok

Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo