소개
- 세분화 플랫폼은 고객, 제품 및 기타 관련 데이터를 이해하고 분류하는 데 중요한 역할을 합니다.
- 세분화에는 특정 기준에 따라 더 큰 그룹을 더 작고 더 동질적인 하위 그룹으로 나누는 작업이 포함됩니다.
- 다음은 개인화된 마케팅 전략, 타겟 프로모션, 더욱 맞춤화된 쇼핑 경험을 위한 고객 세분화 등 다양한 영역의 세분화 플랫폼의 몇 가지 예입니다.
목차
- 요구사항 이해
- 기본 아키텍처
- 건축 구성요소
- 디자인 과제
- 제안된 솔루션
- 마무리 메모
1. 요구 사항 이해
전자 상거래의 고객 세그먼트를 위한 저지연 세분화 플랫폼을 설계하면 실시간 처리, 사용자 경험 및 고객 행동의 동적 특성과 관련된 특정 과제가 발생합니다. 이와 관련하여 발생할 수 있는 몇 가지 문제는 다음과 같습니다.
-
대규모 및 동적 데이터세트
- 전자상거래 플랫폼은 고객 프로필, 제품 카탈로그, 거래 내역을 포함하여 지속적으로 변화하는 대규모 데이터 세트를 처리합니다.
- 짧은 지연 시간을 유지하면서 이러한 방대한 데이터 세트를 실시간으로 관리하고 처리하는 것은 중요한 과제입니다.
-
확장성
- 다양한 워크로드를 처리하려면 확장성을 고려한 설계가 필수적입니다. 지연 시간을 희생하지 않고 더 많은 처리 장치를 추가하여 시스템을 수평적으로 확장할 수 있도록 하려면 신중한 아키텍처 계획이 필요합니다.
-
비동기 처리
- 비동기 처리를 활용하면 구성요소를 분리하고 전반적인 시스템 응답성을 향상시키는 데 도움이 될 수 있습니다. 그러나 복잡성이나 지연을 초래하지 않고 비동기 통신을 관리하려면 신중한 설계가 필요합니다.
-
데이터 흐름 및 파이프라인
- 효율적인 데이터 흐름과 처리 파이프라인을 설계하는 것은 지연 시간이 짧은 시스템에 매우 중요합니다.
- 구성요소 간 데이터 전송에 소요되는 시간을 최소화하고 처리 단계 순서를 최적화하면 전체 지연 시간에 큰 영향을 미칠 수 있습니다.
-
마이크로서비스 아키텍처
- 마이크로서비스 아키텍처를 구현하면 확장성과 유연성을 향상할 수 있습니다. 그러나 지연 시간 없이 마이크로서비스 간의 원활한 통신을 보장하는 것은 어려울 수 있습니다.
- 효율적인 API를 설계하고 서비스 간 통신을 관리하는 것이 중요합니다.
2. 기본 아키텍처
세분화 플랫폼은 세 가지 주요 하위 시스템으로 구성됩니다. 
-
컴퓨팅 서비스(오프라인 일괄 컴퓨팅/온라인 컴퓨팅):
- Spark 작업을 사용하여 원시 데이터에서 사용자 세그먼트를 추출합니다.
- Spark 작업은 데이터 레이크에서 데이터를 검색, 정리, 검증합니다.
- 결과 데이터는 제공 하위 시스템으로 전송됩니다.
-
수집 서비스:
- 계산된 세그먼트를 컴퓨팅 서비스에서 세분화 서비스로 전송합니다.
- 세그먼트 내 사용자 포함 및 제외를 관리합니다.
-
세그먼트 서비스(서비스 계층):
-
사용자 서비스 또는 할인 서비스에 대한 특정 요구 사항을 기반으로 사용자 세그먼트를 제공합니다.
-
할인 서비스는 사용자 ID를 기반으로 쿼리하여 사용 가능한 할인을 계산할 수 있습니다
사용자 ID 세그먼트 ID 작성 날짜 2521세그먼트 X2023년 12월 3일2788세그먼트 Y2023년 12월 3일3943세그먼트 Z2023년 12월 3일
-
3. 건축 구성요소
세분화 플랫폼은 다음과 같은 주요 구성 요소로 구성됩니다. 
-
데이터 레이크 - S3
- S3는 데이터 레이크 역할을 하기 위해 널리 채택되고 다양한 옵션입니다. 확장 가능하고 내구성이 뛰어난 개체 스토리지 기능을 통해 다양한 데이터 유형을 대량으로 효율적으로 저장하고 관리하는 데 적합합니다.
- S3를 데이터 레이크로 활용함으로써 조직은 데이터 저장, 검색 및 관리에 대한 강력한 기능의 이점을 누릴 수 있으므로 다양한 데이터 중심 애플리케이션 및 아키텍처에서 널리 선택됩니다.
-
트랜잭션 데이터베이스 MongoDB
- MongoDB의 문서 지향 모델은 복잡한 데이터 구조를 JSON과 유사한 형식으로 저장할 수 있으므로 트랜잭션 사용 사례에 유용합니다. 이러한 유연성은 시간이 지남에 따라 데이터 구조가 발전할 수 있는 애플리케이션에 특히 유용합니다.
-
Upstash Kafka 클러스터
- 웹 애플리케이션에서 Upstash Kafka로 트래픽(클릭) 이벤트를 스트리밍한 다음 추가 처리를 위해 데이터 레이크에 저장할 수 있습니다.
- Upstash Kafka는 최초의 서버리스 Kafka 제품입니다. 요청당 지불 모델을 사용하면 수백 달러를 지불하지 않고도 완전 관리형 Kafka 클러스터를 가질 수 있습니다. 무료 등급을 사용하면 신용 카드를 입력하지 않고도 몇 초 만에 Kafka 클러스터를 생성할 수 있습니다. Upstash 팀은 귀하가 앱에 집중하는 동안 가용성, 유지 관리, 확장, 업그레이드 및 기타 모든 지루한 작업을 처리합니다.
-
Upstash MongoDB 소스 커넥터
- MongoDB 소스 커넥터는 Apache Kafka Connect와 같은 데이터 통합 및 스트리밍 플랫폼에서 MongoDB 데이터베이스에 연결하고 변경 사항이나 이벤트를 실시간으로 캡처하는 데 사용되는 구성 요소입니다.
- Upstash MongoDB 소스 커넥터는 MongoDB에서 다른 시스템이나 플랫폼으로의 데이터 이동을 촉진하여 원활한 데이터 통합 및 분석을 가능하게 합니다.
-
아파치 스파크
- Apache Spark는 단일 노드 컴퓨터 또는 클러스터에서 데이터 엔지니어링, 데이터 과학, 기계 학습을 실행하기 위한 다국어 엔진입니다.
- Upstash Kafka를 Upstash에서 즉시 제공하는 Apache Spark와 통합하면 웹 애플리케이션의 트래픽(클릭) 이벤트를 Upstash Kafka로 스트리밍한 후 실시간으로 분석할 수 있습니다.
- Apache Spark는 사용자 세그먼트 업데이트 처리를 담당합니다. 그런 다음 이러한 업데이트는 Aerospike 데이터베이스 업데이트로 전파되기 전에 Upstash Kafka에 기록됩니다.
4. 디자인 과제
세분화 엔진의 채택 및 사용이 증가함에 따라 시스템에 특정 문제가 발생할 수 있습니다.
- 쓰기 QPS 병목 현상:더 많은 세그먼트를 생성하면 QPS(초당 쓰기 쿼리)에 병목 현상이 발생하여 세그먼트 생성 대기 시간이 길어질 수 있습니다.
- 낮은 지연 시간 요청:매우 짧은 지연 시간을 달성하는 것은 특정 통신을 전송하는 데 매우 중요하며, 특히 사용자가 특정 세그먼트에 속하는지 여부를 확인할 때 더욱 그렇습니다.
-
읽기 지연 시간
-
더욱이, 플랫폼이 계속 발전함에 따라 읽기에 필요한 지연 시간이 50ms 미만이더라도 이 속도는 특정 서비스 및 향후 사용 사례에 적합하지 않을 수 있다는 예상이 있습니다.
-
예를 들어, 알림 서비스는 통신을 보내기 전에 사용자 세그먼트 멤버십을 확인하기 위해 신속한 확인이 필요할 것으로 예상됩니다. 각 통신 요청에 대해 지연 시간을 늘리는 것은 앞으로는 용납될 수 없을 것으로 예상됩니다.
-
-
Kafka 인프라 관리
-
트랜잭션 소스에서 분당 수백만 개의 이벤트를 처리하는 것은 Kafka 인프라를 사용할 때 실제로 문제가 될 수 있으며, 이러한 높은 처리량을 효과적으로 관리하려면 다양한 요소를 신중하게 고려해야 합니다.
-
정기적인 성능 테스트와 최적화는 높은 처리량의 Kafka 인프라를 유지하는 데 핵심입니다.
-
-
MongoDB 변경 데이터 캡처
-
특히 MongoDB와 같은 기존 트랜잭션 데이터베이스에 저장된 이벤트를 웹 애플리케이션에서 집계한 다음 데이터 레이크로 푸시하려면 실제로 약간의 노력이 필요할 수 있습니다.
-
MongoDB에서 제공하는 변경 데이터 캡처 메커니즘을 활용하거나 맞춤형 솔루션을 구현하여 데이터베이스의 변경 사항을 캡처하세요.
-
5. 제안된 솔루션
-
읽기 지연 시간을 개선하는 분산 캐시 Aerospike
-
Aerospike에는 사용자 ID가 사용자 세그먼트에 액세스하기 위한 기본 키 역할을 하는 사용자 세그먼트가 포함됩니다.
-
또한 세그먼트 ID에 보조 인덱스를 구현하여 세그먼트 사용자 검색을 간소화하고 세그먼트 사용자를 별도로 저장할 필요성을 제거할 수도 있습니다.
-
또한 이 설계는 캐시로 작동하여 잠재적으로 Redis의 필요성을 대체할 수 있는 가능성과 함께 지연 시간 요구 사항을 충족하는 것을 목표로 합니다.
-
현재 Aerospike를 Upstash Redis로 교체하려면 세그먼트 사용자와 사용자 세그먼트라는 두 가지 데이터 세트를 관리해야 합니다.
-
-
Kafka 인프라 관리를 위한 서버리스 Upstash Kafka
-
Upstash Kafka를 사용하면 완벽하게 관리되는 서비스를 얻을 수 있습니다. 이는 Upstash가 Kafka 클러스터 실행과 관련된 서버 프로비저닝, 확장, 유지 관리 등 모든 기술 작업을 처리한다는 것을 의미합니다.
-
이렇게 하면 인프라 설정, 모든 것이 올바르게 작동하도록 하고 시간이 지남에 따라 유지 관리하는 것과 같은 일에 대해 걱정할 필요가 없습니다.
-
이를 통해 고유한 요구 사항과 목표에 맞게 Kafka를 활용하는 데 집중할 수 있습니다. 이제 인프라 관리 부담 없이 특히 빠르게 발전하는 개발 환경에서 애플리케이션의 전반적인 품질을 향상시키는 데 에너지를 쏟을 수 있습니다.
-
가격이 0으로 조정됨: 진정한 서버리스 서비스는 적극적으로 사용하지 않는 경우 비용을 청구해서는 안 됩니다. 요청당 가격은 당사의 가장 뛰어난 기능입니다. 여러분은 처음부터 이 가격 모델에 맞게 제품과 인프라를 설계해 왔습니다. 이를 위해서는 고정 비용을 최소화해야 하는데, 이는 카프카 같은 야수에게는 상당히 어려운 일입니다.
-
사용자에게 운영 부담 없음: 사용자가 Kafka 주제를 생성하고 사용하기 시작합니다. 고가용성, 확장성, 업그레이드, 백업… 모두 우리의 책임입니다.
-
무연결: 서버리스 함수는 상태를 유지하지 않습니다. 따라서 상태 비저장 연결을 통해 데이터에 액세스할 수 있어야 합니다. Kafka 제품은 Kafka TCP 프로토콜을 지원하므로 모든 Kafka 클라이언트는 Upstash와 함께 작동합니다. 또한 AWS Lambda 또는 Cloudflare Workers와 같은 비연결 환경을 활성화하기 위한 REST API가 내장되어 있습니다.
-
-
Upstash MongoDB 소스 커넥터를 사용하는 MongoDB CDC
-
Kafka Connect는 한 줄의 코드도 작성하지 않고 Apache Kafka와 다른 시스템 간에 데이터를 스트리밍하는 도구입니다. Kafka 싱크 커넥터를 통해 데이터를 다른 스토리지로 내보낼 수 있습니다. Kafka 소스 커넥터를 통해 다른 시스템에서 Kafka 주제로 데이터를 가져올 수 있습니다.
-
Kafka 커넥터는 자체 호스팅이 가능하지만 추가 프로세스/머신을 설정하고 유지 관리해야 합니다. Upstash는 Kafka 클러스터용 커넥터의 호스팅 버전을 제공합니다. 이렇게 하면 추가 시스템을 유지 관리해야 하는 부담이 생기고 클러스터에 가깝기 때문에 성능도 향상됩니다.
-
6. 마무리 메모
이 블로그 게시물에서는 Upstash가 제공하는 기술을 활용하는 저지연 세분화 플랫폼의 설계 원칙을 살펴봅니다. 인프라는 수백만 명의 사용자를 수용하고 데이터 레이크에 저장된 테라바이트급 데이터를 처리하면서 원활하게 확장되도록 설계되었습니다.