서버 사이드 로드밸런싱
- 주로 L4스위치를 사용
- 4계층의 포트를 사용해 트래픽을 분산함
- 하드웨어가 필요함
- 비용과 유연성의 부담
- 트래픽을 분산할 서버 1~3개의 주소가 필요
- 제한적
위의 단점을 해결하기 위해 클라이언트 사이드 로드밸런싱이 필요하다.
클라이언트 사이드 로드밸런싱(리본)
- L4 스위치를 클라이언트 소프트웨어로 대체함
- Ribbon은 분산처리방법으로 여러 서버를 라운드 로빈 방식으로 부하 분산 기능을 제공함 (NginX랑 유사함)
Eureka
- 로드 밸런싱과 failover를 위해 만들어진 rest 서비스
- 로드 밸런싱을 위해 유레카 클라이언트 목록을 제공하고, failover를 위해 유레카 클라이언트의 상태를 체크한다.
스프링 클라우드 넷플릭스
- 넷플릭스에서 MSA를 자사 서비스에 적용하기 위해 만들어낸 서킷 브레이커(Hystrix), 클라이언트 사이드 로드밸런싱(Ribbon), tjqltm eltmzjqjfl(Eureka), 인텔리전트 라우팅(Zuul) 등의 넷플릭스 OSS에 대한 통합 지원
- Spring cloud는 클라우드 환경에 특화된 프레임워크
- MSA 구축에 특화된 라이브러리들의 집합
MSA
- 개발될 기능을 어떻게 만들면 에러 상황에 탄력성있게 잘 대처할지, 빠른 배포가 가능하고, 서비스 부하에 능동적으로 잘 대처하도록 만들지에 대한 관점
MSA 도입시 고려사항
- 자동확장 (특정 서비스에 트래픽이나 부하가 증가할 때 추가 인스턴스를 생성
- 반대로 트래픽과 부하가 감소할 경우 불필요한 인스턴스를 서비스에서 제거
- 동적으로 추가되는 인스턴스 정보를 다른 서비스로 전달할 방법
- 신규 추가된 인스턴스들 간의 로드 밸런싱을 처리/장애 대응방법 마련
서비스 디스커버리 서버 (유레카)
- MSA 구조에서 서비스들은 동적으로 확장되고 축소되기도 하는데 이때마다 운영자가 일일이 인스턴스 정보를 수정/관리하기가 어려움
- 인스턴스의 상태를 동적으로 관리하는 서버가 필요한데 이를 서비스 디스커버리 서버로 명하고 넥플릭스는 유레카라고 공개했다.
- 새로운 인스턴스는 시작시 Eureka 서버에 IP, 호스트 주소, 포트 정보등을 전송함
- 받은 정보를 일정 간격으로 상태를 체크하며 해당 인스턴스를 관리
- 인스턴스가 새로 실행될 때마다 정보를 서버에 동적 등록하기 때문에 서비스 수평확장시 IP정보를 신경쓰지 않아도 됨. (수평확장은 부하가 걸린 서비스의 인스턴스를 늘려 처리량을 높임)
- 운영자는 설정 파일에 Eureka 서버 정보만 입력하고, 서비스들은 다른 서비스 호출시 Eureka서버에 등록된 인스턴스를 조회하면 됨
유레카의 필요성
- MSA는 주로 클라우드 환경에서 이루어지고, 클라우드는 수시로 서버가 늘어나거나 줄어들가나 한다.
- 로드 밸런싱을 위해 LB가 IP, Port 정보를 가져야하는데 서버의 수가 달라질때마다 수동으로 기록하는건 무리임
- 유레카는 등록과 해지, fetch 개념을 구체화하여 이를 자동화 시킴
Gateway Pattern
- MSA 핵심구성요소 -> API Gateway 패턴
API Gateway 패턴
- Restful하게 작성된 API를 손쉽게 관리, 인증을 통한 자원의 효율적인 분배 (인증서버)
- API 모든 요청에 대한 로깅
- 모든 클라이언트의 요청이 하나의 서버로 들어와 해당 서버에서 요청이 정제되거나 조작되어 각자 목적에 맞는 서비스를 찾아가도록 함
- 각 서버에서 로직 수행후 발생한 응답을 모아 사용자에게 분배해줌
API Gateway의 고려사항
- 병목현상
- 네트워크 latency
'DevOps' 카테고리의 다른 글
서버에 docker 컨테이너로 배포하기 (0) | 2023.03.15 |
---|---|
Nginx로 서버와 클라이언트 중개하기 (0) | 2022.07.28 |
[postgresql] 수정중 (0) | 2022.06.20 |