가용성이란?
먼저 가용성은 무엇일까?
위키피디아에 따르면 서버와 네트워크, 프로그램 등의 정보 시스템이 정상적으로 사용 가능한 정도를 말한다.
즉, 사용자가 정상적으로 서비스를 사용할 수 있는 시간이라고 생각해도 된다.
공식에서 알 수 있듯이 다운타임이 적을 수록 고가용성에 가까워진다.
왜 가용성은 중요할까?
한번 가정을 해보자.
만약 배가 고파 음식 주문을 하려고 할 때 사용할 수 있는 2가지 앱이 있다. 하나의 앱은 사용 중에 자주 튕기고 하나의 앱은 그렇지 않는 경우 어떤 서비스를 이용하고 싶은가?
즉 가용성은 사용자가 느끼는 서비스의 신뢰로 이어지고 이는 곧 사용자 손실과 직결될 수 있다.
그러면 이렇게 중요한 가용성에 영향을 미치는 것은 무엇일까?
언제 다운타임이 발생하여 가용성이 저하될까 생각해보자.
내가 고민하기에는 일반적으로 다운타임이 발생할 수 있는 순간들은 다음과 같다.
- 새 기능이 개발되어 기존 서비스를 중단하고 배포해야 할 경우
- SPOF에 대해 장애가 발생한 경우
오늘은 특히 두 번째에 대해 알아보겠다.
SPOF란?
SPOF는 "a part of a system that, if it fails, will stop the entire system from working" 로 장애 발생 시 전체 서비스에 영향이 가는 지점을 말한다.
위 사진을 보면 현재의 우리 서버 구조와 동일한, 단일 웹 서버, WAS, DB이다. 또한, 각각은 지점은 모두 SPOF이다.
만약 불의의 사고로 DB가 중단될 경우 사용자에게 500이 반환된다.
따라서 고가용성을 위해서는 SPOF 제거가 필요하다.
어떻게 SPOF를 제거하죠?
이중화
"시스템의 일부에 어떠한 장애가 발생했을 경우에 대비하여, 장애 발생 다음에도 시스템 전체의 기능을 계속 유지하도록 예비 장치를 평상시부터 백업으로서 배치해 운용하는 일"
즉, Single인 지점을 2개 또는 n개로 늘려 장애 상황이 발생할 경우 전환시키는 대응이다.
로드밸런서
"부하(load)의 균형을 유지해주는 역할(balancer)을 하는 로드밸런서를 사용하여 클라이언트로부터 들어오는 요청을 N개의 목적지로 분산시키는 것"
즉, 다수의 시스템에 트래픽을 적절히 분배하고, Health Check로 장애 시스템 감지될 경우 장애 시스템 제외한 정상 시스템으로만 트래픽 전달하는 것이다. (시스템 이중화가 이뤄진 상태여야 가능하다.)
물론 사용자가 많은 서비스인 경우에도 그 신뢰도 또한 높아지기 때문에 필수이겠지만,,, 작고 소중한 우리 서비스의 사용자들을 지키기 위해서는 고가용성이 필수라는 생각이 든다.
'우아한테크코스 6기 > 4단계' 카테고리의 다른 글
Grafana, Prometheus로 TPS 측정 및 시각화하기 (0) | 2024.10.14 |
---|---|
Connection Pool과 HikariCP에 대해 알아보자 (0) | 2024.10.09 |
JPA에서 Full Text Index 사용하기 (+ 테스트 시 주의점) (0) | 2024.10.01 |
API 성능 개선하기 2탄 (feat. 검색 전문 인덱스 적용하기) (1) | 2024.09.28 |
API 성능 개선하기 1탄 (feat. N + 1과 불필요한 쿼리 개선) (0) | 2024.09.25 |