일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- typescript
- 회고
- React-Router-Dom
- 글또 10기
- TS
- framer-motion
- 코드트리
- CSS방법론
- 알고리즘
- useState
- 개발자 원칙
- 캐나다개발자
- framer
- 개발자를 위한 글쓰기 가이드
- 타입스크립트
- VS Code
- 이펙티브타입스크립트
- Effective Typescript
- JSBridge
- 글또
- Framer motion
- CSS
- SemVer
- 시스템디자인
- 테오의 스프린트
- Semantic Versioning
- 캐나다취준
- JUNCTION2023
- react
- ASP.NET
- Today
- Total
큰 꿈은 파편이 크다!!⚡️
[시스템 디자인 학습] Load balancer 본문
연차가 이쯤되니 시스템 디자인 인터뷰도 준비해야해서 급히 공부를 하고 있다.
로드 밸런서.. 일할때는 의식해본 적도 없고 백엔드 영역이라고 생각해서 굳이 따로 해보려하지도 않았는데 보고있는 시.디 인터뷰 목록에 나와있길래 조금 더 자세히 이해할 수 있는 시간이 되었다. 역시 풀스택의 길은 멀고 험한가보다 ㅎ
Load Balancer (LB)
단어 그대로, Load(부하)를 Balance(조절)해주는 역할을 하는 시스템 디자인의 한 요소이다.
~몇천 RPS(Request Per Second, 초당 요청 수) 까지는 LB가 필요하지 않을 수도 있기 때문에 꽤나 트래픽이 있는 제품이 아니고서야 타의적으로 경험해보기는 쉽지 않은 듯 하다.
LB는 서버와 클라이언트 사이에 위치하되, 한 레이어만 구성하지는 않는다.
LB의 이점
- Scalability: 서버를 추가해 시스템을 쉽게 확장할 수 있다.
- Availability: 특정 서버가 죽더라도 다른 서버들에서 요청을 처리하기 때문에 사용자는 서비스를 계속 사용할 수 있다.
- Performance: 효율적인 트래픽 분배 및 자원 관리를 통해 사용자는 요청에 대한 응답을 빠르게 받을 수 있다.
LB의 역할
- Health checking: heartbeat protocol(서버나 네트워크 장치 간의 연결 상태를 확인하기 위해 주기적으로 “하트비트” 신호를 주고받는 프로토콜)을 사용하여 엔드 서버의 상태와 신뢰성을 모니터링한다.
- TLS termination: 클라이언트와의 TLS termination 처리를 담당하여 엔드 서버의 부담을 줄여준다.
- Predictive analytics: 트래픽을 통해 얻은 통계를 분석하거나, 트래픽을 모니터링하면서 트래픽 패턴을 예측할 수 있다.
LB 알고리즘
LB는 클라이언트 요청을 특정 알고리즘에 따라 분배한다.
- Round-robin scheduling: 각 요청을 서버 풀 내의 서버들에게 순차적으로 돌아가면서 전달한다.
- Weighted round robin: 일부 서버가 클라이언트 요청을 처리하는 능력이 더 높다면 사용하는 것이 좋다. 각 노드에 가중치를 부여하고, 로드 밸런서는 노드의 가중치에 따라 클라이언트 요청을 전달하며, 가중치가 높을수록 더 많은 요청을 할당한다.
- Least connections: 모든 서버가 동일한 용량을 가지고 있어도 특정 서버에 부하가 고르지 않게 걸릴 가능성이 있다. (ex. 일부 클라이언트의 요청은 처리하는 데 더 오래 걸림) => 새로 도착한 요청을 더 적은 기존 연결을 가진 서버에 할당한다.
- Least response time: 성능에 민감한 서비스에 필요하다. 응답 시간이 가장 짧은 서버가 클라이언트 요청을 처리하도록 보장한다.
- IP hash: 일부 애플리케이션은 IP 주소에 따라 사용자에게 다른 수준의 서비스를 제공한다. => IP 주소를 해싱하여 사용자 요청을 서버에 할당한다.
- URL hash: 애플리케이션의 일부 서비스는 특정 서버에서만 제공될 수 있다. => 특정 URL에서 요청하는 클라이언트는 특정 클러스터나 서버 그룹에 할당한다.
- Randomized: 임의로 서버를 선택하여 요청을 분배한다.
- Weighted least connections: 각 서버의 가중치를 고려하여 Least connections 알고리즘을 적용한다.
Static / Dynamic algorithms: 서버 상태를 관리하는 알고리즘
- Static algorithms: 서버의 상태 변화를 고려하지 않으므로 서버의 기존 설정 정보를 바탕으로 작업을 할당한다.
- Dynamic algorithms: 서버와의 통신을 통해 서버의 상태를 모니터링하여 활성 서버에만 요청을 전달한다. 서버 상태를 바탕으로 작업을 할당하기때문에 구조가 복잡해지더라도 더 유용하다.
Stateful / Stateless LB: 클라이언트와 서버 간의 세션 정보를 관리하는 방법
- Stateful load balancing: 클라이언트와 서버 간의 세션 상태를 유지한다. 세션 정보를 모든 로드 밸런서에 걸쳐 공유하고, 유지하며 전달 결정을 내리기 때문에 복잡해지고 확장성이 제한될 수 있다.
- Stateless load balancing: 상태를 유지하지 않기 때문에 빠르다. 일관된 해싱을 사용하여 전달 결정을 내리지만, 인프라가 변경될 경우(ex. 새로운 서버가 추가됨) 어려움이 있을 수 있어, 로컬 상태를 유지하는 것이 필요할 수 있다. 이는 로드 밸런서 내부에서만 상태를 유지하는 방향이 된다.
'기타 CS' 카테고리의 다른 글
시스템 디자인 인터뷰 준비 (1) - 개념 정리 (1) | 2025.01.05 |
---|---|
ASP.NET으로 서버&리액트 프로젝트 서빙하기 (0) | 2024.02.04 |
Microsoft.IdentityModel 인증 + 리액트 (0) | 2023.07.30 |
“런타임”이라는 단어를 이제는 사용할거야 (0) | 2023.07.02 |
내가 정착한 VSCode 환경 설정 💞 소개 (0) | 2023.05.20 |