1 Web System Design
- 현대의 웹 시스템은 높은 가용성과 확장성이 요구됩니다.
- 수많은 사용자가 동시에 접속하고, 24시간 365일 중단 없는 서비스를 제공해야 하는 환경에서 시스템 설계는 매우 중요한 과제가 되었습니다.
- 이 글에서는 웹 시스템의 가용성을 높이고 확장성을 확보하기 위한 다양한 전략과 구체적인 구현 방법에 대해 알아보겠습니다.
2 가용성(Availability)
- 가용성이란 시스템이 서비스를 정상적으로 제공할 수 있는 상태를 말합니다.
- 항상 서비스를 이용할 수 있는 시스템을 가용성이 높은 시스템이라고 합니다.
2.1 서비스 다운 원인
- 광역 네트워크 장애
- 광역 전원 장애
- 하드웨어 장애
- 소프트웨어 장 애
- 점검 기간
- 고부하에 따른 요청 타임아웃
2.2 여러 하위 시스템이 연결된 환경에서의 가용성
- 마이크로서비스와 같이 여러 서비스가 연계되어 동작하는 경우 연계 서비스가 다운되어 전체 서비스에 영향을 미칠 수 있습니다.
- 시스템 A의 가용성이 a%이고, 시스템 B의 가용성이 b%일 때, 두 시스템을 연계한 전체 시스템의 가용성은 a * b%입니다.
- 예를 들어 서로 독립적으로 99.99%의 가용성을 가진 5대의 시스템을 연동하면 전체 시스템의 가용성은 99.95%입니다.
- 이는 연간 다운 타임이 4시간 23분 정도 됩니다.
- 만약 한대만 95%인 경우 연간 다운 타임은 18일 정도가 됩니다.
2.3 높은 가용성을 가진 시스템 설계 방법
- 가용성을 높이기 위해서는 사용 불가능 시간을 최대한 발생시키지 않고 발생하더라도 최대한 짧게 만들어야 합니다.
- 다음과 같은 방법으로 가용성을 높일 수 있습니다.
2.4 시스템 이중화
- 시스템 이중화는 단일 장애점(SPOF, Single Point of Failure)을 제거하기 위한 방법입니다.
- SPOF는 단일 장애점으로 이 지점에 장애가 발생하면 전체 시스템이 다운되는 지점을 말합니다.
- 결국 시스템 이중화란 시스템의 일부분이 사용할 수 없게 되어도 다른 시스템을 이용하여 서비스를 계속 제공할 수 있도록 하는 것입니다.
- 여기서 중요한 점이 대체 시스템이 별도의 시스템이어야 한다는 것입니다.
- 예를 들어 데이터 이중화를 위해 백업 데이터를 원본 서버에 저장하면 서버 장애시 원본 데이터도 백업 데이터도 사용할 수 없게 됩니다.
- 이중화 시스템은 네트워크 지연과 데이터 전송 능력을 감안하여 범위 내 지리적, 물리적으로 떨어진 장소에 구축하는 것이 좋습니다.
- AWS에서는 Multi-AZ라는 형태로 데이터 센터 레벨의 독립적인 시스템을 제공합니다.
2.4.1 데이터베이스 이중화
- 데이터베이스의 이중화는 기본적으로 어렵습니다.
- 데이터베이스 이중화의 경우 하드웨어뿐만 아니라 안에 저장된 데이터도 이중화해야 합니다.
- 데이터베이스 이중화는 아래의 방법으로 구현할 수 있습니다.
- 여러 대의 데이터베이스의 같은 데이터를 저장하고 참고한다.
- 한쪽의 데이터를 저장하고 자동으로 반대쪽 데이터를 동기화한다. 다운이 발생하면 다른 쪽의 데이터베이스를 사용한다.
- 1번의 경우 쓰기, 읽기 모두 응답 속도의 저하를 막을 수 없습니다.
- 2번의 경우 다운 발생 시 다른 한쪽을 사용할 수 있게 하는 패일오버 작업이 어렵지 않습니다.
- 하지만 자동으로 데이터 동기화가 어렵습니다.
- 동기 방식의 경우 동기화 처리 중 지연에 따른 성능 저하가 발생할 수 있습니다.
- 비동기 방식의 데이터베이스 간의 데이터 불일치 문제가 발생할 수 있습니다.
2.5 시스템 확장
- 사용자의 요청이 많아 지금의 인프라로 요청을 받을 수 없다면 이 또한 서비스 다운과 같은 상태입니다.
- 따라서 부하가 많을 때도 사용자의 정상적인 서비스를 제공하기 위해서는 시스템을 확장을 통해 가용성을 높여야 합니다.
- 요규되는 시스템 성능에 따라 동적으로 서버 구성으 변경되고 시스템의 처리 능력을 최적할 할 수 있는 시스템을 확장 가능한 시스템이라고 합니다.
- 확장 가능한 시스템을 구축하는 방법은 3가지가 있습니다.
- 스케일 업/다운을 한다.
- 스케일 아웃/인을 한다.
- 클라우드 사업자가 확장성을 보증하는 서비스를 사용한다.
2.5.1 스케일 업/다운