단일 장애 지점(SPOF)이란 무엇인가?
●단일 장애 지점(SPOF)이란 무엇인가?
- 단일 장애 지점(Single Point of Failure, SPOF) 이란 전체 시스템에서 제대로 동작하지 않는 경우, 전체 시스템이 중단되는 특정 구성 요소를 의미하며, 서버와 네트워크, 프로그램 등 정보 시스템이 정상적으로 사용할 수 있는 정도를 가용성(Availability) 이라고 하며 가용성은 정상적인 사용 시간(Uptime)을 전체 사용 시간(Uptime+Downtime)으로 나누어 구할 수 있으며 이때, 가용성이 99.999% 처럼 높은 경우에 고가용성(High Availability, HA) 이라 하며 시스템이 고가용성을 만족하기 위해서는 SPOF를 식별하고, 개선하는 작업이 필요함
●다음과 같은 상황에서 SPOF를 식별하고 개선
1. API Server 1대를 운용
2. DB는 Master Replica 구성을 사용
3. Master DB는 1대이며, 3대의 Replica DB를 사용하고 있음 (Failover는 지원)
-
현재 서버는 단일 서버로 구성되어 있습니다. OOM(Out Of Memory), 네트워크 장애, 자원 고갈, 하드웨어 장애와 같은 문제가 발생할 경우 서버의 고장이 전체 시스템의 고장으로 이어질 수 있움
-
이 문제를 개선하기 위해서 서버를 이중화하고, 로드 밸런서를 사용할 수 있습니다. 이중화는 동일한 애플리케이션을 여러 서버에 배포하여 한 서버가 다운되더라도 다른 서버가 서비스를 제공할 수 있도록 하며 로드 밸런서는 서버에 들어오는 트래픽을 여러 서버로 분산시켜주는 역할을 하며 만약, 특정 서버가 고장나는 경우에는 로드 밸런서에서 해당 서버로 향하는 요청을 다른 정상 서버로 전달
●서버를 이중화할 때 점검해야 하는 부분
- 서버를 이중화할 때 점검해야할 지점들은 애플리케이션 특성에 따라 상이하지만, 대표적으로 점검해야할 부분들은 동시성 문제, 세션 불일치 문제, 로그 및 메트릭 수집, 로드 밸런싱 알고리즘, 배포 등이 있음
- 애플리케이션 내부에서 동시성 문제를 해결하기 위한 코드가 이중화 환경에서도 안전하게 작동하는지 점검해볼 필요성이 있으며 예를 들면, 단일 서버인 경우에는 자바의 synchronized, ReentrantLock을 사용하여 멀티 스레드 환경에서 동시성 문제를 해결 할 수 있지만, 이중화된 환경에서는 해당 방법들이 제대로 동작하지 않을 가능성이 매우 높으며 이 경우, 분산 잠금이나 DB 잠금을 사용하는 것이 적절할 수 있음
- 만약 서버에서 세션 기반 인증을 사용하고 있다면, 세션 불일치 문제를 겪을 수 있습니다. 이 경우, 세션 클러스터링이나 스티키 세션, 토큰 기반 인증, 외부 세션 저장소 등을 고려해야함
- 서버에서 생성되는 로그와 메트릭 데이터가 여러 서버에 걸쳐서 쌓이게 되며, 해당 데이터를 시각화하여 한눈에 확인하기 위해서는 각 서버에서 발생되는 데이터를 수집 및 통합하여 관리할 필요성이 생김
- 적절한 로드 밸런싱 알고리즘을 선택해야할 필요성이 있으며, 비효율적인 로드 밸런싱 알고리즘을 사용한다면, 한 서버에만 요청이 몰려서 이중화와 로드 밸런싱을 적용한 의미가 퇴색될 수 있음
- 서버 배포에 대해서 고민해볼 필요성이 있으며 서버가 늘어날 수록, 동일한 서비스의 다양한 버전이 운영될 수 있으며, 배포 시간이 증가하거나 배포 중 장애에 대한 대응이 복잡해질 수 있음