Google Cloud Platform 함수 를 사용하여 클러스터와 상호 작용 수 Atlas Google Cloud Platform 있습니다. 및 실행이 포함됩니다.
모범 사례
다음 권장사항을 사용하여 Google Cloud 함수와 Atlas 간의 연결을 올바르게 관리합니다.
함수 범위의 데이터베이스 연결이 아닌 글로벌 범위의 데이터베이스 연결을 사용하여 Cloud Function을 만드세요.
함수를 호출할 때마다 새 클라이언트 객체 정의하지 마세요. 이렇게 하면 드라이버 각 함수 호출에 대해 새 데이터베이스 연결을 생성하게 됩니다. 이 경우 비용이 많이 들 수 있으며 애플리케이션 데이터베이스 연결 제한을 초과할 수 있습니다. 최상의 성능을 얻으려면 다음 지침을 따르세요.
클라이언트 객체 한 번 생성합니다.
함수가 함수 호출 전반에서 클라이언트 재사용할 수 있도록 객체 를 저장합니다.
연결 예시는 기존 데이터베이스 연결을 재사용하여 데이터베이스와의 통신 속도를 높이고 애플리케이션 트래픽과 관련하여 데이터베이스에 대한 연결 수를 합리적인 수준으로 유지합니다.
샤드가 많은 샤딩된 클러스터 에 연결하는 함수가 있는 경우 성능 문제가 발생할 수 있습니다. 예시 들어, 10개의 샤드 Atlas cluster
mongos의 경우 운전자 기본값 으로 30개의 인스턴스 모두에 연결됩니다.srvMaxHosts연결 문자열 에 옵션을 사용하여 운전자 연결하는 최대 호스트 수를 설정하다 수 있습니다. 운전자 성능을 개선하려면srvMaxHosts=3을(를) 설정하다 . 예시 들면 다음과 같습니다.mongodb+srv://<db_username>:<db_password>@<clusterName>.mongodb.net/?retryWrites=true&w=majority&srvMaxHosts=3 자세한 내용은 연결 옵션을 참조하세요.
Atlas 클러스터에 대한 네트워크 액세스를 제한합니다.
프라이빗 네트워킹을 통해 Atlas 클러스터를 연결하세요. Google Cloud 기능과 Atlas 클러스터 간 네트워크 피어링 연결 또는 비공개 엔드포인트를 사용하여 연결하면 IP 액세스 목록의 프라이빗 IP 주소만 허용할 수 있습니다.
비공개 네트워킹을 사용하지 않는 경우,NAT 게이트웨이를 통해 Atlas cluster 에 연결하는 것이 좋습니다. 그렇지 않으면 모든 IP 주소(...0 00/)가00Atlas cluster 에 액세스 있도록 허용해야 합니다.
경고
0.0.0.0/0와 같은/0CIDR을 추가하면 어디에서나 액세스 할 수 있습니다. 이 구성은 배포서버 무단 액세스 , 데이터 유출 및 기타 악의적인 활동에 노출할 수 있습니다. 가능하면 신뢰할 수 있는 IP 주소 또는 CIDR 범위에 대한 액세스 제한하고 공용 인터넷에서 액세스 허용할 때 모든 데이터베이스 사용자에 대해 강력한 자격 증명 사용합니다.참고
프로젝트 액세스 목록에 IPv4
/0CIDR(예:0.0.0.0/0또는10.0.0.0/0)을 추가하면 Atlas는 프로젝트에 직접 역할이 부여되었거나 팀 멤버십을 통해 간접적으로 역할이 부여된 모든 사용자(팀에 프로젝트 역할이 부여된 경우)에게 경고 이메일을 보냅니다.
동시성을 구성합니다. 새 Google Cloud 기능을 만드는 경우:
여러 개의 동시 요청을 처리하다 할 수 있는 2nd gen 환경을 선택합니다. 2nd gen은 또한 함수가 많은 동시 호출로 단일
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; }