개요
이 가이드 에서는 Rust 드라이버가 연결 풀 을 사용하여 MongoDB 배포서버 에 대한 연결을 관리 방법과 애플리케이션 에서 연결 풀 설정을 구성하는 방법을 학습 수 있습니다.
연결 풀 드라이버 에 의해 유지 관리되는 개방형 데이터베이스 연결의 캐시 입니다. 애플리케이션 에서 작업을 수행해야 하는 경우 드라이버 풀에서 연결을 확인하고 이를 사용하여 작업을 실행 하고 재사용을 위해 연결을 풀에 반환합니다. 연결을 재사용하면 애플리케이션 지연 시간 줄이고 각 작업에 대해 새 연결을 생성하는 오버헤드 방지할 수 있습니다.
연결 풀 사용
MongoDB 에 연결하려면 Client 인스턴스 만듭니다. 각 Client 는 내부 연결 풀 유지 관리하고 서버 토폴로지 검색 및 배포서버 모니터링 포함하여 대부분의 연결 관리 측면을 자동으로 처리합니다.
다음 코드는 기본값 연결 설정을 사용하는 클라이언트 만드는 방법을 보여줍니다.
let client_default = Client::with_uri_str(uri).await?;
워크로드 에 특정 성능 또는 동시성 요구 사항이 있는 경우 Client을 구성하기 전에 ClientOptions 에 옵션을 설정하여 연결 풀 조정할 수 있습니다.
연결 풀 구성
모든 Client 인스턴스 에는 MongoDB 토폴로지 의 각 서버 에 대한 내장 연결 풀 있습니다. min_pool_size 옵션을 구성하지 않으면 운전자 애플리케이션 의 동시 요청을 지원 위해 요청 시 소켓을 엽니다.
ClientOptions 인스턴스 에서 다음 옵션을 설정하여 연결 풀 동작을 구성할 수 있습니다.
옵션 | 설명 |
|---|---|
| Maximum number of concurrent connections that each pool maintains. Default: 10 |
| Maximum number of connections that each pool can establish concurrently. Default: 2 |
| Minimum number of concurrent connections that each pool maintains. Default: 0 |
| Maximum amount of time that a connection can remain idle in the pool before the driver removes and replaces it. Default: 0 (no limit) |
다음 예시 클라이언트 생성할 때 연결 풀 옵션을 구성하는 방법을 보여 줍니다.
let mut client_options = ClientOptions::parse(uri).await?; client_options.max_pool_size = Some(20); client_options.max_connecting = Some(3); client_options.min_pool_size = Some(1); client_options.max_idle_time = Some(Duration::new(90, 0)); let client_custom = Client::with_options(client_options)?;
최대 풀 크기 구성
max_pool_size 옵션은 지정된 서버 에 대해 각 풀이 유지 관리하는 최대 연결 수를 제어합니다. 기본값은 10입니다. 서버 에 대한 사용 중인 연결 수가 이 제한에 도달하면 해당 풀의 연결이 필요한 후속 요청은 기존 연결이 다시 체크인할 때까지 기다려야 합니다.
애플리케이션의 요청을 제공 데 사용되는 소켓 외에도 각 Client 는 토폴로지 에서 서버 당 두 개의 예비 소켓을 열어 서버 상태 를 모니터 . 예시 를 들어 3노드 복제본 세트 다음 작업을 수행합니다.
운전자 모니터링 소켓 6개 또는 노드 2개를 엽니다.
애플리케이션 기본값
max_pool_size을(를) 사용하고 프라이머리 에서 읽기 및 쓰기만 수행하는 경우, 연결 풀 최대 16 개의 총 연결을 보유할 수 있습니다. 이 합계는 10 개의 애플리케이션 연결과 6 개의 모니터링 연결로 구성됩니다.애플리케이션 에서 세컨더리도 대상으로 하는 읽기 설정 (read preference) 사용하는 경우 드라이버 해당 노드에 대한 풀도 유지 관리하며, 모든 풀 및 모니터링 소켓에서 총 연결 수가36 개 가 될 수 있습니다.
단일 프로세스 에서 높은 수준의 동시성이 필요한 워크로드의 경우 max_pool_size 을 늘려 더 많은 동시 연결을 허용합니다. 다음 예시 max_pool_size 연결을 20 연결로 늘립니다.
let mut client_options = ClientOptions::parse(uri).await?; client_options.max_pool_size = Some(20); let client_max_pool = Client::with_options(client_options)?;
동시 연결 옵션 구성
연결 풀은 병렬로 생성하는 새 연결의 수를 제한합니다. max_connecting 옵션은 각 풀이 동시에 설정할 수 있는 최대 연결 수를 제어합니다. 기본값 은 2입니다.
예시 들어 max_connecting 가 2로 설정하다 경우 새 연결이 필요한 세 번째 동시 요청 다음 중 하나가 발생한 후에만 성공합니다.
풀에서 연결 생성이 완료되고 총 연결 수가
max_pool_size이하입니다.사용 중인 연결은 풀로 반환됩니다.
이러한 방식으로 속도 제한 연결을 생성하면 드라이버 새 연결을 여는 대신 기존 연결을 재사용할 수 있습니다.
병렬로 생성할 수 있는 연결 수를 늘리려면 다음 예시 와 같이 max_connecting에 더 높은 값을 설정하다 .
let mut client_options = ClientOptions::parse(uri).await?; client_options.max_connecting = Some(3); let client_concurrent = Client::with_options(client_options)?;
최소 풀 크기 구성
min_pool_size 옵션은 각 풀이 서버 에 대해 유지 관리하는 최소 연결 수를 설정합니다. 기본값은 0입니다. 양수 min_pool_size를 설정하다 하면 드라이버 해당 연결이 있는 풀을 초기화하고 항상 최소한 해당 연결 수를 열린 상태로 유지하려고 시도합니다.
연결이 닫히고 총 사용 중 및 유휴 연결 수가 min_pool_size 미만으로 떨어지면 풀은 구성된 최소값에 도달할 때까지 새 연결을 엽니다. 이는 트래픽이 급증할 때 준비된 연결 풀이 필요한 워크로드에 유용할 수 있습니다.
최소 풀 크기를 구성하려면 다음 예시 와 같이 Client을 생성할 때 min_pool_size 를 원하는 연결 수로 설정하다 .
let mut client_options = ClientOptions::parse(uri).await?; client_options.min_pool_size = Some(1); let client_min_pool = Client::with_options(client_options)?;
최대 유휴 시간 구성
max_idle_time 옵션은 드라이버 을 제거하고 교체하기 전에 풀에서 연결이 유휴 상태로 유지될 수 있는 기간을 제어합니다. 기본값 은 0이며, 이는 유휴 시간 제한이 없음을 의미합니다.
연결이 max_idle_time로 지정된 기간 동안 유휴 상태인 경우 풀은 해당 연결을 삭제하고 필요에 따라 대체 연결을 엽니다. 이렇게 하면 애플리케이션 이 방화벽이나 네트워크 인프라에 의해 닫힐 수 있는 긴 유휴 연결을 유지하는 것을 방지할 수 있습니다.
다음 예시 최대 유휴 시간을 90 초로 구성하는 방법을 보여줍니다.
let mut client_options = ClientOptions::parse(uri).await?; client_options.max_idle_time = Some(Duration::new(90, 0)); let client_idle = Client::with_options(client_options)?;
연결 닫기
Client에서 managed 연결을 사전에 닫으려면 Client::shutdown() 메서드를 호출합니다. 이 메서드를 호출하면 드라이버 다음 조치를 수행합니다.
풀의 모든 유휴 소켓을 닫습니다.
풀로 반환될 때 현재 사용 중인 소켓을 닫습니다.
Client::shutdown() 을(를) 호출해도 진행 중인 작업이 중단되지 않습니다. 드라이버 관련 작업이 완료되고 연결이 풀로 다시 확인된 후에만 소켓을 닫습니다. 드라이버 프로세스 종료되면 나머지 소켓도 닫습니다.
추가 정보
연결 풀에 대해 자세히 학습하려면 MongoDB Server 매뉴얼의 연결 풀 설정 조정 을 참조하세요.
API 문서
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.