MSA 환경
- 서비스와 서비스는 원격 호출로 구성
- 서비스 클라이언트가 서비스를 호출할때 서비스의 위치를 알아낼 수 있어야 한다.
- 이러한 서비스가 디스커버리
Service discovery와 Client server
각 서비스의 위치를 등록해 놓는 전화번호부와 같은 서버
- GPT서비스 디스커버리는 다음과 같은 기능을 수행합니다:
- 서비스 등록: 각 서비스는 자신의 위치, IP 주소, 포트 번호, 서비스 유형 등을 서비스 디스커버리 메커니즘에 등록합니다.
- 서비스 검색: 클라이언트 애플리케이션은 특정 서비스를 필요로 할 때, 서비스 디스커버리 메커니즘을 사용하여 해당 서비스의 위치를 검색합니다.
- 서비스 상태 업데이트: 서비스 디스커버리는 서비스의 상태 변화를 감지하고 업데이트할 수 있으며, 서비스의 가용성 및 신뢰성을 향상시킵니다.
- 부하 분산: 서비스 디스커버리를 사용하면 부하 분산을 수행할 수 있으며, 여러 서버 인스턴스 중에서 요청을 분배할 수 있습니다.
- 서비스 디스커버리(Service Discovery)는 컴퓨터 네트워크에서 서비스의 위치와 특성을 자동으로 발견하고 등록하는 메커니즘을 가리킵니다. 이것은 네트워크 환경에서 서비스를 찾거나 통신하기 위해 중요한 역할을 합니다. 서비스 디스커버리는 다양한 응용 프로그램 및 서비스 간의 효율적인 통신을 지원하고, 확장 가능한 분산 시스템에서 필수적입니다.
디스커버리 서버를 통해 클라이언트 서버에 요청이 들어오면 작업을 수행한다
#application.yml
server:
port: 8761
spring:
application:
name: discoveryservice
eureka:
client:
register-with-eureka: false
fetch-registry: false
server:
# 해당 옵션을 false로 설정해놓으면 연결이 끊킬시 바로 서버를 drop한다
# 개발용으로만 사용할것
enable-self-preservation: false
eviction-interval-timer-in-ms: 3000
내 ip 주소와 port 번호를 통해 유레카 서버를 모니터링 할 수 있는 창이 뜬다0
client service의 application.yml
server:
#랜덤포트 설정하기
port: 0
spring:
application:
name: userservice
#레지스트리에 서비스 등록할지를 설정 (기본이 true)
eureka:
client:
register-with-eureka: true
# 유레카 서버로부터 인스턴스 정보를 주기적으로 가져올 것인지 설정하는 속성
# true로 설정하면 갱신된 정보를 주기적으로 받겠다는 의미
fetch-registry: true
# 서버의 위치를 등록
service-url:
defaultZone: <http://192.168.0.16:8761/eureka>
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.cloud.application.instance_id:${random.value}}
# 클라이언트가 유레카에 등록된 이후에 등록한 시간마다 하트비트를 전송
lease-renewal-interval-in-seconds: 1
# 설정된 시간동안 하트비트를 받지 못하면 인스턴스를 레지스트리에서 제거
lease-expiration-duration-in-seconds: 2