API Gateway의 다중 계층 캐싱이 높은 트래픽 문제를 해결합니다
January 26, 2024
현대 개발에서 API 사용이 계속 증가함에 따라, 효율적이고 신뢰할 수 있는 API 게이트웨이에 대한 수요도 증가하고 있습니다. API 게이트웨이는 모든 들어오는 API 요청에 대한 단일 진입점 역할을 하며, 이를 통해 다양한 마이크로서비스에 효율적으로 관리 및 분배할 수 있습니다. API 게이트웨이는 많은 이점을 제공하지만, 높은 트래픽 상황에서는 어려움에 직면할 수 있습니다.
APISIX의 캐싱 메커니즘
다음 플로우차트는 APISIX가 지연 시간을 최소화하고 성능을 향상시키기 위해 사용하는 효율적인 캐싱 메커니즘을 보여줍니다. 여러 수준에서 응답을 캐싱함으로써, APISIX는 업스트림 서버의 부하를 효과적으로 줄이고 클라이언트에게 더 빠른 응답을 제공할 수 있습니다.
클라이언트 <-- HTTP 요청 --> APISIX 워커
(프로세스 수준에서 LRU 캐시 확인)
(캐시 미스)
(데이터 플레인 수준에서 공유 DICT 캐시 확인)
(락 획득 실패)
(락 획득, 캐시 확인)
(캐시 히트)
(�시된 응답 반환, 락 해제)
(캐시 미스)
(Redis 조회)
(뮤텍스 획득)
(Redis 조회)
(캐시 미스)
(업스트림에서 응답 검색)
(공유 DICT 캐시에 응답 캐싱)
(클라이언트에 응답 반환)
(캐시 히트)
(응답을 공유 DICT 캐시에 복사)
(캐시된 응답을 클라이언트에 반환)
(Redis 뮤텍스 해제)
(락 해제)
(캐시 히트)
(캐시된 응답 반환)
LRU: APISIX 단일 워커 수준의 첫 번째 계층 캐싱
APISIX의 워커 수준에서 LRU (Least Recently Used) 캐시는 각 작업 프로세스 내에서 자주 액세스되는 데이터를 캐싱하는 중요한 구성 요소입니다. 이 캐시 시스템은 LRU 퇴출 알고리즘을 사용하여 데이터를 효율적으로 저장 및 검색하면서 가장 최근에 사용되지 않은 데이터를 우선적으로 처리합니다. 메모리에 자주 액세스되는 데이터를 캐싱함으로써, APISIX는 라우팅 규칙이나 인증 토큰과 같은 외부 데이터 소스를 조회할 때 지연 시간과 비용을 크게 줄여 시스템 응답 속도를 향상시킵니다.
이러한 지능형 캐싱 메커니즘을 통해, APISIX는 대량의 요청을 처리할 때 시스템 리소스를 효율적으로 활용하여 전반적인 시스템 성능과 안정성을 향상시킵니다. APISIX는 고급 LRU 캐시를 통해 개발자에게 신뢰할 수 있고 효율적인 API 게이트웨이 솔루션을 제공하여 외부 서비스와의 원활한 통신을 가능하게 합니다.
공유 Dict: APISIX 노드 수준의 두 번째 계층 캐싱
하나의 APISIX 노드 내 모든 작업 프로세스 간의 공유 메모리 사전(shared dict) 캐시입니다. 이는 API 응답 데이터나 응답 헤더와 같은 일반적으로 액세스되는 데이터를 위한 중앙 집중식 캐시 역할을 합니다. 여러 워커 프로세스가 동시에 이 캐시에 액세스하고 업데이트할 수 있어 데이터 일관성을 보장하고 불필요한 데이터 중복을 방지합니다.
이 공유 메모리 사전 캐시는 메모리 잠금 및 효율적인 데이터 구조와 같은 고급 기술을 활용하여 뛰어난 성능을 발휘합니다. 이를 통해 경합을 최소화하고 처리량을 극대화하는 목표를 달성합니다. 메모리 잠금을 통해 동시 액세스를 효과적으로 제어하여 여러 작업 프로세스 간의 동시 읽기 및 쓰기 작업 중 일관성을 보장합니다. 효율적인 데이터 구조 설계는 공유 메모리 사전 캐시가 데이터 검색 및 업데이트 작업을 더 빠르게 실행할 수 있도록 하여 전반적인 성능을 향상시킵니다.
공유 메모리 사전 캐시의 도입은 APISIX의 데이터 플레인에 더 큰 성능과 확장성을 부여하여 개발자에게 대규모 데이터 및 요청을 처리하는 데 탁월한 도구를 제공합니다.
APISIX 다중 계층 캐싱 메커니즘
아래 다이어그램은 APISIX의 다중 계층 캐싱 메커니즘을 보여줍니다. 이는 깔때기 원리와 유사합니다. 구체적으로, L1 캐시는 워커 내부의 LRU 캐시를 사용하고, L2 캐시는 여러 워커 간의 공유 dict이며, L3 캐시는 API 게이트웨이 외부의 Redis 데이터베이스입니다.
예를 들어, 10,000개의 사용자 요청이 APISIX를 통해 데이터를 조회할 때, L1 캐시의 적중률이 90%라면 9000개의 요청이 직접 반환됩니다. 나머지 1000개의 요청은 L2 캐시를 조회합니다. L2 캐시의 적중률도 90%라면, 100개의 요청이 L3 캐시인 Redis를 조회하게 됩니다. 이 100개의 요청이 Redis를 조회하기 전에 뮤텍스(상호 배제)를 먼저 조회하여 한 번에 하나의 요청만 Redis를 조회하도록 하여 Dogpile Effect를 방지합니다.
결론
다중 계층 캐싱의 기능을 활용함으로써, APISIX는 Redis나 Postgres와 같은 외부 데이터 저장 구성 요소에 대한 빈번한 조회 없이도 대부분의 클라이언트 요청을 효율적으로 처리할 수 있습니다. 이는 전반적인 지연 시간을 크게 줄일 뿐만 아니라 API 게이트웨이의 처리량을 향상시켜 비즈니스에 효율적이고 강력한 솔루션을 제공하며, 외부 서비스와의 통신을 단순화합니다. 최적화 설계는 시스템의 견고성을 보장하여 APISIX가 높은 동시성 시나리오를 유연하게 해결할 수 있도록 하며, 엔지니어에게 더 신뢰할 수 있고 고성능의 개발 환경을 조성합니다.