백엔드 개발자 블로그

대용량 트래픽 처리 전략 본문

테크 블로그 리뷰

대용량 트래픽 처리 전략

backend-dev 2024. 2. 7. 14:59

https://medium.com/coupang-engineering/%EB%8C%80%EC%9A%A9%EB%9F%89-%ED%8A%B8%EB%9E%98%ED%94%BD-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%BF%A0%ED%8C%A1%EC%9D%98-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%A0%84%EB%9E%B5-184f7fdb1367

 

애플리케이션과 데이터베이스 사이에 코어 서빙 레이어를 도입하여, 데이터베이스의 가용성을 높이면서 고객에게 데이터를 지연시간(latency) 없이 전달하는 과정을 요약했습니다.

 

배경

각 데이터는 유형별로 백엔드의 개별 마이크로서비스 아키텍처에서 관리되므로 모든 마이크로서비스에 상시 고가용성이 확보되어야 합니다. 그리고 자주 사용하는 비즈니스 로직 코드는 각 프런트엔드 페이지에 중복 코드로 남습니다. 이런 이유로 모든 페이지에서 공통으로 사용되는 데이터와 비즈니스 로직을 처리할 수 있는 단일 마이크로서비스가 필요해졌습니다.

 

코어 서빙 레이어

위의 문제를 해결하기 위해 코어 서빙 레이어를 도입하였고 아래와 같은 목표을 두었습니다.

  • 장애 없이 상시 99.99%의 고가용성 및 사고 발생 시 최단 시간 내 빠른 복구 보장
  • 고처리량으로 데이터 서빙 및 지연시간 최소화로 대량의 데이터 읽기 트래픽 처리
  • 여러 도메인에서 실시간으로 집계된 데이터의 일관성과 최신성 보장
  • 프런트엔드의 복합도 및 코드 중복 감소를 위한 비즈니스 로직 코드 통합

아키텍처

코어 서빙 레이어는 모든 페이지에 필요한 데이터 및 비즈니스 로직을 서빙할 수 있는 마이크로서비스입니다.

 

통합 NoSQL 데이터 스토리지​

  1. 마이크로서비스 별로 데이터를 분리해 데이터 읽기 속도 및 처리량을 높임
  2. 백엔드의 각 마이크로서비스가 업데이트된 데이터를 큐로 보내고 NoSQL DB인 공용 스토리지에 저장합니다. 이를 통해 일관성 유지와 한번의 읽기 작업으로 모든 데이터를 가져올 수 있게 되었습니다.
  3. 코어 서빙 레이어에  NoSQL 데이터 스토리지​를 통합해 I/O를 상당히 줄이고 대규모의 데이터 처리를 지원할 수 있게 했습니다.

Read-through 캐시 레이어

대용량의 트래픽 처리와 지연시간 최소화를 강화하기 위해 read-through 캐시 레이어를 추가했습니다. 

주의사항 : 공용 스토리지의 데이터 업데이트가 캐시 레이어에 상시 반영되지 않습니다.

해결 방법 : 캐시 무효화(cache invalidation) 로직 

공용 스토리지에 데이터 업데이트가 발생할 때마다 알림 큐로 데이터를 일종의 신호로 전송합니다. 알림 큐에서는 해당 신호를 바탕으로 캐시 레이어의 오래된 데이터를 최신 데이터로 교체합니다.

 

실시간 데이터 스트리밍

Read-through 캐시 레이어는 분 단위로 최신 데이터를 업데이트합니다. 하지만 일부 데이터는 초 단위로 처리될 필요가 있는 경우 실시간 데이터 스트리밍을 적용합니다.

  1. 실시간 데이터 업데이트 스트리밍은 큐에서 변경된 데이터를 읽고 별도의 실시간 캐시 레이어에 데이터 쓰기 작업을 즉각 실행합니다.
  2. 공용 서빙 레이어는 캐시 및 실시간 캐시 레이어를 동시에 읽고, 양쪽 레이어에서 가장 최신 데이터를 서빙하도록 설계되어 지연시간 최소화를 추가적으로 지원합니다. 

 

고가용성 전략

핵심 페이지의 고가용성을 위해 CSP(Critical Serving Path) 를 적용했습니다.

핵심 페이지의 고가용성을 위해 CSP 클러스터를 분리 구성하고, 그 외의 페이지는 비핵심 서빙 경로(Non CSP, N-CSP) 클러스터로 옮겼습니다. 

두 개 클러스터는 서로 독립되어 있기 때문에 N-CSP 클러스터의 사고는 CSP 클러스터에 영향을 주지 않습니다. 반면, CSP 클러스터에 사고가 발생하는 경우 새로운 배포 없이 동적으로 CSP에 속한 페이지 모두를 N-CSP 클러스터를 바라보게 해 고객 경험에 부정적인 영향을 미치는 것을 막을 수 있습니다.

 

코어 서빙 레이어 템플릿

다양한 도메인과 여러 애플리케이션 별로 코드베이스를 구축해 코어 서빙 레이어와 동일한 기능을 각 코드베이스가 제공하게 되면 곳곳에 중복된 코드가 생겨나게 되고 관리는 어려워지므로 코어 서빙 레이어를 여러 도메인에 적용할 수 있도록 표준화가 필요합니다. 

그래서 코어 서빙 레이어의 구현을 단순화하고 핵심 비즈니스 로직을 공유하면서 동시에 각 도메인의 특수한 니즈에 맞춰 사용할 수 있는 코어 서빙 템플릿을 만들었습니다.