0

Amazon S3에 파일 업로드를 상상해보십시오. 파일 및 메타 데이터의 위치는 ElasticSearch의 레코드 내에 저장됩니다. 좋아, 괜찮아. 요청 중 하나가 실패 할 경우 데이터 일관성을 보장 어떻게데이터 일관성 유지 방법 (Amazon S3 및 ElasticSearch)

하지만, (ACID는?) ... 는 예를 들어, ElasticSearch 서비스는 S3에있는 파일을 삭제해야합니다

  • unavailible 경우
  • 하지만 S3에서 삭제가 실패 할 경우

이렇게하면 일관성없는 상태가됩니다.

그럼 어떻게 이러한 인스턴스를 동기화 상태로 유지합니까?

아이디어는 다음과 같습니다

  • 가 일관성이없는 상태이고 사용자가 ElasticSearch 기록을 요청하고 아무것도 S3에서 레코드가 삭제되어 찾을 수없는 경우. (meeh)
  • DB를 검색하여 불일치를 찾아 제거합니다.
  • 실행 트랜잭션 모두 요청 데이터베이스 및 경우 하나가 실패 -> 롤백하고 나중에 다시 시도하십시오 (큐, 작업 = 잔인?)

답변

0

당신이 결국 일관된 시스템 작업으로 ACID는,이 경우에 불가능하다 .

세 번째 제안은 모범 사례에 가장 근접한 것입니다.

이 시스템의 참조 아키텍처는 AWS S3에 객체를 쓰고 S3 Bucket 통지를 AWS Lambda에 사용하여 Elasticsearch에 쓰기를 수행하는 것입니다. S3-> Lambda-> Elasticsearch의 알림 단계에서 쓰기 작업이 실패한 경우 데드 레터 SQS 대기열을 사용하여 깨진 작업을 수집 한 다음 시간별 일정에 따라 CloudWatch Events-> Lambda를 사용하여 주기적으로 대기열을 비 웁니다.