서비스의 위치를 어떻게 알수있을까?
클라우드 기반에서는 환경에따라 서비스의 위치가 유동적으로 변경될 수 있습니다.
- 인스턴스의 동적할당
- 오토 스케일링에 따른 중지 및 복구
1 | client | --> service (0.0.0.0) |
서비스 디스커버리
따라서 클라이언트가 서비스를 호출할때 해당 서비스위 위치를 알아낼 수 있어야 하는데,
이 문제를 해소해주는것을 “서비스 디스커버리(service discovery)” 라고 합니다.
클라이언트 사이드 서비스 디스커버리
1 | # 서비스 구동시 내 서비스 정보를 service registry 에 등록 |
요약
- 서비스 인스턴스가 시작될때 service registry 에 서비스 정보를 등록합니다.
- service registry 는 이 서비스의 상태를 계속 체크합니다. (health check)
- 클라이언트는 service registry 에 연결하고자 하는 서비스를 조회합니다.
- service registry 는 연결된 서비스중 하나의 연결을 반환합니다. (load balancing)
- 클라이언트는 전달받은 연결정보로 서비스에 연결합니다.
- 서비스 인스턴스가 종료되면 service registry 에서는 해당 서비스를 제외합니다.
서버 사이드 서비스 디스커버리
1 | # 서비스 구동시 내 서비스 정보를 service registry 에 등록 |
클라이언트 사이드 방식과 유사하지만 중간에 proxy 서버를 통해 서비스에 연결합니다.
이 방식의 특징은 클라이언트가 service registry 를 몰라도 되고 따로 구현할 필요가 없다는 점입니다.
service registry
모든 연결정보를 들고있는 서비스입니다.
연결될 서비스정보를 조회하고 체크해야하므로 고가용성이 요구됩니다.
service discovery 를 제공하는 오픈소스들
zookeeper
https://coding-start.tistory.com/66
consul
https://www.consul.io/
etcd
https://etcd.io/