클라우드에서 Load Balancing 등을 유연하게 가져가기 위해 각 서비스들의 IP, Port, Instance Id, 를 가지고 있는 REST 기반의 미들웨어 서버
Netfilx는 MSA를 선도한 기업이라고 할 수 있다.
그 과정에서 Eureka, Feign을 비롯한 여러 오픈소스를 제공해줬다.(거의 MSA의 표본..?)
MSA는 주로 Cloud 환경에서 이루어지고, Cloud는 수시로 서버가 늘어나거나 줄어들거나 한다.
로드 밸런싱을 위해선 LB가 Ip, Port 등의 정보를 가져야 하는데, 서버의 수가 달라질때마다 이걸 수동으로 기록하는 건,,,, 무리다.
😝개발자는 반복작업(노가다 성)을 싫어한다.
역할(기능)을 정의하면 서비스 디스커버리
이다.
유레카는 우리에게 가장 친숙한 개념인 Client < - > Server
의 방식으로 동작한다.
각각의 인스턴스는 하나의 클라이언트
와 같고, 본인들의 IP와 Port와 Instand Id를 서버(eureka server)로 전달한다.
그리고 이를 Fetch 하는 방식으로 클라이언트와 통신한다.
클라이언트가 서비스를 시작하면서 자신의 정보를 서버에 등록한다.
등록된 클라이언트는 서버로부터 다른 클라이언트의 등록정보를 받아서 로컬에 저장한다.
30초를 주기로 서버로부터 변경 사항을 받는다.
변경이 있다면 갱신한다.
30초마다 클라이언트가 서버에 핑을 보내는데, 핑이 없다면 Registry에서 제외된다.
결국 MicroService의 정보를 레지스트리에 등록할 수 있도록 하고, 탐색 및 로드밸런싱을 제공한다.
이 과정에서 용어가 등장
서비스의 연결 정보를 찾는 것.
서비스의 연결 정보를 등록하는 것.
서버에 등록된 정보를 획득하는 것.
유레카에 있는 본인의 인스턴스를 삭제하는 것.
서버에 등록된 정보가 변동되었을 때, 모든 클라이언트가 알기까지 시간 지연.
잊지 말아야 할 키워드는 REST, MSA와 클라우드이다.
Eureka는 REST니까 JAVA가 아니어도 된다.
이미 사용중 이므로 실습은 따로 진행하지 않을 예정.
참조 URL을 통해 Code를 볼 수 있다.