서버리스 및 MongoDB의 확장 문제를 어떻게 극복 할 수 있습니까?
저는 서버리스와 MongoDB에 익숙하며 두 세계를 연결하는 확장 가능한 방법이 있는지 알고 싶습니다. 내가 아는 한 RESTful 방식으로 MongoDB와 상호 작용할 수 없습니다. 대신 재사용되어야하는 연결을여십시오.
서버리스 API의 일부로 AWS Lambda를 사용하고 있다고 가정 해 보겠습니다. 람다가 차가울 때 MongoDB에 대한 새 연결을 열어야하며 람다가 여전히 뜨거우면 연결이 열린 상태로 유지됩니다. 이 솔루션은 괜찮지 만 API에 트래픽이 급증하면 MongoDB에서 부과하는 연결 제한에 도달하게됩니다.
람다와 같은 무국적 세계에서 이러한 연결 한계를 극복 할 수있는 방법이 있습니까?
답변
Lambda 함수는 상태 비 저장 및 비동기 적이며 데이터베이스 연결 풀을 사용하여 상태를 추가하고 목적을 무효화합니다.
연결 풀링을 원하는 경우 EC2를 통해 서버를 실행하는 것이 AWS에서 가장 적합한 옵션입니다.
그러나 여전히 람다로 연결 풀링을 원하는 경우 일반적으로 사용하여 풀 MongoClient.connect(uri, { poolSize: 10 })
을 만들고 더미 트리거를 만들어 클라우드 감시 이벤트를 사용하여 람다를 따뜻하게 유지할 수 있습니다.
확실히 성능 향상을 볼 수 있습니다.
생각할 아이디어 : Kinesis를 사용하여 Lambda를 트리거 할 수 있습니다. 동시 실행 수를 샤드 수로 제한합니다 (예 : 8 개의 샤드를 동시에 8 개씩).
이러한 방식으로 연결을 열린 상태로 유지하고 확장 문제를 방지하기 위해 열린 연결 한도를 획득 할 수 있습니다.
이러한 유형의 것 (단일 호출의 경우 연결이 새 것인지 재사용되었는지 여부에 관계없이) 시간이 지남에 따라 확장 상태를 유지하는 데 도움이되는 일부 모니터링 도구로 모니터링 할 수 있으며 MongoDB 및 Kinesis 반복기 수명을 관리하는 데 도움이됩니다. 예 :
- AWS X-Ray
- AWS Cloudwatch 지표
- Datadog
- Lumigo
공개적으로 Lumigo라는 회사에서 일하고 있습니다. 생산 확장 문제를 추적하는 데 도움이되는 분산 모니터링 도구가 있습니다.