AWS 서버리스 아키텍처를 기반으로하는 CQRS + Event Sourcing 백엔드를 구현하려고합니다. 문제는 readmodel 업데이트 문제입니다.AWS Lambda로 서버리스 CQRS + EventSourcing ReadModel 업데이트
이벤트가 이벤트 저장소에 저장되면 SNS에 게시됩니다. 그런 다음 SNS가 UpdateReadModel
람다를 호출합니다. 여러 개의 순차적 이벤트가 SNS에 게시되면 여러 개의 람다가 호출됩니다.
첫 번째 문제는 모두 동일한 ReadModel 업데이트를 수행하고 실제로 모든 이벤트에 대해 하나의 람다 만 호출해야한다는 것입니다.
두 번째 문제는 몇 번의 람다 실행 후 최종 ReadModel 상태가 손상 될 수 있다는 점입니다.
ReadModel 당 정확히 하나의 람다가 호출되어야합니다.
가능한 솔루션 :
사용 MessageBroker에 (RabbitMQ 또는 카프카) + EC2 인스턴스는
UpdateReadModelLambda
를 호출합니다.SNS + EC2 인스턴스 다음에 SQS를 추가하고 Samba에서 lambdas 및 get 이벤트를 호출하는 코드를 작성하십시오.
하지만 인스턴스를 사용하지 않는 이유는 서버리스 방식에 적합하지 않기 때문에 개발자가 직접 컨테이너 나 MessageBus를 관리하고 크기를 조정해야하기 때문입니다.
어쩌면 누구나 이미 클라우드 서비스 + CQRS + EventSourcing에 대해이 문제를 해결했거나 다른 솔루션을 가지고있을 것입니까?
그것을 자신을 시도하지 않았지만,이 일이 당신이 필요로하고있는 것 같습니다 : https://github.com/doodeck/aws-lambda-idempotent –
우리는 EventSourcing 및 CQRS을 제공하는 클라우드 호스팅 이벤트 엔진에 노력하고 있습니다 API를 통해 슈퍼 초반이지만 원하는 경우 무료로 사용해 볼 수 있습니다 :-) https://serialized.io – hammarback
Kinesis Streams가 SNS의 대안입니까? 및/또는 파티션 키 (= 스트림 ID) 및 정렬 키 (= 시퀀스 번호)가있는 DynamoDB는 잠재적 인 이벤트 저장소로 보이며 람다 또는 키네시 스와 잘 통합됩니다. – TomW