엔터프라이즈 설계자는 차세대 플랫폼에 NoSQL 데이터베이스를 선택할 때 종종 곤란한 상황에 처하게 됩니다. 그들은 끔찍한 질문에 직면하게 됩니다: 성능을 선택할 것인가, 아니면 관리 편의성을 선택할 것인가? 안타깝게도, 미션 크리티컬 애플리케이션을 구축하는 기업에는 단순한 속도 이상의 것이 필요한 경우가 많습니다.
그렇다면 무엇이 올바른 선택일까요? 성능과 관리 효율성? 어려운 질문입니다! 정직한 대답은 기업들은 두 가지 모두를 원한다는 것입니다. 하지만 장기적으로 볼 때, 특히 규모가 큰 기업에서는 관리 용이성이 더 유리한 경우가 많습니다. 워크로드에는 성능뿐만 아니라 확장성, 유연성, 관리 용이성, 운영 복원력도 필요합니다.
고성능 엔터프라이즈급 NoSQL 데이터베이스의 목록을 좁히면 일반적으로 두 개의 상위 경쟁자가 있습니다: 에어로스파이크 그리고 카우치베이스.
에어로스파이크와 카우치베이스
에어로스파이크 는 엄청난 속도를 자랑합니다. 카우치베이스와 마찬가지로 초당 수백만 개의 키값 연산을 마이크로초 단위의 지연 시간으로 처리할 수 있습니다. Aerospike의 주장에 따르면, 간결하고 성능 지향적인 아키텍처는 특히 실시간 핵심 가치 워크로드에 대해 예측 가능한 지연 시간과 강력한 내구성을 제공합니다.
다음과 같이 사용 빈도가 높은 사용 사례에 적합할 것으로 예상됩니다:
-
- 애드 테크의 실시간 입찰
- 통신 라우팅
- 초저지연 사기 스코어링
하이브리드 메모리 아키텍처와 결정론적 성능을 통해 밀리초 단위의 지연 시간으로 제공할 수 있습니다.
카우치베이스 는 데이터, 인덱싱, 쿼리, 분석과 같은 서비스를 독립적으로 확장할 수 있는 모듈식 아키텍처로 설계되어 리소스 경합을 줄이고 운영 제어를 개선합니다. 메모리 우선 아키텍처와 내장 캐시를 통해 밀리초 미만의 지연 시간을 제공할 수 있습니다.
다차원 스케일링(MDS) 를 사용하면 오버프로비저닝 없이 워크로드 패턴에 따라 성능을 미세 조정할 수 있으므로 비용 효율적인 확장성에 매우 중요합니다. 강점:
-
- 캐시가 내장된 메모리 우선 아키텍처
- 키-값 및 JSON 문서 액세스
- 강력한 SQL과 유사한 ANCI SQL 불만 쿼리 언어(SQL++)
- 즉시 사용 가능한 보조 인덱싱
- 모바일 및 엣지 동기화에 대한 기본 지원
- 실시간 분석 및 벡터 검색 기능 내장
- 성숙한 자율 운영자를 통한 Kubernetes 네이티브 배포
성능이 전부는 아닙니다!
엔지니어는 항상 빠른 속도를 추구한다는 점을 명심하세요. 하지만 다른 팀도 있습니다. 운영팀은 사용자 지정 스크립트와 밤늦게까지 작업할 필요가 없는 것을 원합니다. 컴플라이언스 팀은 항상 데이터 복제에 대한 세분화된 제어를 원합니다. 전문가와 전문 서비스만이 구성, 운영 및 수익을 창출할 수 있는 또 다른 도구를 원하는 사람은 아무도 없습니다.
안정적인 프로덕션 환경을 위해 원시 성능과 함께 고려해야 하는 이러한 실제 요소에 대해 좀 더 자세히 살펴보겠습니다.
모니터링 및 통합 가시성
Aerospike는 Prometheus 및 Grafana와 같은 통합 가시성 스택을 제공하는 반면, Couchbase는 풍부한 기본 제공 원격 분석을 즉시 사용할 수 있습니다:
-
- 메모리, CPU, 디스크 I/O, 쿼리 성능 등에 대한 실시간 메트릭 대시보드가 제공됩니다.
- 서비스별 통합 가시성(쿼리, 인덱스, 데이터 등)
- 통합 로깅 및 알림
- 엔터프라이즈 통합 가시성 도구(Grafana, Splunk, Datadog, New Relic 등)와의 통합 지원
이러한 가시성을 통해 팀은 병목 현상을 파악하고, 용량 문제를 예측하며, 연중무휴 애플리케이션의 핵심 요구 사항인 인시던트에 신속하게 대응할 수 있습니다.
다운타임 없는 유지보수
Couchbase는 운영을 염두에 두고 설계되었습니다. 수행할 수 있습니다:
-
- 다운타임 없는 롤링 업그레이드 및 패치 적용
- 필요에 따라 노드를 확장 또는 축소하는 온라인 리밸런싱
- 세분화된 백업 및 복원
- 자동 장애 조치 및 지능형 복구 기능 내장
Aerospike는 높은 가용성과 강력한 성능을 제공하지만 롤링 업그레이드나 클러스터 확장과 같은 작업에는 특히 복잡한 환경에서는 더 많은 수동 감독과 오케스트레이션이 필요한 경향이 있습니다.
복제 및 충돌 해결
Aerospike는 랙 인식 및 빠른 페일오버를 통해 강력한 동기식 클러스터 내 복제를 제공합니다. 하지만:
-
- 데이터센터 간 복제(XDR)는 애드온 기능이며 일반적으로 신중한 구성과 운영 튜닝이 필요합니다.
- 에어로스파이크는 대부분 쓰기-투-원-리전 아키텍처를 가정하기 때문에 충돌 해결이 제한적입니다.
반면 Couchbase는 지원합니다:
-
- 데이터 센터 내 HA를 위한 클러스터 내 복제(DCP - 데이터베이스 변경 프로토콜을 통한)
- 구성 가능한 토폴로지(단방향, 양방향, 메시)를 갖춘 교차 데이터 센터 복제(XDCR)
- 카우치베이스 라이트 및 동기화 게이트웨이를 통한 모바일-에지-클라우드 간 동기화
Couchbase의 복제는 비동기식, 구성 가능, 빠른 속도(메모리 간)로 여러 지역에 걸쳐 데이터를 동기화하면서 고가용성을 유지하도록 설계되었습니다.
액티브-액티브 다중 지역 배포 또는 모바일/연결되지 않은 에지 시나리오가 필요한 사용 사례의 경우, Couchbase는 보다 성숙하고 유연한 툴을 제공합니다.
다중 리전 설정에서 Couchbase의 XDCR을 사용하면 복제가 매우 간편해집니다. 간단한 API 호출과 SQL++ 스타일 필터를 통해 올바른 데이터만 올바른 리전으로 전송할 수 있습니다:
|
1 2 3 4 5 6 7 |
curl -u 관리자:비밀번호 -X POST \ https://localhost:8091/컨트롤러/생성 복제 \ -d fromBucket=주문 \ -d toCluster=원격 클러스터 \ -d toBucket=주문_백업 \ -d 복제 유형=연속 \ -d 필터 표현식="type = 'premium' AND region = 'EU'" |
반면, Aerospike에서 동일한 작업을 수행하려면 구성 파일을 작성하고, Lua 함수를 작성하고, 배포하고, 수동으로 테스트해야 합니다. 애자일 환경에는 적합하지 않습니다.
충돌 해결
전 세계에 분산된 애플리케이션을 실행할 때 가장 중요한 측면 중 하나는 복제와 시스템이 충돌을 처리하는 방식입니다. 기업은 일반적으로 액티브-액티브 설정을 실행하며, 대부분의 경우 데이터 동기화가 필요하고 종종 양방향으로 이루어집니다.
예를 들어, 플랫폼은 북미와 유럽에서 동시에 운영되어야 했습니다. 카우치베이스는 사용자 지정 로직 및 타임스탬프 기반 규칙을 포함한 기본 제공 충돌 해결 기능을 지원합니다:
-
- 구성 가능한 정책에 따라 자동으로 충돌을 해결합니다: 타임스탬프 기반, 사용자 지정 수정본 ID또는 애플리케이션 정의 로직
- 복제본 간 데이터 불일치를 감사하고 해결하기 위한 기본 제공 도구
에어로스파이크의 경우 앱 수준에서 충돌을 처리해야 합니다.
이는 일반적으로 딜 브레이커입니다. 이는 엣지 환경(예: 소매점, 모바일 디바이스)에서 운영하거나 다중 지역 아키텍처에서 최종적인 일관성을 처리할 때 필수적입니다.
규정 준수
오늘날의 규제 환경에서는 다음과 같은 기능이 중요합니다. XDCR 필터링 는 단순히 있으면 좋은 것이 아니라 데이터 주권, 개인정보 보호 및 보존 관련 법률을 준수하는 데 필수적인 요소입니다.
법무 및 규정 준수 팀은 일반적으로 관대하지 않습니다. 일반적으로 다음과 같은 문제를 제기합니다:
“모든 사용자 데이터를 유럽으로 복제할 수는 없습니다. 그리고 민감한 필드가 제외되었다는 증거가 필요합니다.”
Couchbase의 기본 제공 필터링 기능을 통해 조직은 개인 식별 정보(PII) 또는 지역별 레코드를 제외하고 필요한 데이터 하위 집합만 복제할 수 있으므로 민감한 데이터가 필요한 지리적 또는 관할권 경계 내에 유지됩니다.
이 세분화된 제어를 통해 다음과 같은 사항을 간편하게 준수할 수 있습니다. GDPR, HIPAA 및 기타 규정 준수 프레임워크를 사용자 지정 스크립트나 외부 데이터 처리 계층 없이도 사용할 수 있습니다.
에어로스파이크도 이를 수행할 수 있지만 커스텀 UDF, 더 많은 테스트 및 운영 오버헤드가 필요합니다.
기본 제공 필터링: 간소화 및 규정 준수를 위한 Couchbase의 이점
카우치베이스와 에어로스파이크의 가장 큰 운영상의 차이점 중 하나는 복제 필터링이 구현되는 방식에 있습니다.
카우치베이스에서 필터링은 XDCR의 일급 선언적 기능입니다. SQL++ 스타일 표현식을 사용하여 UI, CLI 또는 REST API에서 직접 필터 조건을 지정할 수 있습니다(예, type = 'premium' AND region = 'EU') - 외부 스크립팅이나 클러스터 재배포가 필요하지 않습니다.
Aerospike에서는 필터링이 XDR에 기본 제공되지 않습니다. 대신 사용자 정의 Lua 기반 UDF(사용자 정의 함수)를 작성하여 클러스터에 배포하고 구성에서 참조해야 합니다. 이로 인해 언어 전환, 추가 운영 오버헤드, 변경 사항을 배포할 때 특히 프로덕션 환경에서는 더 높은 위험이 발생합니다.
요컨대, Couchbase는 복제 필터링을 더 쉽고, 더 안전하며, 더 유지 관리하기 쉽게 만들어 팀이 복잡함 없이 더 많은 제어를 할 수 있게 해줍니다.
실제 비교: 데이터 센터 간 복제(XDCR) 설정하기
에어로스파이크의 XDR은 네임스페이스 및 데이터센터 수준에서 aerospike.conf 파일을 사용하여 구성합니다. 강력하지만 보다 수동적인 프로세스이며 필터링에는 사용자 정의 함수(UDF)가 필요합니다.
샘플 에어로스파이크 XDR 구성(aerospike.conf):
|
1 2 3 4 5 6 7 8 9 10 11 |
xdr { 활성화-xdr true xdr-목적지 DC2 192.168.1.2 3000 데이터센터 DC2 { 네임스페이스 테스트 { 활성화-xdr true 앞으로-xdr-쓰다 true } } } |
레코드를 필터링하려면 Lua로 작성된 UDF를 만들어 클러스터에 배포한 다음 구성에서 참조해야 합니다.
예제 UDF(filter_records.lua):
|
1 2 3 |
함수 필터(기록) 반환 기록["type"] == "프리미엄" 끝 |
UDF 등록:
|
1 |
aql> 등록하기 모듈 'filter_records.lua' |
단점:
-
- 필터 로직은 Lua로 작성하고, 배포하고, 참조해야 합니다.
- 변경 사항을 적용하려면 구성 다시 로드 또는 재시작이 필요합니다.
- 기본적으로 선언적 필터링 없음
- 복제 상태 모니터링은 CLI를 많이 사용합니다.
카우치베이스 XDCR은 UI, CLI(couchbase-cli) 또는 REST API를 통해 완벽하게 구성할 수 있습니다. 선언적 필터링, 동적 재구성, 풍부한 모니터링을 지원하며, 이 모든 기능을 재시작 없이 사용할 수 있습니다.
예시: 예: REST API를 통한 복제 생성
|
1 2 3 4 5 6 |
curl -u 관리자:비밀번호 -X POST \ https://localhost:8091/controller/createReplication \ -d fromBucket=주문 \ -d toCluster=원격 클러스터 \ -d toBucket=주문_백업 \ -d 복제 유형=연속 |
Couchbase XDCR에서 필터링(키 또는 문서 필드별):
|
1 |
-d 필터 표현식="type = 'premium' AND region = 'EU'" |
필터에 정규식이나 고급 부울 논리를 사용할 수도 있습니다:
|
1 |
-d 필터 표현식="REGEXP_CONTAINS(meta().id, '^user::[0-9]+')" |
UI 예시:
-
- 다음으로 이동 XDCR 탭
- 클릭 복제 추가
- 소스 및 목적지 입력
- 선택적 필터 표현식 추가
- 클릭 만들기
요약
미션 크리티컬 시스템을 운영하는 기업에서는 처리량과 지연 시간 그 이상을 고려하는 경우가 많습니다.
이들은 전 세계에 걸쳐 운영 효율성, 가시성, 복원력을 제공하는 플랫폼을 찾습니다. 엔지니어링 팀은 방화벽이 아닌 기능에 집중할 수 있었습니다. 운영팀에는 불안이 아닌 대시보드가 있었습니다. 규정 준수 팀에는 감사 가능한 선택적 복제 기능이 있었습니다.
결국에는, 원시 성능 가 POC를 획득하지만 운영 간소화 프로덕션에서 승리합니다.