중요하지만 다소 헷갈리는 부분인 Scalability(확장성)과 High Availability(고가용성)에 대해 알아보겠습니다.
확장성과 고가용성의 개념을 한장으로 요약하면 다음과 같습니다. 그림으로 전체적인 개념을 알았다면 이제 자세히 알아봅시다.
확장성은 어플리케이션이나 시스템이 적응을 통해 더 큰 부하를 처리할 수 있음을 의미합니다.
수직적 확장성이란 갯수에는 변화를 주지 않고 인스턴스의 크기를 확장하는 개념입니다. 수직적 확장성은 데이터베이스와 같은 비분산시스템이고, 따라서 크기를 키우는데 한계가 있습니다.(하드웨어 용량의 한계) 쉽게 전화 상담직원으로 예를 들어보겠습니다.
그림과 같이 1시간에 5개의 고객 민원을해결할 수 있는 직원을 1시간에 20개의 고객 민원을 해결할 수 있도록 키운것(scaled up)이 수직적 확장성입니다. 하지만 직원이 아무리 능력있어지더라도 1시간에 20000건의 고객 민원을 처리할 수 없듯이, 크기의 한계가 존재합니다.(물리적 한계)
데이터 베이스와 같은 분산되지 않은 데이터 베이스에서 사용합니다. (ex. RDS, ElastiCache)
수평적 확장성은 애플리케이션에서 인스턴스나 시스템 수를 늘리는것 입니다. 수평적 확장을 했다는 것은 분배 시스템이 있음을 의미합니다. 이번에도 전화 상당원으로 예를 들어보겠습니다.
그림과 같이 1시간에 5개의 고객 민원을 해결할 수 있는 직원이 있고, 더 많은 고객 민원을 해결하기 위해 직원을 더 많이 고용하는 것이 수평적 확장성입니다.
고가용성이란 애플리케이션이나 시스템을 적어도 둘 이상의 AWS의 AZ나 데이터 센터에서 가동 중이라는 걸 의미합니다. 고가용성의 목표는 데이터 센터에서의 손실에서 살아남는 것으로 센터 하나가 멈춰도 계속 작동이 가능하게끔 하는 것 입니다.
다음 그림처럼 다양한 지역과 연결되어 있다면 특정 지역에 문제가 생겨도 전체적인 시스템이 작동하는데는 문제가 없습니다. 이를 가용성이 높다고 표현합니다.
잘 봤습니다. 좋은 글 감사합니다.