Diary/TIL

2024-04-13) 대규모 시스템 설계 기초 CH1: 규모 확장, 캐시

nsean 2024. 5. 19. 23:51

프로젝트 적용

시스템 성능을 최적화하기 위해 수직적 확장과 수평적 확장을 적용하고, 로드밸런싱 기술을 사용하기로 결정했다. 하지만 데이터베이스 다중화는 금액적인 문제로 일단 보류하였다. 읽기 작업이 자주 발생하기 때문에 읽기 주도형 캐시 전략(Read-Through Cache)을 채택하여 성능을 개선하기로 했다.

아래는 책에서 공부한 내용을 가볍게 정리한 내용이다.

수직적 확장 (Vertical Scaling)

  • 장점:
    • 단순함: 서버의 하드웨어 자원을 추가하거나 업그레이드하는 방식으로, 설정이나 관리가 비교적 쉽다.
    • 빠른 성능 향상: 기존 서버의 CPU, 메모리, 디스크 등을 업그레이드하면 성능이 즉시 개선된다.
  • 단점:
    • 한계 존재: 서버의 하드웨어 자원을 무한정으로 업그레이드할 수는 없다. 물리적, 경제적 한계가 있다.
    • 장애 대응 부족: 단일 서버에 문제가 발생하면 서비스가 중단될 수 있다. 자동 복구나 다중화 방안이 부족하다.

수평적 확장 (Horizontal Scaling)

  • 장점:
    • 확장성: 필요에 따라 서버를 추가하여 성능을 개선할 수 있다. 트래픽 증가에 유연하게 대응할 수 있다.
    • 고가용성: 여러 대의 서버가 동시에 운영되므로, 한 대의 서버에 장애가 발생해도 서비스가 지속된다.
    • 부하 분산: 로드밸런서를 통해 트래픽을 분산하여 각 서버의 부하를 줄일 수 있다.
  • 단점:
    • 복잡성: 여러 대의 서버를 관리하고 조율해야 하므로 설정과 관리가 복잡하다.
    • 비용: 서버를 추가할 때마다 비용이 증가할 수 있다.

로드밸런서

  • 역할: 트래픽을 여러 대의 서버에 분산시켜 각 서버의 부하를 줄이고, 서비스의 가용성과 안정성을 높인다.
  • 보안: 공개된 로드밸런서 IP 주소를 통해 접속을 허용하고, 서버 간 통신에는 사설 IP 주소를 사용하여 보안을 강화한다.

데이터베이스 다중화

  • 마스터-슬레이브 관계: 마스터 서버는 쓰기 연산을, 슬레이브 서버는 읽기 연산을 담당한다. 슬레이브 서버는 마스터 서버로부터 데이터를 복제받는다.
  • 장점:
    • 성능 향상: 읽기 연산의 비중이 높기 때문에 슬레이브 서버를 추가하여 병렬 처리가 가능해져 성능이 향상된다.
    • 안정성 증가: 데이터베이스의 다중화로 인해 가용성과 안정성이 증가한다.
  • 구성: 읽기 연산이 많은 대부분의 애플리케이션에서 슬레이브 서버의 수가 많아야 성능을 극대화할 수 있다.

 

분산을 통해서 다음과 같은 문제를 해결할 수 있다.

 

1. 네트워크 입출력 한계

EC2 인스턴스는 네트워크 대역폭에 제한이 있다. 인스턴스 유형에 따라 네트워크 성능이 다르며, 이는 최대 대역폭과 처리 가능한 패킷 수로 측정된다.

  • 대역폭: 각 인스턴스 유형은 최대 대역폭이 설정되어 있다. 예를 들어, 작은 인스턴스는 대역폭이 낮고, 고성능 인스턴스는 더 높은 대역폭을 제공한다.
  • ENI (Elastic Network Interface): 추가 네트워크 인터페이스를 통해 네트워크 용량을 확장할 수 있다.

2. 디스크 I/O 한계

디스크 I/O 성능은 EC2 인스턴스와 연결된 EBS(Elastic Block Store) 볼륨의 유형과 크기에 따라 달라진다.

  • IOPS (Input/Output Operations Per Second): EBS 볼륨은 프로비저닝된 IOPS 성능에 따라 다르다. 일반적인 SSD, 프로비저닝된 IOPS SSD, 스루풋 최적화 HDD 등 다양한 유형이 있다.
  • 스냅샷 및 복제: 데이터 복제와 스냅샷을 통해 I/O 부하를 분산할 수 있다.

3. CPU 및 메모리 한계

각 인스턴스 유형은 고유의 CPU 성능과 메모리 용량을 가진다.

  • vCPU: 각 인스턴스는 할당된 가상 CPU(vCPU) 수에 따라 처리 성능이 달라진다.
  • 메모리: 메모리 크기도 인스턴스 유형에 따라 다르며, 애플리케이션의 메모리 사용량을 고려하여 적절한 인스턴스를 선택해야 한다.

캐시

캐시는 비싼 연산 결과나 자주 참조되는 데이터를 메모리에 저장하여 뒤이은 요청을 빨리 처리할 수 있도록 하는 저장소이다.

읽기 주도형 캐시 전략 (Read-Through Cache)

개념: 데이터를 캐시에서 먼저 조회하고, 캐시에 없으면 데이터베이스에서 가져와 캐시에 저장하는 방식.

장점:

  • 일관성 유지: 캐시 미스 발생 시 데이터베이스에서 데이터를 가져와 즉시 사용자에게 제공.

단점:

  • 응답 시간: 캐시 미스 발생 시 초기 응답 시간이 느릴 수 있음.

다른 캐시 전략들

  1. Write-Through Cache: 데이터베이스에 쓰일 때 캐시에도 쓰는 방식.
  2. Write-Behind Cache: 캐시에 먼저 쓰고 나중에 데이터베이스에 쓰는 방식.
  3. Cache-Aside: 애플리케이션이 직접 데이터베이스에서 데이터를 가져와 캐시에 저장하는 방식.
  4. Refresh-Ahead Cache: 캐시 만료 전에 데이터를 미리 갱신하는 방식.