고가용성? 내결함성?

Hedy Kim
Cloud Villains
Published in
9 min readSep 3, 2023
photo by Hedy Kim

가끔 “고가용성”, “내결함성” 이 두 단어를 듣게 되면 이해 하고 있다고 생각 되지만, 막상 다른 사람에게 잘 설명하기는 어렵습니다. 이번 글에서는 상대방이 잘 이해할 수 있도록 설명하기 위해서 정리 해둔 내용을 적어 보았습니다.

고가용성 (High availability)

영어사전 “Availability”

뭔지 알 것 같은데 딱 ‘이거다!’하고 설명하기가 어렵습니다. 우선 가용성이라는 단어의 사전적 의미부터 확인 해보면 무엇인가 가능한 상태를 뜻하고 있습니다.

NAVER 사전

한글사전 “가용성”

“가용성”을 한글사전을 찾아보면 정보통신 사전에서 조금 더 자세하게 정의가 되어 있고 더불어 계산식에 대한 설명을 해주고 있습니다.

NAVER 사전

위키피디아 “Availability”

Wikipedia에서 Availability에 대해 자세히 설명 되어 있어 가져왔습니다.

원문: https://en.wikipedia.org/wiki/Availability

신뢰성 공학에서 가용성이라는 용어는 다음과 같은 의미를 갖습니다.

  • 시스템, 하위 시스템 또는 장비가 임무 시작 시, 임무가 알 수 없는, 즉 임의의 시간에 호출될 때 지정된 작동 가능하고 커밋 가능한 상태에 있는 정도.
  • 항목이 이상적인 지원 환경에서 명시된 조건에서 사용될 때 주어진 시점에서 만족스럽게 작동할 확률입니다.

일반적으로 고가용성 시스템은 99.98%, 99.999% 또는 99.9996%로 지정될 수 있습니다.

예를 들면, 예상치 못한 굉장한 트래픽 부하로 응답이 어려운 web에서 어떻게 해서든 응답 처리를 해내고 있을 확률을 말 합니다. 이것이 가용성 인 것입니다. 이러한 가용성의 확률은 다음과 같이 계산할 수 있습니다.

The simplest representation of availability (A) is a ratio of the expected value of the uptime of a system to the aggregate of the expected values of up and down time (that results in the “total amont of time” C of the observation window)
https://en.wikipedia.org/wiki/High_availability#Percentage_calculation

위 표에서 보듯이 Availability 의 확률이 높을 수록 정상적으로 응답되지 않을 확률이 굉장히 낮다는 의미가 됩니다. 하지만 Availability의 확률이 높으면 고(High)가용성이 되는 것은 아닙니다. 고가용성(High Availability)에 대해서 위키피디아에서는 다음과 같이 정의를 하고 있습니다.

고가용성을 달성하는 데 도움이 될 수 있는 신뢰성 공학의 시스템 설계에는 세 가지 원칙이 있습니다.

  1. 단일 실패 지점 제거. 즉, 구성 요소의 오류가 전체 시스템의 오류를 의미하지 않도록 시스템에 중복성을 추가하거나 구축하는 것을 의미합니다.
  2. 안정적인 크로스오버. 중복 시스템에서는 교차 지점 자체가 단일 장애 지점이 되는 경향이 있습니다. 안정적인 시스템은 안정적인 교차를 제공해야 합니다.
  3. 발생하는 오류 감지. 위의 두 가지 원칙을 준수하면 사용자는 장애를 전혀 볼 수 없지만 유지 관리 활동은 반드시 해야 합니다.

단일 지점을 제거 하는 것에 대해서 강조하고 있습니다. 그리고 AWS의 공식 문서 지침에서도 AWS에서 사용할 수 있는 기능을 사용하여 단일 실패 지점을 없애는 방법에 중점을 둡니다.

AWS는 강력한 수준의 고가용성을 달성하기 위해 다음 지침을 따를 것을 권장합니다.

  • 단일 장애 지점이 없도록 시스템을 설계하십시오. 상태 비저장 및 상태 저장 구성 요소 모두에 대해 자동화된 모니터링, 장애 감지 및 장애 조치 메커니즘 사용
  • 단일 장애 지점(SPOF)은 일반적으로 N+1 또는 2N 중복 구성으로 제거됩니다. 여기서 N+1은 활성-활성 노드 간의 로드 밸런싱을 통해 달성되고 2N은 활성-대기 구성의 노드 쌍에 의해 달성됩니다.
  • AWS에는 확장 가능한 로드 밸런싱 클러스터 또는 활성-대기 쌍 가정과 같은 두 가지 접근 방식을 통해 HA를 달성하는 몇 가지 방법이 있습니다.
  • 올바르게 계측하고 시스템 가용성을 테스트합니다.
  • 장애에 대응, 완화 및 복구하기 위한 수동 메커니즘에 대한 운영 절차를 준비합니다.
단일 지점이 제거된 고가용성 구조의 WWW 인스턴스 장애와 RDS의 장애발생 시 장애를 우회하는 구조 설명

만약 AWS에서 Elastic Load balancer를 만들 때 2개 이상의 Subnet에 위치하도록 하게 된다면, 실제로 endpoint domain에 Lookup IP Address가 subnet의 개수와 동일 하게 생성 된다는 건 이해 하고 있을 겁니다.

