람다 아키텍처
람다 아키텍처 (Lambda Architecture)는 대용량 데이터를 처리하기 위한 데이터 처리 아키텍처 패턴입니다. Nathan Marz가 제안했으며, 불변성(Immutability), 추가 전용(Append-only), 재계산 가능(Recomputation)이라는 핵심 원칙을 기반으로 합니다. 람다 아키텍처는 지연 시간(Latency)에 따라 배치 레이어(Batch Layer), 스피드 레이어(Speed Layer), 서빙 레이어(Serving Layer)의 세 가지 레이어로 구성됩니다.
-
배치 레이어 (Batch Layer): 모든 데이터를 저장하고, 일괄 처리 방식으로 데이터를 처리합니다. 배치 레이어는 일반적으로 하둡(Hadoop)과 같은 분산 파일 시스템 및 맵리듀스(MapReduce)와 같은 배치 처리 프레임워크를 사용합니다. 배치 레이어의 주요 역할은 정확하고 완전한 데이터를 제공하는 것입니다. 데이터의 양이 많고 실시간성이 중요하지 않은 분석에 적합합니다.
-
스피드 레이어 (Speed Layer): 최근 데이터를 실시간으로 처리합니다. 배치 레이어에서 처리되기 전의 최신 데이터나, 배치 레이어의 결과가 업데이트되기 전까지의 최신 결과를 제공합니다. 스피드 레이어는 일반적으로 스트림 처리 프레임워크 (예: 스파크 스트리밍, 플링크)를 사용합니다. 스피드 레이어는 낮은 지연 시간을 제공하는 대신, 배치 레이어만큼의 정확성과 완전성을 보장하지 못할 수 있습니다.
-
서빙 레이어 (Serving Layer): 배치 레이어와 스피드 레이어의 결과를 통합하여 쿼리 응답을 제공합니다. 서빙 레이어는 일반적으로 데이터베이스 (예: 아파치 카산드라, 아파치 HBase)를 사용합니다. 서빙 레이어는 사용자에게 통합된 데이터를 보여주기 때문에 쿼리 성능이 중요합니다.
람다 아키텍처의 장점은 다음과 같습니다.
- 확장성: 대용량 데이터 처리에 적합합니다.
- 내결함성: 일부 노드에 장애가 발생해도 데이터 처리에는 영향을 미치지 않습니다.
- 유연성: 다양한 데이터 처리 요구 사항에 대응할 수 있습니다.
람다 아키텍처의 단점은 다음과 같습니다.
- 복잡성: 아키텍처가 복잡하여 개발 및 유지 보수가 어렵습니다.
- 중복 코드: 배치 레이어와 스피드 레이어에서 동일한 로직을 구현해야 할 수 있습니다.
람다 아키텍처의 복잡성을 해결하기 위해 카파 아키텍처(Kappa Architecture)와 같은 대안적인 아키텍처가 등장했습니다. 카파 아키텍처는 모든 데이터를 스트림으로 처리하여 람다 아키텍처의 스피드 레이어와 배치 레이어를 통합하는 것을 목표로 합니다.