# 가용성과 확장성의 확보

## 가용성과 확장성을 확보하기 위해

Web 3계층은 Stand-alone 구성의 2가지 단점을 해결했지만, 가용성과 확장성에 대한 문제는 여전히 남아있다.

* ~~물리적으로 떨어진 장소에서 접근할 수 없다~~
* ~~복수 사용자가 동시에 작업할 수 없다~~
* 가용성이 낮다 (서버가 1대밖에 없기 때문에 장애가 일어나면 서비스가 정지한다)
* 확장성이 부족하다 (서버가 1대밖에 없기 때문에 해당 서버의 성능이 한계에 달하는 경우 서버를 상위 기종으로 교환하거나 고성능 부품으로 교환하는 것 외에는 성능을 개선할 방법이 없다)

## 어떻게 하면 정지하지 않는 시스템을 만들 수 있을까

아키텍처 설계에서 **견고한 시스템**을 만들기 위해 가장 중요한 점은 **가용성**이다.

## 가용성을 높이는 2가지 전략

가용성을 높이기 위한 접근 방법은 **'심장전략'**&#xACFC; **'신장전략'** 이 있다.

{% hint style="info" %}
심장전략 ( 고품질 - 소수전략 )

&#x20;시스템을 구성하는 각 컴포넌트의 신뢰성을 높여 장애 발생률을 낮게 억제해서 가용성을 높인다 (소수정예 노선).
{% endhint %}

{% hint style="success" %}
신장전략 ( 저품질 - 다수전략 )

시스템을 구성하는 각 컴포넌트의 신뢰성을 계속해서 높이기 보다는 '사물은 언젠가 망가진다' 라는 체념을 전제로 여분을 준비해 둔다. 이를 철저히 대비하는 것을 '물량작전' 이라고 부른다.
{% endhint %}

## 심장은 왜 2개가 아닌가, 시스템 세계도 인체와 동일?

심장전략과 신장전략은 내구 소비재의 가용성을 높이기 위해 널리 사용되고 있다. 과거에는 두 가지의 전략 중 어느 쪽이 효율적인가를 확실히 알지 못했기 때문에 양쪽 노선 모두를 추구하였지만, 현재는 **'신장전략'** 노선에 손을 들고 있다.&#x20;

즉, 부품 한 개의 신뢰성을 올리는 것보다 저품질이라도 수량으로 보완한다는 일종의 물량작전이다.

## 클러스터란

신장전략과 같이 **동일한 기능의 컴포넌트를 병렬화**하는 것을 **'클러스터링(Clustering)'** 이라고 부른다. 또한, 클러스터 구성으로 시스템의 가동률을 높이는 것을 '여유도(Redundancy)를 확보한다' 또는 **'다중화'** 라고 지칭한다.&#x20;

같은 기능을 가진 서버를 늘리면 늘릴수록, 시스템 전체에서 **장애 발생률이 낮아**지고 **가동률(시스템의 무고장으로 동작할 확률)은 높아**진다.

## 단일 장애점이란

**단일 장애점**이란 다중화되어 있지 않아서 **시스템 전체 서비스의 지속성에 영향을 주는 컴포넌트**를 말한다.&#x20;

'쇠사슬의 강도는 가장 약한 고리의 강도로 결정된다'는 말과 같이, **단일 장애점의 신뢰성이 시스템 전의 가용성을 결정**한다. &#x20;

{% hint style="info" %}
**신뢰성과 가용성**

신뢰성과 가용성은 문맥에 따라 거의 같은 의미로 사용되기도 하지만, 일반적으로 **신뢰성은 하드웨어나 소프트웨어 고장 빈도나 간을 나타내는 개념**이고, **가용성은 사용자 입장에서 볼 때 시스템을 어느 정도 사용할 수 있는지**를 나타낸다. 즉, **시스템을 구성하는 컴포넌트에 대해 적용하는 것이 신뢰성**이고, **시스템 전체에서 사용자 눈높이에 맞춰 생각하는 경우가 가용성**이라고 생각하면 된다.&#x20;

따라서 신뢰성이 낮은 컴포넌트를 사용한다 하더라도, 다중화(클러스터)한다면 시스템 전체의 가용성을 높일 수 있다.&#x20;
{% endhint %}