결국 Elastic Load Balacer는 단일 장애 지점이 없도록 구성이 되어졌고, 각 멀티 AZ에서 동일한 중복 리소스를 생성 함으로 써 고가용성을 달성 하게 된다고 봅니다.

내결함성 (Fault tolerance)

영어사전 “Tolerance”

사전적 의미부터 확인 해보겠습니다. 무엇인가를 절대선이 없이 관대하게 인내하는 뜻을 담고 있습니다.

NAVER 사전

한글사전 “결함성”

이번에는 한글로 검색 해보았습니다. 의아하게도 사전에 있을만한 단어인 것 같았는데 막상 사전에서는 검색이 안됩니다. 그나마 가장 유사한 한자어인 “내고장성”으로 검색 해보았습니다.

NAVER 사전

영어, 한글 사전의 의미만 보더라면 일부분에 어떠한 문제가 생겼음에도 정상적으로 동작이 유지되는 형상을 의미 하고 있습니다.

위키피디아 “Fault tolerance”

위키피디아에는 좀 더 상세하게 정의가 된 내용이 있습니다.

원문: https://en.wikipedia.org/wiki/Fault_tolerance#Fault_tolerance_techniques

  • 내결함성은 일부 구성 요소 내에서 하나 이상의 오류가 발생하는 경우에도 시스템이 계속 제대로 작동할 수 있도록 하는 속성입니다.
  • 작동 품질이 조금이라도 저하되면 그 감소는 고장의 심각도에 비례합니다.
  • 순진하게 설계된 시스템(naively designed system)은 작은 고장이라도 전체 고장을 일으킬 수 있습니다.
  • 내결함성은 특히 고가용성, 미션 크리티컬 또는 생명과 직결되는 시스템에서 필요합니다.

이와 함께 내결함성의 기술에 장애 복구 방식에 대해서도 안내가 되어 있습니다.

* 장애복구 방식

  • 장애 허용 시스템에서 장애 복구는 롤포워드 복구(roll-forward)와 롤백 복구(roll-back)로 나눌 수 있다.
  • 시스템 장애로 인해 오류가 일어났을 때 롤 포워드 복구에서는 그 시점의 시스템 상태로 복구를 실시한다.
  • 롤백 복구에서는 시스템 상태를 약간 이전으로 되돌려(예를 들어, Checkpointing 사용) 거기에서부터 처리를 재개한다.
  • 롤백 복구에서는 체크 포인트(되돌리는 지점)와 장애 발생 지점과의 사이의 처리는 멱등 (몇 번 실행해도 1회 실행한 것과 같은)이 아니면 안 된다.
  • 몇 개의 시스템은 오류의 종류나 오류 발생 수에 의해서 롤포워드 복구와 롤백 복구를 구현한다.

* 이중화 시스템 (Fault-tolerance by replication)

이중화에 의한 장애 허용 시스템은 특징은 세 가지로 나뉜다.

  • 리플리케이션(Replication):동일한 시스템을 복수로 준비하여 병렬로 실행시켜 다수를 만족한 올바른 결과를 적용한다.
  • 다중화(Redundancy) : 동일한 시스템의 복수로 준비하여 장애가 일어나면 보조 시스템으로 전환한다.
  • 다양화(Diversity):같은 사양에 다른 하드웨어 시스템을 복수로 준비하여 복제화와 같이 그것을 운용한다. 이 경우, 각 시스템이 똑같은 장애를 일으키지 않는다. (e.g RAID)
고가용성 구조과 내결함성을 가진 구조의 차이점

비유 설명

많은 분들이 해당 용어에 대해 학습과 설명 방법에 대해 고민을 많이 할 것입니다. 인터넷에 기술 블로그나 유튜브에서도 가장 많이 비유하는 것이 아마 이것 일 것 입니다.

원문: http://www.pbenson.net/2014/02/the-difference-between-fault-tolerance-high-availability-disaster-recovery/

* 고가용성 (High Availability)

보통은 4개의 바퀴를 사용하는 자동차에 하나의 타이어가 문제가 생겼을 때 상황에 빗대어 설명 하고 있습니다.

  • 타이어가 펑크가 발생하여 자동차를 멈췄다 → 서비스 일시 중단
  • 스페어타이어로 교체 → Standby를 서비스로 전환
  • 다시 자동차를 달린다 → 서비스 복구

서비스가 일시 중단 되는 과정이 포함되어 있지만 복구 시간이 매우 짧게 되어 99.9999% 이상의 고가용성의 요건이 될 수 있습니다.

* 내결함성 (Fault Tolerance)

모두가 알겠지만 비행기가 공중에 운항 중일 때는 자동차와 같이 잠시 정차 할 수가 없습니다. 그래서 비행기에 프로펠러가 4개가 존재하고 1개의 프로펠러가 동작하지 않더라도 무사히 비행 운항을 할 수 있다는 점을 내결함성에 빗대어 설명 할 수 있습니다.

* 재난복구 (Disaster Recovery)

추가로 DR 관련 비유도 있어서 추가 하였습니다. 위 사진은 항공기 조종사(서비스트래픽)가 비행시 운행(서비스)가 불가능 할 때 탈출하여 다른 비행기(DR)로 바꿔서 탑승 할 수 있다는 의미에서 비유 된 이미지 입니다.

마무리

지금까지 고가용성과 내결함성의 의미를 확인해 보았습니다. 모쪼록 용어를 이해하고 실무와 연결하는데 작게나마 도움이 되셨길 바랍니다.

--

--