시스템 스케일링: 더 큰 머신 또는 더 많은 머신?
Source: Dev.to
확장성(Scalability)이란?
더 큰 머신을 구매하거나 머신을 추가로 구매하여 더 많은 요청을 처리할 수 있게 하는 능력을 확장성이라고 합니다.
수직 확장 (Vertical Scaling)
수직 확장은 더 큰 머신을 사용하고 CPU, RAM, 네트워크 대역폭, 스토리지 등을 추가하여 요청을 훨씬 빠르게 처리하는 것을 의미합니다.
예시: 현재 시스템이 8코어 서버 용량 제한을 가지고 있다면, 이를 32코어 서버와 더 빠른 SSD 스토리지로 업그레이드할 수 있습니다.
장점
- 구현이 더 쉽습니다.
- 새로운 서버를 설치하는 것보다 하드웨어 업그레이드가 간단합니다.
- 유지보수가 용이합니다.
- 단일 머신만 존재하므로 로드 밸런서가 필요 없습니다.
- 데이터 일관성을 유지하기가 쉽습니다.
- 프로세스 간 통신이므로 속도가 빠릅니다.
단점
- 하드웨어 한계에 도달하면 더 이상 성장할 수 없습니다.
- 단일 장애 지점(SPOF) – 머신이 다운되면 전체 애플리케이션이 다운됩니다.
수평 확장 (Horizontal Scaling)
수평 확장은 머신을 더 많이 구매하는 것을 의미합니다. 요청은 이들 중 어느 머신으로든 전송될 수 있으며, 워크로드가 분산됩니다.
예시: 32코어 서버 하나 대신 8코어 서버 4대를 추가할 수 있습니다. 로드 밸런서가 필요합니다.
장점
- 하나의 서버가 실패해도 요청을 다른 서버로 재지정할 수 있습니다.
- 필요에 따라 머신을 무한히 추가할 수 있어 확장성이 뛰어납니다.
- 예측 불가능하거나 피크 워크로드에 더 적합합니다.
- 더 높은 복원력과 내결함성을 제공합니다.
- 장기적으로 비용 효율적일 수 있습니다.
단점
- 분산 시스템을 관리하는 것이 단일 서버를 관리하는 것보다 복잡하므로 유지보수가 어려워집니다.
- 여러 서버 간 데이터 일관성을 유지하기가 더 힘듭니다.
- 서버 간 통신이 네트워크를 통해 이루어지므로 상대적으로 느립니다.
- 여러 서버가 동일한 데이터를 처리·업데이트하려 할 때 일관성 문제가 발생할 수 있습니다.
수직 확장 vs. 수평 확장 선택 기준
다음과 같은 경우 수직 확장을 선택하세요:
- 데이터 일관성을 더 중시할 때
- 빠른 프로세스 간 통신이 필요할 때
- 설정 및 유지보수를 단순하게 하고 싶을 때
다음과 같은 경우 수평 확장을 선택하세요:
- 확장성을 최우선으로 할 때
- 복원력과 내결함성을 원할 때
- 예측 불가능하거나 피크 워크로드를 지원해야 할 때
실제 적용 시 고려 사항
실제로 대부분의 시스템은 두 접근 방식을 조합하여 각각의 장점을 최대한 활용합니다. 수직 확장은 단기적으로 비용이 저렴한 편이며, 수평 확장은 장기적으로 더 비용 효율적일 수 있습니다.
“스케일링은 목적지가 아니라 여정이다.” – Sahn Lam