고가용성은 무엇인가?

반응형

가용성이라는 말을 들어보았지만 진지하게 가용성이라는 단어가 어떤 의미를 내포하는지 생각하지 않는거같습니다.
가용성이란 시스템, 네트워크, 프로그램 등이 사용자가 필요로 하는 시점에 정상적으로 작동하고 접근 가능한 정도를 말한다고 합니다.
그렇다면 고 가용성이라는 말은 도대체 뭘까요? 이미 가용성이라는 단어부터 정상적으로 접근이 가능한것을 나타내고 있는데 그것을 뛰어넘는 무언가일까요?

그래서 고가용성이 뭔데?

사실 가용성은 이분법적인 관점이 아니라고 합니다. yes or no가 아닌 %라고 합니다. 
고가용성은 장애가 발생해도 사용자가 체감할 만큼 서비스가 멈추지 않도록 설계된 상태라고 합니다. 
용어는 대략적으로 알았는데 이것을 어떻게 측정할 수 있을까요? 멱등성이나 정합성처럼 했다고 작업하면 그렇게 되어지는 건가요?

고가용성은 구현했다, 보장했다라는것이 아닌 어떻게 측정하느냐에 있습니다.

가동 시간의 비율로 측정한다고 합니다. 공식적으로는 다음과 같이 측정한다고 합니다.

Availability = (총 시간 − 장애 시간) / 총 시간

예를 들어, 1년중에 5분 장애가 발생한다면 99.999%인거고
1년중 1시간 장애가 발생한다면 99.99%입니다.
그래서 고가용성은 장애가 있는지가 아니라 얼마나 오래 멈췄는지로 판단합니다. 
결국 고가용성은 목표라고 할수 있습니다. 즉, 고가용성을 구현했습니다가 아닌 장애 시 자동 복구 구조를 통해 MTTR을 줄였고 그 결과 연간 가용성 99.9% 이상을 유지했습니다.라고 말해야 한다고 합니다.

그러면 가용성이 좋다는건 신뢰성이 좋다는거와 같은 의미일까요? 내구성이 좋다는 의미일까요?

하지만 가용성은 신뢰성이나 내구성처럼 개별적인 품질 속성을 의미하는 개념은 아닙니다.
가용성은 장애, 오류, 데이터 손실과 같은 다양한 요인이 존재하더라도
사용자 관점에서 서비스 중단 시간이 얼마나 최소화되었는지를 수치로 평가한 결과에 가깝습니다.
즉, 신뢰성·내구성·내결함성과 같은 특성들은 가용성을 높이기 위한 수단이 될 수 있지만,
가용성 그 자체는 이들을 종합해 측정된 결과라는 점에서 구분됩니다.

고가용성 엔지니어링이라는건 무엇일까?

고가용성이라는게 결과라고 말했습니다. 그렇다면, 고가용성을 지키기 위해서는 어떻게 개발을 해야 할까요?
고가용성을 지키는 개발이란 결함(Fault)이 오류(Error)로, 오류가 실패(Failure)로 번지지 않게 경계마다 방어 코드를 두는 개발입니다.

결함: 시스템 구성 요소의 근본적인 결함 또는 잘못된 상태 (ex. 디스크 고장, 소프트웨어 버그 또는 잘못된 구성 설정)
오류: 잘못된 내부 상태나 동작을 생성할 때 발생
실패: 오류로 인해 시스템이 사용자에게 서비스를 제공하지 못할때 오류가 발생

엔지니어들은 다음과 같은 지표들로 시스템 동작을 측정합니다.
1. 평균 장애 간격(MTBF): 시스템이 장애를 경험하기 전까지 일반적으로 실행되는 시간
2. 평균 고장 시간(MTTF): 수리 불가능한 구성 요소가 고장 나기까지의 평균 수명
3. 평균 복구 시간(MTTR): 장애 발생 후 팀이 서비스를 얼마나 빨리 복구할 수 있는지 추적

고가용성 엔지니어링은 결함이 연쇄적으로 실패로 이어지는 것을 방지하고, 실패가 불가피하게 발생하더라도 MTTR을 최소화하는 두 가지 목표에 집중합니다. 모든 결함을 제거할 수는 없지만, 문제를 격리하고 우아하게 복구할 수 있는 시스템은 설계할 수 있습니다.

여기서드는 의문은 MTBF,MTTF,MTTR은 어떻게 측정할 수 있을까요?

MTBF

Mean Time Between Failures의 약자로 실패 발생 시점들로 측정대상으로 합니다.
방법은 장애 발생 시각을 로그/이벤트로 기록을 하고 장애와 장애 사이 시간의 평균으로 계산합니다.
보통은 모니터링 시스템 + 장애 기록으로 계산이 되어집니다.

계산식

MTBF = 총 정상 운영 시간 / 장애(Failure) 발생 횟수

예시로는

MTBF = 720 / 3 = 240시간

주의할점은 에러 기준이 아닌 실패기준입니다. 사용자에게 서비스가 안 된 시점만 세는것이 핵심입니다.  

MTTF

Mean Time To Failure의 약자로 수리 불가능한 자원을 대상으로 측정을 합니다. 
하드웨어/ 디바이스 교체 이력이 있거나 벤더 스펙 + 실제 고장 시점으로 계산합니다.
어떻게 보면 운영 보다는 자산/인프라 관리 영역입니다.
실무에서는 거의 안 쓴다고 해도 무방하다고 합니다.

계산식

MTTF = 총 사용 시간 / 고장 발생 횟수

예시로는

MTTF = (100 × 3년) / 5 = 60년

이는 인프라/하드웨어 관리 지표라 웹에서는 사용이 거의 되지 않습니다.

MTTR

Mean Time To Repair/Recovery의 약자로 Failure가 발생한 시점부터, 서비스가 정상 상태로 복구되기까지의 시간을 대상으로 측정합니다. 장애 시작 시각부터 서비스 정상화 시각까지의 시간으로 계산하며 예를 들면, 알림 시스템 + 헬스 체크 + 복구 완료 시점을 들수 있습니다. 그래서 로그, 알람, 헬스 체크,배포/복구 이벤트 이 모든 걸 엮어서 계산한다.

계산식

MTTR = 총 복구 시간 / 장애 발생 횟수

장애가 발생한 뒤 정상 상태로 돌아오기까지 걸린 평균 시간을 계산합니다.

예시로는

MTTR = (10 + 20 + 5 + 25) / 4 = 15분

이것이 고가용성의 핵심 제어 변수입니다. 
정리 하면 Availability ≈ MTBF / (MTBF + MTTR)으로 볼 수 있습니다.

MTBF, MTTF, MTTR은 수식으로 표현할 수 있지만, 이 값들은 코드에서 계산되는 지표가 아니라
시스템 운영 중 발생한 장애와 복구 사건을 집계한 결과입니다. 특히 고가용성 관점에서는 MTTR이 가장 중요한 지표로,
장애를 얼마나 빨리 감지하고 복구할 수 있는지가 최종 가용성을 결정합니다.

마무리

그동안 가용성을 단순히 "계속 사용할 수 있는 상태"를 나타내는 값으로만 이해하고 있었습니다. 하지만 이번 내용을 정리하며, 가용성은 직접 구현하거나 보장하는 대상이 아니라 장애를 어떻게 설계하고 복구했는지에 따라 결과적으로 측정되는 지표라는 점을 알게 되었습니다.
결국 고가용성이란, 장애를 없애는 것이 아니라 장애가 발생하더라도 서비스 중단을 최소화하려는 설계의 결과라고 볼 수 있습니다.

반응형

댓글

Designed by JB FACTORY