Google Cloud Platform Functions 및 Google Cloud Platform Run을 사용하여 Atlas 클러스터와 상호 작용 수 있습니다.
모범 사례
다음 권장사항을 사용하여 Google Cloud 함수와 Atlas 간의 연결을 올바르게 관리합니다.
함수 범위의 데이터베이스 연결이 아닌 글로벌 범위의 데이터베이스 연결을 사용하여 Cloud Function을 만드세요.
함수를 호출할 때마다 새 클라이언트 객체 정의하지 마세요. 이렇게 하면 드라이버 각 함수 호출에 대해 새 데이터베이스 연결을 생성하게 됩니다. 이 경우 비용이 많이 들 수 있으며 애플리케이션 데이터베이스 연결 제한을 초과할 수 있습니다. 최상의 성능을 얻으려면 다음 지침을 따르세요.
클라이언트 객체 한 번 생성합니다.
함수가 함수 호출 전반에서 클라이언트 재사용할 수 있도록 객체 를 저장합니다.
연결 예시는 기존 데이터베이스 연결을 재사용하여 데이터베이스와의 통신 속도를 높이고 애플리케이션 트래픽과 관련하여 데이터베이스에 대한 연결 수를 합리적인 수준으로 유지합니다.
샤드가 많은 샤딩된 클러스터 에 연결하는 함수가 있는 경우 성능 문제가 발생할 수 있습니다. 예시 들어, 10개의 샤드 Atlas 클러스터 의 경우 드라이버 기본값 으로 30개의
mongos인스턴스 모두에 연결됩니다. 연결 문자열 에srvMaxHosts옵션을 사용하여 드라이버 연결하는 최대 호스트 수를 설정할 수 있습니다. 드라이버 성능을 개선하려면srvMaxHosts=3을(를) 설정하다. 예시 들면 다음과 같습니다.mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3 자세한 사항은 연결 옵션을 참조하세요.
Atlas 클러스터에 대한 네트워크 액세스를 제한합니다.
Atlas 클러스터 Atlas 와 GCP 함수 간의 네트워크 피어링 연결 을 사용하거나 비공개 엔드포인트 를 사용하여 비공개 네트워킹을 통해 클러스터 에 연결하여 IP 액세스 IP 목록 에서 비공개 주소만 허용할 수 있습니다.
개인 네트워킹을 사용하지 않는 경우 NAT 게이트웨이를 통해 Atlas 클러스터에 연결하는 방식을 고려해 보세요. . 그렇지 않으면 모든 IP 주소(0.0.0.0/0)가 Atlas 클러스터에 액세스할 수 있도록 허용해야 합니다.
경고
IP 액세스 목록에
0.0.0.0/0추가하면 공용 인터넷의 어디에서든지 cluster에 액세스할 수 있습니다. 어디에서든 액세스를 허용하는 경우 데이터베이스 사용자 에 대해 강력한 자격 증명을 사용해야 합니다.참고
프로젝트 액세스 목록에
0.0.0.0/0CIDR을 추가하면 Atlas 프로젝트 에 직접 역할 부여하거나 팀 멤버십을 통해 역할 간접적으로 부여받은 모든 사용자( 팀 에 프로젝트 에 역할 부여된 경우)에게 경고 이메일 보냅니다. .
유휴 시간 1분 후 자동으로 연결을 종료하려면 maxIdleTimeMS를
60000으로 설정합니다.maxIdleTimeMS를 조정하면 서버리스 함수에서 시간 초과 오류 발생을 줄이는 데 유용할 수 있습니다.
동시성을 구성합니다. 새 Google Cloud 기능을 만드는 경우:
여러 개의 동시 요청을 처리할 수 있는 2nd gen 환경을 선택합니다. 2ndgen은 또한 함수가 많은 동시 호출로 단일
MongoClient를 공유할 수 있도록 허용하여 서버의 연결 로드를 줄입니다.동시성 설정을 높이면 콜드 부팅을 최소화하고 지연 시간을 개선할 수 있습니다.
참고
동시성 설정을 늘리는 경우 최상의 성능을 위해 CPU를 늘려야 할 수 있습니다. 자세한 학습 은 동시성을 참조하세요.
Google Cloud 연결 예시
다음 예시에서는 Node.js Google Cloud 함수를 Atlas 배포셔벼에 연결합니다. <YOUR-ATLAS-CONNECTION-STRING>을 Atlas 연결 문자열로 바꿉니다.
const { MongoClient } = require('mongodb'); let client; async function getConnection() { if (!client) { const client = new MongoClient('<YOUR-ATLAS-CONNECTION-STRING>'); client.on('connectionCreated', () => { console.log('New connection created successfully.'); }); // Connect to the database in the global scope await client.connect(); } return client; }