Table of Contents
Serverless Data Stores의 데이터 일관성 이해
AWS DynamoDB, Azure Cosmos DB, Google Cloud Firestore 등의 Serverless 데이터 저장소는 자동 확장, 유료 사용 가격 및 운영 오버 헤드를 감소시킵니다. 그러나 분산 된 자연은 데이터 일관성에 기본 거래 오프를 소개합니다. 응용 프로그램은 데이터가 즉시 작성한 후 데이터를 읽고, 사용자는 최신 가치를 볼 것으로 기대합니다. 전 세계적으로 분산 된 시스템에서 보증이 비trivial가됩니다. CAPLT[]CAPLT][FLT]][FLT]]][FLT]]][FLT]]]]][FLT]]]]][FLT]]]]][FLT]]]]]][FLT]]]]]]]]]]]]]]]]][FLT:[FLT]]]]]]]]]][Filable [[[[Filable [[[[Fil[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
데이터 일관성은 하나의 크기-피트-모든 속성이 아닙니다. 다른 작업 부하는 다른 보증이 필요합니다. 예를 들어, 전자 상거래 재고 시스템은 재고 업데이트에 대한 강한 일관성을 요구하지 않아야 합니다. 다른 한편으로는 소셜 미디어 피드는 새로운 포스트 propagates가 있는 동안 지연의 몇 초를 허용할 수 있습니다. 올바른 일관성 모델을 선택하고 보완 패턴을 구현하는 것은 서버리스 응용 프로그램이 예측할 수 있는 반면, 여전히 플랫폼의 신축성을 누릴 수 있습니다.
Serverless Stores의 일관성 모델
강한 견실함
강력한 일관성은 모든 읽기가 가장 최근의 쓰기를 반환한다는 것을 보증합니다. 서버리스 시스템은 종종 기본 복제 또는 quorum 기반 프로토콜을 사용하여 읽기에 의해 달성됩니다. DynamoDB 지원과 같은 서비스는 강성적으로 일관성있는 읽기] (추가 비용 및 대기 시간) 및 Cosmo Azures DB는 멀티 마스터 복제를 사용하여 글로벌 분산 된 계정에 대한 강력한 일관성을 제공합니다. 금융 거래, 사용자 인증, 또는 예약 시스템의 경우 강력한 일관성을 사용하십시오. 절대 정확성은 절대로 필요합니다.
Eventual 일관성
이 모델은 읽을 수 있는 읽을 수 있는 읽을 수 있습니다. 이 모델은 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있습니다. 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있는 읽을 수 있습니다.
카우스족
카우스와 관련 작업의 순서를 보존합니다. 작업 A (업데이트 프로파일 그림) 작업 전에 발생합니다 B (포스트 코멘트 참조), 다음 관찰자는 B 전에 A를 볼 수 있습니다. 이 모델은 강하고 기적적 견실함과 같은 서비스에 의해 앉아 Google Cloud Datastore]. 그것은 공동 편집, 소셜 피드 및 이벤트 주문 문제가있는 채팅 응용 프로그램에 유용합니다.
Consistency 유지에 대한 모범 사례
1. 각 가동을 위한 적합한 일관된 모형을 선택하십시오
모든 애플리케이션에 대한 단일 일관성 수준을 선택하기보다 더, 각 중요한 읽기 또는 쓰기 작업을 자신의 일관성 요구 사항. DynamoDB에서, 당신은 개별 ]을 지정할 수 있습니다 또는 다른 읽기를 종료하면서 호출 결국 일관성. 이 하이브리드 접근 균형 성능과 정확성. 귀하의 결정 문서 및 허용한 제한 내에서 대기 시간을 보장하기 위해 부하의 밑에 테스트.
2. 사가와 2단계의 거래 사용
비즈니스 프로세스가 여러 데이터 저장소 또는 서비스를 중단할 때, 당신은 원자성을 유지하기위한 메커니즘이 필요합니다. 분산된 트랜잭션]-2단계 커밋 (2PC) 프로토콜과 같은 - 모든 참여 측은 커밋 또는 aborts를 함께 유지. 그러나, 2PC는 느리고 가용성을 감소시킬 수 있습니다. 대안은 Saga 패턴, 각 작업은 여러 트랜잭션을 지원하지 않는 경우:5FDNA는 트랜잭션을 지원하지 않는 경우:3DNA를 지원하는 경우, 여러 트랜잭션을 지원할 수 있습니다.
3. Conflict Resolution 전략 구현
Concurrent는 멀티레지던스 배포에 동일한 데이터 항목에 대해 충돌을 만들 수 있습니다. Serverless 상점은 일반적으로 last-writer-wins (LW)를 사용하여 가장 최근의 타임스탬프를 유지하고 있습니다. 간단히 말하면 LWW는 sync가 있더라도 데이터를 잃을 수 있습니다. 풍부한 세마틱을 위해 version 벡터[FLT:[FLT:]]:[FLT:]]:[FLT:]]:[FLT:]]:[FLT:]]]:[FLT:]]]]:[FLT:]]]]]:[FLT:]]:[FLT:]]]]:[FLT:[FLT:]]]]:]:]:[FLT:[FLT:]]:[FLT:[FLT:[FLT:]]]]]]]]:[FLT:]]:[FLT:[FLT:]]]]]]]:[FLT:]:]:]
4. 레버리지 Idempotent 가동 및 재량
네트워크 실패 또는 일시적인 오류는 클라이언트의 retries를 일으킬 수 있습니다, 중복 처리에서 결과 할 수 있습니다. idempotent]가 위험이 제거됩니다. 예를 들어, 각 쓰기 요청에 고유 한 idempotency 키를 할당합니다. 서버는 같은 키를 공유하는 데 필요한 요청을 삭제할 수 있습니다. 많은 serverless SDK 지원 idempotent는 기본적으로 작성합니다. exponalonal joffion 및 reentiment에 대한 자세한 내용은 다시 로그 및 유지하지 않고 다시 로그를 유지하고 내용을 유지하십시오.
5. 변화 시내와 감사를 가진 Data Integrity를 감시하십시오
서버 환경에서, 당신은 사용할 수 있습니다 변경 데이터 캡처 (CDC) 다이너모DB 스트림, 코스모스 DB 변경 피드, 또는 Firestore의 실시간 청취자 모든 수정을 모니터링. 설정 lambda 또는 클라우드 기능을 활성화하는 데이터 invariants는 각 변경 후 유지. 예를 들어, 은행 응용 프로그램은 항상 신용 카드의 합과 같은 균형을 확인 할 수 있습니다. 일정한 판단을 감지 할 수 있습니다.
6. 당신의 사용 케이스를 위한 자료 복제를 낙관하십시오
글로벌 복제는 전 세계 사용자들에게 대기 시간을 향상하지만, 일관성에 대한 창을 증가시킵니다. 적절한 일관성 수준과 복제를 구성하고 active-active] 대 ]active-passive] topologies을 사용하여 고려하십시오. Active-active (multi-master)는 더 낮은 쓰기 대기 시간을 제공하지만 강력한 충돌 해결이 필요합니다. Active-passive (single primary with read replica replica replica replica replicas)는 여전히 경쟁적인 수준에서 경쟁을 읽을 수 있도록 합니다.
건축 패턴 그 보존 일관성
명령 쿼리 책임 회귀 (CQRS)
CQRS는 읽기 모델에서 모델을 분리, 각각 최적화 된 독립적으로 허용. 쓰기는 강력 일관성있는 상점에 이동; 마지막으로 일관성있는 투사에서 온다. 이 패턴은 특히 강력한 때 결합 될 때 event sourcing 접근, 모든 상태 변경은 immutable 이벤트로 저장됩니다. 읽기 모델은 사건 로그에서 재건 될 수 있습니다. 실패가 발생하면. Martin Fowler의 [[[[LT:]]] CQRS는 우수한 개요를 제공합니다. ]] CQRS는 CQRS에 대한 개요를 제공합니다.
이벤트 Sourcing 및 Eventual 일관성
이벤트 소싱은 현재 상태 대신 이벤트의 순서를 저장합니다. 이벤트는 부과되어야하며, 자연적으로 일관성이 있습니다. DynamoDB 또는 Cosmos DB와 같은 서비스는 이벤트 저장소로 작동 할 수 있습니다. 소비자 프로세스 이벤트는 비동기적으로, 결국 건물 읽기 모델입니다. 충돌의 경우, 알려진 체크 포인트에서 이벤트 스트림을 재생할 수 있습니다. 이 패턴은 durability and Auditability]를 보장하고 일관성을 정확히 파악하는 데 필요한 이유를 작성합니다.
신뢰할 수있는 메시징을위한 아웃 박스 패턴
서버가 데이터베이스에 쓸 때, 큐에 메시지를 보내면 두 개의 작업이 원자가 될 수 없습니다. outbox pattern]은 동일한 트랜잭션 내에서 동일한 데이터베이스에 메시지를 저장함으로써 이것을 해결합니다. 별도의 프로세스 (Stream Processor와 같은)는 아웃 박스를 읽고 메시지를 게시합니다. 이 보증은 데이터베이스 작성 및 메시지가 전송하는 것은 모두에 따라 또는 두 개의 롤링 백, 사전 처리 서비스 [FLT].A2.A.C. (Secure)는 세부 사항과 같은 세부 사항이 있습니다. [FTL]
특수 케이스 처리: Geo-Distribution 및 오프라인 쓰기
Mobile 및 IoT 애플리케이션은 종종 오프라인 및 동기화를 계속합니다. Serverless 공급 업체 SDK는 사용자 정의 충돌 해결자를 통해 충돌을 처리하는 동기화와 오프라인 지속성을 제공합니다. 예를 들어, DynamoDB를 사용한 AWS AppSync는 타임 스탬프 또는 클라이언트 정의 논리를 기반으로 버전 통합 할 수 있습니다. 이러한 라이브러리를 사용하면 항상 실제 네트워크 조건에서 충돌 해결 논리를 테스트하고 충돌의 수를 모니터링합니다.
멀티레지온 일관성을 위해 ]consistency groups]을 사용하여 코스모스 DB에 의해 지원되는 개념을 통해 그룹 관련 항목이 항상 함께 복제됩니다. 이 시나리오는 사용자가 프로필 사진이 지역 A에서 업데이트되었지만 바이오 업데이트 (같은 그룹에서)는 아직 지역 B에 도착하지 않았습니다.
시험 및 검증 전략
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.
의논하기
이 웹 사이트는 귀하가 웹 사이트를 탐색하는 동안 귀하의 경험을 향상시키기 위해 쿠키를 사용합니다. 이 쿠키들 중에서 필요에 따라 분류 된 쿠키는 웹 사이트의 기본적인 기능을 수행하는 데 필수적이므로 브라우저에 저장됩니다. 또한이 웹 사이트의 사용 방식을 분석하고 이해하는 데 도움이되는 제 3 자 쿠키를 사용합니다. 이 쿠키는 귀하의 동의하에 만 브라우저에 저장됩니다. 이러한 쿠키를 거부 할 수도 있습니다. 이러한 쿠키 중 일부를 선택 해제하면 검색 환경에 영향을 미칠 수 있습니다.