-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
BE_INFRA 🚧백엔드 인프라백엔드 인프라
Description
✨ Description
- 변경 사항이 있는 데이터를 파싱하고 운영 db에 업데이트하는 과정을 자동화한다.
✨ Task 초안
1. 우리가 새로 파싱한 json을 S3에 업로드
- 방법1: 수동 업로드 (json 파일이 도감별로 하나씩만 존재하니까 엄청 수고스럽지는 않음)
- 방법2: 우리 파싱 레포에서 github action 돌려서 API gateway 사용해서 s3에 업로드
(제 의견은 일단 1번으로 했으면 합니다)
2. 람다함수 호출
Amazon S3 트리거를 사용하여 Lambda 함수 호출
3. 람다함수에서 데이터 업데이트
- 몽고 클라이언트 (파이썬이면
pymongo)로 데이터 삭제 후 bulk insert - 접근 권한 설정
- S3에서 JSON 파일을 가져오기 위해
s3:GetObject권한을 가진 역할(IAM)을 Lambda에 연결 - Lambda 함수가 VPC의 private subnet에 있는 MongoDB에 접근할 수 있도록 VPC 설정
- S3에서 JSON 파일을 가져오기 위해
사용자 경험
Primary DB를 업데이트 하는 기간
- readPreference를 secondaryPreferred로 설정했으므로 secondary 노드로 읽기 요청이 간다.
- secondary 노드에 장애가 발생해 primary 노드가 읽기 요청까지 받아야 하는 경우를 대비해 MongoDB transaction을
majority로 설정하고 delete와 insert를 atomic 작업으로 묶을 수 있다. (majority로 일관된 읽기까지 가능)
Secondary DB에 작업을 복제하는 기간
- 복제는 비동기로 이루어진다. 이 기간 동안 요청은 이전 데이터를 일관되게 읽는다.
읽기 작업이 세컨더리를 대상으로 하고 "local" 또는 "majority"의 읽기 고려 수준으로 구성된 경우, 복제 배치가 적용되는 세컨더리에 읽기가 수행될 때 데이터의 WiredTiger 스냅샷에서 읽습니다. 스냅샷에서 읽기는 데이터의 일관된 뷰를 보장하고, 잠금 없이 진행 중인 복제와 동시에 읽기를 수행할 수 있도록 합니다. (출처)
- 우리는 현재 따로 트랜잭션을 사용하지 않아 읽기 고려가
local입니다!
✨ Time
- 레벨 5 초반에 완성했으면 좋겠네요 😉
디코에서 말했듯이 무조건 하자, 이 방식으로 하자 가 아니라 요런 방법은 어떨까? 지금 방식이 번거롭고 우리 서비스에 맞는 최적화 작업을 하는게 재밌어보인다면 한 번 고려해주셨음 합니다 😊 위 방식, 설명도 제 생각이 많이 들어가 있어서 다른 의견도 받고 방식도 변경할 수 있으면 좋겠습니다 ! 코멘트 혹은 디스커션 같이 달아봐요 ~!
그리고 한다면 하고 싶은 사람들 다같이 했음 좋겠습니다!
unifolio0 and jinchiim
Metadata
Metadata
Labels
BE_INFRA 🚧백엔드 인프라백엔드 인프라