본문 바로가기

개발

Netflix MSA Service Discovery pattern (Eureka) - 2


Service Discovery Pattern(Eureka) 

서비스 클라이언트가 서비스를 호출할때 서비스의 위치 (즉 IP주소와 포트)를 알아낼 수 있는 기능

Service Discovery 패턴을 알아보기에 앞서 클라우드의 특성에 대해 알아야 한다. 

Netflix는 클라우드 플랫폼을 기반으로 서비스를 제공한다. 

AWS클라우드 서비스에서는 고유한 특성 때문에 서버가 잠깐 있다가 없어 지거나 

인스턴스가 동적으로 변경되고(장애, auto-scaling 등), 네트워크 주소도 동적으로 할당된다.(IP/PORT)

IP 주소 및 호스트 이름이 잘 알려진 서버와 함께 작동하는 기존의 장치와 달리, 

AWS에서는 서버를 즉시 등록하고 수시로 바뀌는 정보를 자동으로 매핑하는 역할과 어떤 인스턴스에 

접속 해야 하는가 등 을 제공하는 서비스 탐색 기능(Service Discovery)이 있어야 한다.

Eureka는 이 탐색기능(Service Discovery) 을 제공 하는 모듈이다. 

Netflix에서 사용하는 Eureka에 대해 자세히 알아보자. 



git에 있는 한 줄 설명을 보면 failover와 mid-tier 로드밸런싱을 위한 aws service registry 라고 되있다.
 


유레카(Eureka)는?

Eureka는 AWS 클라우드에서 주로 사용되는 REST(Representational State Transfer) 기반 서비스로, 중간 계층 서버의 로드 밸런싱 및 failover를 목적으로 사용됩니다.
Eureka는 Java 기반 Eureka Server ,Eureka Client와 함께 제공된다. 
Eureka Client 에는 기본 라운드 로빈 로드 밸런싱을 수행하는 로드 밸런서가 있다. Netflix에서는 훨씬 더 정교한 로드 밸런싱 장치가 Eureka를 래핑하여 트래픽, 리소스 사용량, 오류 조건 등과 같은 몇 가지 요인에 따라 가중 로드 밸런싱을 제공하여 뛰어난 복원력을 제공합니다.

- 라운드 로빈 스케줄링(Round Robin Scheduling, RR)은 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로서, 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum/Slice) CPU를 할당하는 방식의 CPU 스케줄링 알고리즘입니다.

서비스를 제공하는 서버는 기동시 Eureka Client를 통해 Eureka Server에 각 서비스의 이름, ip, port를 전달한다. 각 서비스 중단시 Eureka Server에서 제거한다. 기존 인스턴스가 추가되거나 삭제될때 Eureka Server의 레지스트리 정보를 업데이트 한다.  


-> 정리 : Rest 기반 서비스로 목적은 로드밸런싱 및 failOver
          
 Eureka Server, Client가 함께 제공되고 기본 Round Robin.

 Client를 통해 Server registry에 정보를 전달하고 추가 및 삭제시 Server registry에 업데이트.



The Server‑Side Discovery Pattern


With the server-side service discovery, the load balancer queries a service registry about service locations; clients interact only with the load balancer



위에서 Server registry라는 용어가 나왔는데 한번 정리하고 갈 필요가 있어서 정리!

Nginx에서 아주 잘 정리해놨다. 능력자들은 들어가서 보면 된다. 

- https://www.nginx.com/blog/service-discovery-in-a-microservices-architecture/

service registry는 service discovery에 핵심적인 부분이다. service registry는 Service instance들의 

network 정보를 가지고 있는 데이터베이스 이다. 


Eureka는 서비스 인스턴스 등록 및 쿼리 하기 위해서 REST API를 제공하는데 서비스 인스턴스는 

GET을 이용해서 서비스 인스턴스 검색.

POST를 사용해서 네트워크를 등록. 

PUT을 사용해서 등록을 새로고침(Heartbeat)

DELETE를 사용해서 인스턴스 제거. or 몇번 응답을 못받으면 90초후 인스턴스 제거.
(여기서 제거는 등록된 service registry에서 제거)



High level architecture
The architecture above depicts how Eureka is deployed at Netflix and this is how you would typically run it. There is one eureka cluster per region which knows only about instances in its region. There is at the least one eureka server per zone to handle zone failures.
요약 -> 
위의 아키텍처는 Netflix에서 Eureka가 어떻게 구현되었는지 보여주는 그림입니다. 
region 별로 하나의 유레카 클러스터가 있으며, 이 클러스터는 지역 내 인스턴스만 알고 있습니다. 영역 장애를 처리할 수 있는 영역당 최소 하나의 eureka 서버가 있습니다

Monitoring

Eureka uses servo to track a lot information in both the client and the server for performance, monitoring and alerting.The data is typically available in the JMX registry and can be exported to Amazon Cloud Watch.

모니터링은 servo 를 사용할 수 있으며 Amazon Cloud Watch로 내보낼 수 있다.






- https://github.com/Netflix/eureka/wiki


'개발' 카테고리의 다른 글

4. Spring boot batch quick start  (0) 2018.09.07
Netflix MSA Client Side Load Balancing (Ribbon) - 3  (0) 2018.09.06
Circuit Breaker (Hystrix)  (0) 2018.09.05
Netflix MSA pattern - 1  (0) 2018.09.05
3. Spring batch domain – job, step  (0) 2018.09.04