본문 바로가기

개발/Programming

[서버] 단일 장애 지점(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 잠금을 사용하는 것이 적절할 수 있습니다.
  • 만약 서버에서 세션 기반 인증을 사용하고 있다면, 세션 불일치 문제를 겪을 수 있습니다. 이 경우, 세션 클러스터링이나 스티키 세션, 토큰 기반 인증, 외부 세션 저장소 등을 고려해야합니다.
  • 서버에서 생성되는 로그와 메트릭 데이터가 여러 서버에 걸쳐서 쌓이게 됩니다. 해당 데이터를 시각화하여 한눈에 확인하기 위해서는 각 서버에서 발생되는 데이터를 수집 및 통합하여 관리할 필요성이 생깁니다.
  • 적절한 로드 밸런싱 알고리즘을 선택해야할 필요성이 있습니다. 비효율적인 로드 밸런싱 알고리즘을 사용한다면, 한 서버에만 요청이 몰려서 이중화와 로드 밸런싱을 적용한 의미가 퇴색될 수 있습니다.
  • 서버 배포에 대해서 고민해볼 필요성이 있습니다. 서버가 늘어날 수록, 동일한 서비스의 다양한 버전이 운영될 수 있으며, 배포 시간이 증가하거나 배포 중 장애에 대한 대응이 복잡해질 수 있습니다.
반응형