클라우드플레어(Cloudflare)가 대규모 데이터 스트리밍 문제를 해결하기 위한 서버리스 이벤트 스트림 서비스 'K2'를 공개 베타로 출시했습니다. K2는 이벤트 생산자와 소비자를 분리하여, 생산자가 데이터를 보내는 속도와 관계없이 소비자가 원하는 속도로 데이터를 처리할 수 있도록 돕습니다. 이는 기존 원격 프로시저 호출(RPC) 아키텍처에서 생산자와 소비자의 규모 및 시간 동기화 문제로 인해 발생하던 데이터 손실을 방지합니다.
K2는 클라우드플레어의 개발자 플랫폼에서 제공되는 내구성 있는(durable) 이벤트 스트리밍 기본 요소로, 전송된 이벤트를 순서가 지정된 로그(ordered log) 형태로 저장합니다. 소비자는 데이터를 여러 소비자로 분할하여 읽거나, 모든 메시지를 모든 소비자에게 전달하는 등 다양한 방식으로 데이터를 소비할 수 있습니다. 특히 완전한 서버리스(serverless) 방식으로 작동하며 방대한 양의 데이터까지 확장 가능하고 장기 보존을 지원하여, 소비 서비스가 장기간 중단되더라도 데이터 손실이 발생하지 않습니다. K2는 클라우드플레어의 R2 객체 스토리지(object storage) 위에 파티셔닝된 내구성 로그를 구현하여 대규모 저장 용량을 저렴하게 제공하며, 컴퓨팅과 스토리지를 분리해 각 요소를 독립적으로 확장할 수 있도록 설계되었습니다.
클라우드플레어는 335개 이상의 도시에 걸쳐 있는 광범위한 엣지(edge) 인프라에서 기존 아파치 카프카(Apache Kafka)와 같은 전통적인 분산 시스템 소프트웨어를 운영하기 어려운 문제를 해결하기 위해 K2를 개발했습니다. R2 객체 스토리지의 강력한 내구성(11 9s)과 일관된 API를 활용하여, 복제 및 합의(consensus) 작업을 스토리지 계층으로 오프로드함으로써 K2 애플리케이션 계층을 훨씬 간단하고 저렴하며 고성능으로 만들 수 있었습니다. 다만, R2가 직접적인 추가(append) 작업을 지원하지 않아 메모리에 데이터를 축적한 후 세그먼트 파일로 쓰는 방식으로 구현되었으며, 이로 인해 99번째 백분위수(99th percentile)에서 약 1초의 쓰기 지연(produce latency)이 발생할 수 있습니다.
K2는 기존 클라우드플레어의 비동기 전달 서비스인 큐(Queues)나 베이신 파이프라인(Basin Pipelines)과는 다른 목적을 가집니다. 큐는 개별적이고 시간이 오래 걸리는 작업 항목을 추적하는 데 적합하며, 파이프라인은 이벤트 변환 후 R2나 베이신 카탈로그(Basin Catalog)에 쓰는 것이 주 목적입니다. 반면 K2는 대규모 데이터 이동, 장기 보존, 다중 소비자(fan-out consumption)에 특화되어 있으며, 메시지를 배치(batch) 단위로 처리하여 효율성을 높였습니다. 이는 클라우드플레어의 엣지 네트워크를 활용하여 전 세계 사용자에게 더 가까이 다가가면서도, 대규모 데이터 처리 및 분석 시스템을 구축하려는 기업들에게 강력한 도구가 될 것으로 기대됩니다.
