클라우드 네이티브 앱에서 캐싱

이 콘텐츠는 Azure용 클라우드 네이티브 .NET 애플리케이션 설계 eBook 에서 발췌한 것으로, .NET 문서에서 제공되거나 오프라인 상태에서도 읽을 수 있는 PDF(무료 다운로드 가능)로 제공됩니다.

Cloud Native .NET apps for Azure eBook cover thumbnail.

캐싱의 이점은 잘 알려져 있습니다. 이 기술은 백 엔드 데이터 저장소에서 애플리케이션에 더 가까운 빠른 스토리지로 자주 액세스하는 데이터를 일시적으로 복사하는 방식으로 작동합니다. 캐싱은 주로 다음과 같은 경우에 구현됩니다.

  • 데이터가 상대적으로 정적 상태로 유지됩니다.
  • 데이터 액세스가 특히 캐시 속도에 비해 느립니다.
  • 높은 데이터 경합 수준이 적용됩니다.

이유는 무엇입니까?

Microsoft 캐싱 지침에서 설명한 것처럼 캐싱은 개별 마이크로 서비스와 시스템 전체의 성능, 확장성 및 가용성을 향상시킬 수 있습니다. 데이터 저장소에 대한 대량의 동시 요청을 처리하는 데 따른 대기 시간과 경합을 줄입니다. 데이터 볼륨과 사용자 수가 증가할수록 캐싱의 이점이 커집니다.

캐싱은 클라이언트가 변경할 수 없거나 자주 변경되지 않는 데이터를 반복적으로 읽을 때 가장 효과적입니다. 예로 제품 및 가격 정보와 같은 참조 정보 또는 생성 비용이 많이 드는 공유 정적 리소스를 포함합니다.

마이크로 서비스는 상태 비저장이지만, 분산 캐시는 절대적으로 필요한 경우 세션 상태 데이터에 대한 동시 액세스를 지원할 수 있습니다.

또한 반복적인 계산을 피하기 위해 캐싱을 고려합니다. 작업이 데이터를 변환하거나 복잡한 계산을 수행하는 경우 후속 요청에 대한 결과를 캐시합니다.

캐싱 아키텍처

클라우드 네이티브 애플리케이션은 일반적으로 분산 캐싱 아키텍처를 구현합니다. 캐시는 마이크로 서비스와 별도로 클라우드 기반 지원 서비스로 호스트됩니다. 그림 5-15는 아키텍처를 보여 줍니다.

Caching in a cloud native app

그림 5-15: 클라우드 네이티브 앱에서 캐싱

이전 그림에서 캐시가 마이크로 서비스와 어떻게 독립적이고 공유되는지 확인합니다. 이 시나리오에서 캐시는 API 게이트웨이에 의해 호출됩니다. 4장에서 설명한 것처럼 게이트웨이는 들어오는 모든 요청에 대한 프런트 엔드 역할을 합니다. 분산 캐시는 가능하면 캐시된 데이터를 반환하여 시스템 응답성을 높입니다. 또한 서비스에서 캐시를 분리하면 캐시를 독립적으로 강화 또는 스케일 업하여 증가하는 트래픽 수요를 충족할 수 있습니다.

위의 그림에서는 캐시 배제 패턴이라고 하는 일반적인 캐싱 패턴을 보여 줍니다. 들어오는 요청의 경우 먼저 캐시에서 응답을 쿼리합니다(1단계). 데이터가 발견되면 즉시 반환됩니다. 데이터가 캐시에 없으면(캐시 누락이라고 함) 다운스트림 서비스의 로컬 데이터베이스에서 검색됩니다(2단계). 그런 다음 향후 요청을 위해 캐시에 기록되고(3단계) 호출자에게 반환됩니다. 시스템이 적시에 일관되게 유지되도록 캐시된 데이터를 주기적으로 제거하는 데 주의를 기울여야 합니다.

공유 캐시가 커지면 데이터를 여러 노드에 분할하는 것이 유용할 수 있습니다. 이렇게 하면 경합을 최소화하고 확장성을 개선하는 데 도움이 될 수 있습니다. 많은 캐싱 서비스는 노드를 동적으로 추가 및 제거하고 파티션에 데이터 균형을 다시 조정하는 기능을 지원합니다. 이 방법에는 일반적으로 클러스터링이 포함됩니다. 클러스터링은 페더레이션 노드 컬렉션을 원활한 단일 캐시로 노출합니다. 하지만 내부적으로 데이터는 부하를 균등하게 분산하는 미리 정의된 배포 전략에 따라 노드 간에 분산됩니다.

Azure Cache for Redis

Azure Cache for Redis는 Microsoft에서 완전히 관리하는 안전한 데이터 캐싱 및 메시징 브로커 서비스입니다. PaaS(Platform as a Service) 제품으로 사용되는 이 제품은 데이터에 대한 높은 처리량과 낮은 대기 시간 액세스를 제공합니다. 이 서비스는 Azure 내부 또는 외부의 모든 애플리케이션에서 액세스할 수 있습니다.

Azure Cache for Redis 서비스는 Azure 데이터 센터에서 호스트되는 오픈 소스 Redis 서버에 대한 액세스를 관리합니다. 이 서비스는 관리, 액세스 제어 및 보안을 제공하는 외관 역할을 합니다. 이 서비스는 기본적으로 문자열, 해시, 목록 및 집합을 비롯한 다양한 데이터 구조 집합을 지원합니다. 애플리케이션에서 이미 Redis를 사용하는 경우 Azure Cache for Redis와 함께 있는 그대로 작동합니다.

Azure Cache for Redis는 단순한 캐시 서버 그 이상입니다. 마이크로 서비스 아키텍처를 향상시키기 위해 다음과 같은 여러 시나리오를 지원할 수 있습니다.

  • 메모리 내 데이터 저장소
  • 분산된 비관계형 데이터베이스
  • 메시지 브로커
  • 구성 또는 검색 서버

고급 시나리오의 경우 캐시된 데이터의 복사본을 디스크에 유지할 수 있습니다. 중대한 이벤트로 주 캐시 및 복제본 캐시가 모두 비활성화된 경우 가장 최근의 스냅샷에서 캐시를 재구성합니다.

Azure Redis Cache는 미리 정의된 여러 구성 및 가격 책정 계층에서 사용할 수 있습니다. 프리미엄 계층은 클러스터링, 데이터 지속성, 지역 복제, 가상 네트워크 격리와 같은 다양한 엔터프라이즈 수준 기능을 제공합니다.