[Database] 데이터베이스와 아키텍처 구성 2 - 데이터베이스 첫걸음
가용성과 확장성의 확보
- Web 3계층으로 모든 문제가 해결되면 좋겠지만, 그리 간단하지는 않다.
- Stand-alone 구성의 단점 중 2가지 문제(물리적으로 떨어진 장소에서 떨어질 수 없다, 복수 사용자가 동시에 작업할 수 없다)는 해결했지만, 가용성이 낮다는 문제와 확장성이 부족하다는 문제가 남아 있다.
가용성을 높이는 2가지 전략
- 심장 전략 (고품질, 소수 전략)
- 시스템을 구성하는 각 컴포넌트의 신뢰성을 높여 장애 발생률을 낮게 억제해서 가용성을 높인다.
- 신장 전략 (저품질, 다수 전략)
- 시스템을 구성하는 각 컴포넌트의 신뢰성을 계속해서 높이기보다는 “사물은 언젠가 망가진다”란 체념을 전제로 여분을 준비해 둔다.
- 이를 철저히 대비하는 것을 물량 작전이라고 부른다.
- 과거의 시스템 세계에서는 두 가지 전략 중 어느 쪽이 더 효율적인가를 확실히 알지 못했기 때문에, 양쪽 노선 모두를 추구했다.
- 하지만 현재는 거의 신장 전략 노선에 손을 들고 있다.
- 부품 한 개 한 개의 신뢰성을 높이는 것보다 저품질이라도 수로 보완한다는 일종의 물량 작전이다.
📍 심장 전략과 신장 전략의 관계
- 현재는 신장 전략 노선에 손을 들고 있지만, 심장 전략이 완전히 폐기된 것은 아니다.
- 예를 들어, 하드웨어의 신뢰성을 매우 높인 서버 등에는 현재도 이용되고 있다.
- 대표적으로 FT 서버(Fault Tolerant Server)가 있다.
- FT 서버는 1대의 물리 머신의 신뢰성을 매우 높이고(그만큼 보통 서버보다 가격이 비쌈), 장애 발생률을 매우 낮게 억제하도록 만들어졌다.
- 이에 따라 클러스터 구성으로는 어떻게 해도 발생하는 것을 막을 수 없는 전환 시간을 짧게 하고, 무정지에 가까운 서비스를 계속하는 것이 가능하다는 장점이 있다.
- 하지만 이런 FT 서버도 내부에서는 CPU, 메모리, 네트워크 인터페이스 같은 부품을 다중화하여 신뢰성이 높도록 설계된 부분이 많다.
- 이를 보면 심장 전략과 신장 전략은 중첩되며, 심장 전략도 사실은 신장 전략에 의해 실현되고 있다고 볼 수 있다.
클러스터란
- 신장 전략처럼 동일한 기능의 컴포넌트를 병렬화하는 것을 클러스터링이라고 부른다.
- 클러스터는 사물이나 사람의 집합을 가리키는 말로, 포도 등의 송이라는 의미도 있다.
- 이 의미처럼 시스템 세계에서는 “동일한 기능의 컴포넌트를 복수 개 준비하여 한 개의 기능을 실현한다”는 의미로 사용된다.
- 클러스터 구성으로 시스템의 가동률을 높이는 것을 “여유도를 확보한다” 또는 다중화라고 지칭한다.
- 다중화는 시스템 세계에서 “내구성이 더 높고 견고하다”는 좋은 의미가 있다.
- 같은 기능을 가진 서버를 늘리면 늘릴수록 시스템 전체에서 장애 발생률이 낮아지기 때문에 이 점에서 컴포넌트 수가 많은 것이 맞는 것처럼 보인다.
- 어떤 서버의 고장률이 10%라고 가정
- 서버 1대 10%
- 서버 2대 1%
- 서버 3대 0.1%
- 이 장애 발생률을 100%에서 뺀다면 역으로 시스템이 무고장으로 동작할 확률, 즉 가동률이 나온다.
가동률
- 가동률 100%는 원리적으로 불가능하다.
- 컴포넌트를 어느 정도 병렬로 추가해도 시스템 가동률은 100%가 되지는 않고, 한없이 근접해 간다.
- 이것은 모든 서버나 네트워크 기기가 동시다발로 고장 나는 가능성을 완전히 배제할 수 없기 때문이다.
- 서버 대수가 증가하면 증가할수록 1대를 추가함에 따라 얻을 수 있는 가동률의 향상 폭이 작아진다.
- 1대에서 2대로 증가할 때는 가동률이 90%에서 99%로 9% 증가한다.
- 이에 비해 2대에서 3대로 증가할 때는 99%에서 99.9%로 0.9% 증가한다.
- 결국 돈을 쓰면 쓸수록 1대분에서 얻을 수 있는 효과가 준다는 것을 알 수 있다.
단일 장애점이란
- 다중화되어 있지 않아서 시스템 전체 서비스의 계속성에 영향을 주는 컴포넌트를 단일 장애점이라고 한다.
- “쇠사슬의 강도는 가장 약한 고리의 강도로 결정된다”라는 말이 있는데, 이는 “단일 장애점의 신뢰성이 시스템 전체의 가용성을 결정한다”는 사실을 표현한 말이다.
- 서버나 네트워크 기기 등 시스템을 구성하는 컴포넌트가 증가하면 당연히 돈이 더 든다.
- 단일 장애점을 없애기 위해 대부분 이중화는 해두지만, 그 이상 어느 정도 돈을 들여 다중화할지는 예산 제약과 바라는 신뢰성 수준의 저울질에 달려 있다.
- 즉, 장애 발생률 0%에 도달하고 싶어 비용을 많이 들여도 현재는 불가능하다.
📍 신뢰성과 가용성
- 시스템 세계에서의 신뢰성은 “하드웨어나 소프트웨어가 고장 나는 빈도나 고장 기간”을, 가용성은 “사용자 입장에서 볼 때 시스템을 어느 정도 사용할 수 있는지”를 나타내는 개념이다.
- 즉, 시스템을 구성하는 컴포넌트에 대해 적용하는 것이 신뢰성이고, 시스템 전체에서 사용자 눈높이에 맞춰 생각하는 경우가 가용성이라고 생각하면 된다.
- 따라서 신뢰성이 낮은 하드웨어나 소프트웨어를 사용하고 있다 하더라도, 다중화(클러스터링)를 한다면 시스템 전체의 가용성을 높일 수 있다.
- 가용성을 나타내는 지표인 가용률은 일반적으로 백분율로 나타낸다.
- 일반적으로 신뢰성이 99%라고 하면 매우 신뢰할 만하다고 할 수 있지만, 시스템 세계에서 가용성 99%는 1%의 시간은 이용이 불가능한 상황이 된다는 뜻이 되므로 1년 중 1%인 3~4일 정도는 서비스 다운이 일어날 수 있음을 의미한다.
- 즉, 이는 가용성이 상당히 낮다고 볼 수 있다.
- EC(Electronic Commerce) 사이트가 하루동안 다운된다면, 그만큼 고객을 놓치는 기회 손실로 연결되므로 많은 시스템이 ‘24시간 365일 무정지’를 목표로 하는 이유가 있다.
Leave a comment