티스토리 뷰
반응형
참고 URL : authentication.tistory.com/m/24
1. Service Discovery
- MSA는 기능별로 나눠진 여러 서비스가 서로를 호출하는 구성을 갖게 된다.
- 서비스간 상호 작용에는 IP 및 포트 등의 통신 정보가 반드시 필요하다.
- 클라우드 기반의 MSA에서는 서비스를 위한 서버가 증설되거나 삭제되는 일이 잦으므로, 결국 서비스별 통신 정보를 정확히 파악할 수 있도록 하는 기능이 필요하다.
- Eureka는 이러한 서비스 디스커버리 역할을 맡는 서비스가 된다.
2. 구조
- Eureka Server
- 별도의 Spring Boot Application으로 실행이 필요
- HA 구성시 서버의 현 상태를 다른 서버로 복제할 수 있음
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
이후 MainApplication에 @EnableEurekaServer 어노테이션을 추가
- Eureka Client
- MSA를 구성할 Application에 포함시켜 사용이 가능
- 애플리케이션이 시작된 후 서버에 등록되고, 종료 전 서버에서 등록이 해제되는 것을 담당
- 유레카 서버로부터 주기적으로 서비스 목록을 Fetch하여 최신화
- 자신을 Discovery Server(Eureka)에 등록
- 이후 호스트, 포트, 상태 정보, URL 등을 Discovery Server에 송신
- Discovery Server는 Client의 생존 신호(HeartBeat)를 일정 기간 이상 받지 못했을 경우, 서비스가 삭제된 것으로 간주하고 삭제
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
이후 MainApplication에 @EnableDiscoveryClient 어노테이션을 추가
- EnableEurekaClient : spring-cloud-netflix에 존재하며, Eureka만을 위해 동작
- EnableDiscoveryClient : spring-cloud-commons에 존재하고, Consul, Eureka 등으로부터 공통적으로 동작
- Eureka Instance
- 포트, 이름 등 유레카 클라이언트의 행동을 재정의하는 속성
3. Eureka Registry로부터 서비스를 빠르게 제거하기
- Client는 leaseRenewalIntervalInSeconds에 정의된 값에 맞춰 Heartbeat를 주기적으로 서버에 보내 생존을 알린다. (디폴트 30초)
- Client가 설정한 leaseExpirationDurationInSeconds에 정의된 값에 맞춰, 서버는 Heartbeat가 송신되지 않은 경우 서비스를 Registry로부터 제거한다. (디폴트 90초)
- 디폴트 90초이며, 즉 90초 이내에 HeartBeat를 송신하지 않은 서비스를 제거한다는 의미가 된다.
- 이는 즉, Client는 스스로의 설정을 통해 서버에게 '내가 몇 초 주기로 HeartBeat를 보낼텐데, 몇 초 이상 수신되지 않으면 날 지워줘'라고 알리는 것과 같다.
- Server는 자신이 설정한 evictionIntervalTimerInMs 시간만큼 대기한 후 HeartBeat를 정상적으로 송신하지 않은 Client들을 Registry로부터 퇴거(eviction)시킨다. (디폴트 60초)
- 즉, leaseExpirationDurationInSeconds 만료 이후에도 서비스가 살아있을 수 있다는 의미가 된다.
- 따라서 Server는 해당 시간을 주기로 하여 퇴거시킬 서비스를 검사한다.
- docker-compose down 등의 정상 종료 케이스로 인해 gracefule shutdown(우아한 종료)된 인스턴스는 적시에 Discovery Server로부터 제거된다.
- 반면 인스턴스 자체의 종료 등, 예기치 못한 종료시 서비스는 위의 과정을 거쳐 Registry로부터 삭제된다.
- 무용한 서비스를 빠르게 Registry로부터 제거하고 싶다면 위 설정 값을 조정해준다.
- Eureka 측은 내부 관리 로직을 위해 위 값들을 디폴트에서 되도록 변경하지 말 것을 '권장'한다.
'Dev.' 카테고리의 다른 글
[Protocol Buffers] 숫자 인코딩 / 디코딩 (0) | 2021.03.19 |
---|---|
[Ansible] regexp 및 $(달러) 기호 이스케이프 (0) | 2021.01.05 |
[ThymeLeaf] th:if와 th:each 함께 사용하기 (0) | 2020.11.19 |
[C] 간단한 개발 사이트 (0) | 2020.10.14 |
[Git] Basic (0) | 2020.08.24 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dev
- react
- Git
- hashicorp
- kotlin
- Vault
- eureka
- JPA
- postgresql
- Gradle
- pgloader
- AWS
- mysql
- spring boot
- jQuery
- IntelliJ
- Docker
- terraform
- Node.js
- 코딩테스트
- JEST
- AWS IoT
- Database
- javascript
- Spring Cloud Config
- Linux
- Java
- shell
- etc
- Puppeteer
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함