Service Discovery ve Service Registry, mikroservis mimarisinin önemli bileşenleridir. Her ikisi de mikroservislerin dinamik olarak keşfedilmesini ve birbirleriyle iletişim kurmasını sağlar. Ancak, bunlar farklı roller oynar ve birlikte çalışarak mikroservislerin yönetimini kolaylaştırır.
Service Registry (Servis Kayıt Defteri)
Service Registry, mikroservislerin ağ üzerindeki yerlerini (IP adresi ve port) kaydettikleri merkezi bir kayıt defteridir. Mikroservisler başlatıldığında kendilerini bu kayıt defterine kaydederler ve kapandıklarında veya kullanılamaz hale geldiklerinde bu kayıttan silinirler.
Özellikleri:
- Dinamik Kayıt ve Kaldırma: Servisler başlatıldığında kendilerini kaydeder ve kapandıklarında kayıttan kaldırırlar.
- Sağlık Kontrolleri: Service Registry, servislerin sağlık durumlarını izleyebilir ve yalnızca sağlıklı servislerin kullanılmasını sağlar.
- Merkezi Yönetim: Servislerin nerede çalıştığını merkezi bir şekilde yönetir.
Örnek: Netflix Eureka
Eureka, popüler bir Service Registry örneğidir. Mikroservisler Eureka’ya kendilerini kaydeder ve diğer servisler de ihtiyaç duyduklarında Eureka’dan bu servislerin yerini öğrenirler.
Service Discovery (Servis Keşfi)
Service Discovery, mikroservislerin birbirlerini dinamik olarak bulmasını sağlayan bir mekanizmadır. Service Discovery, iki ana yöntemle gerçekleştirilir: Client-Side Discovery ve Server-Side Discovery.
Client-Side Discovery
Bu yöntemde, istemci uygulaması doğrudan Service Registry’yi sorgular ve ihtiyaç duyduğu servisin yerini öğrenir. İstemci, aldığı bilgilerle servise doğrudan bağlantı kurar.
Server-Side Discovery
Bu yöntemde, istemci bir istek yapar ve bu istek bir yük dengeleyici veya API Gateway aracılığıyla yönlendirilir. Yük dengeleyici, Service Registry’yi sorgular ve servisin yerini bulur, ardından isteği doğru servise iletir.
Örnek Kullanım Senaryosu
Bir mikroservis mimarisinde, farklı servislerin birbirleriyle nasıl iletişim kurduğunu inceleyelim:
- Eureka Server Kurulumu
Eureka Server, merkezi bir kayıt defteri olarak çalışır. Mikroservisler bu server’a kendilerini kaydederler.
Bağımlılık Ekleyin:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
Ana Sınıf:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }
}
Konfigürasyon:
server: port: 8761 eureka: client: register-with-eureka: false fetch-registry: false server: wait-time-in-ms-when-sync-empty: 0
- Eureka Client Kurulumu (Mikroservis)
Her mikroservis, Eureka Server’a kendini kaydeder ve diğer servislerin yerlerini öğrenir.
Bağımlılık Ekleyin:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Ana Sınıf:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication
@EnableEurekaClient
public class SomeServiceApplication { public static void main(String[] args) { SpringApplication.run(SomeServiceApplication.class, args); }
}
Konfigürasyon:
eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
- Feign Client Kullanımı
Mikroservisler arasında iletişim kurmak için Feign Client kullanılabilir.
Feign Client Arayüzü:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; @FeignClient(name = "other-service")
public interface OtherServiceClient { @GetMapping("/resource/{id}") Resource getResourceById(@PathVariable("id") Long id);
}
Servis Kullanımı:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class SomeService { private final OtherServiceClient otherServiceClient; @Autowired public SomeService(OtherServiceClient otherServiceClient) { this.otherServiceClient = otherServiceClient; } public Resource fetchResource(Long id) { return otherServiceClient.getResourceById(id); }
}
Sonuç
Service Registry ve Service Discovery, mikroservislerin dinamik ve ölçeklenebilir bir şekilde yönetilmesini sağlayan kritik bileşenlerdir. Service Registry, mikroservislerin yerlerini kaydederken, Service Discovery bu kayıtları kullanarak mikroservislerin birbirlerini bulmasını ve iletişim kurmasını sağlar. Bu mekanizmalar, mikroservis mimarisinin esnekliğini ve yönetilebilirliğini artırır.
Discover more from Coursity
Subscribe to get the latest posts sent to your email.