Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

MongoDB 서버 선택 사용자 지정

모든 MongoDB 드라이버는 읽거나 쓰기 (write) 서버 선택할 때 정의된 알고리즘 따릅니다. MongoDB Rust 드라이버 하면 이 알고리즘 사용자 지정하여 애플리케이션 에 가장 적합한 서버 선택할 수 있습니다.

다음과 같은 방법으로 서버 선택에 영향을 줄 수 있습니다.

  • 읽기 설정 (read preference) 사용하여 프라이머리, 세컨더리 또는 태그를 지정하다 세트 및 최대 비활성 상태로 가장 가까운 서버와 같은 표준화된 방식으로 적합한 서버를 설명합니다.

  • SelectionCriteria::Predicate 를 통해 사용자 지정 조건자를 제공하여 적절한 서버를 필터링할 때 자체 로직을 적용 .

중요

서버 선택 알고리즘 을 사용자 지정하면 읽기 또는 쓰기 (write) 성능이 저하되는 등 의도하지 않은 결과가 발생할 수 있습니다.

Rust 운전자 사용자 지정 선택 기준을 사용하여 작업을 실행할 때 MongoDB deployment 선택하기 위해 다음 단계를 순서대로 수행합니다.

  1. 적격 서버 선택: 알려진 서버 SelectionCriteria 목록에서 운전자 읽기 설정 (read preference) 일치하는 서버 또는 사용자 지정 조건자가 을 반환하는 활성 와 일치하는 true 서버를 선택합니다.

  2. 지연 시간 창 적용 : 운전자 local_threshold 적격 서버 목록에 설정을 적용하여 평균 왕복 시간이 가장 빠른 적격 서버 의 구성된 창 벗어나는 서버 필터링합니다.

  3. 무작위 선택: 운전자 지연 시간 창 에 남아 있는 서버 중에서 무작위로 서버 선택하고 이 서버 대해 작업을 실행합니다.

Rust 운전자 쓰기 (write) 작업을 실행할 때 활성 읽기 설정 (read preference) 일치하는 서버뿐만 아니라 쓰기 가능한 모든 서버를 선택하는 것으로 시작합니다. 나머지 단계는 동일합니다.

기본값 서버 선택 알고리즘 에 대해 자세히 학습 MongoDB Server 매뉴얼에서 서버 선택 알고리즘을 참조하세요.

Rust 운전자 다음 예시 와 같이 SelectionCriteria 열거형 사용하여 서버 선택 규칙을 나타냅니다.

pub enum SelectionCriteria {
ReadPreference(ReadPreference),
Predicate(Predicate),
}

특정 작업에 대해 SelectionCriteria::ReadPreference 또는 SelectionCriteria::Predicate 중 하나를 사용하고 둘 다 사용하지는 않습니다.

  • ReadPreference: 표준 MongoDB 읽기 설정 (read preference) 규칙에 따라 서버 유형, 태그를 지정하다 세트, 최대 비활성 상태를 기준으로 적합한 서버를 설명합니다.

  • Predicate: 호스트 이름 패턴 또는 기타 사용자 지정 기준에 따라 서버를 선호하는 경우와 같이 ReadPreference 에서 표현할 수 없는 경우에 대한 사용자 지정 로직을 제공할 수 있습니다.

조건자는 ServerInfo 참조를 허용하고 서버 적합성을 나타내는 true을 반환하는 모든 클로저입니다. 운전자 이를 다음 코드에 표시된 Predicate 유형 별칭으로 정의합니다.

pub type Predicate = Arc<dyn Send + Sync + Fn(&ServerInfo) -> bool>;

술어가 해당 서버의 ServerInfo 값에 대해 true 을 반환하면 서버 적합한 것으로 간주됩니다. ServerInfo 유형은 주소, 유형 및 기타 모니터링 메타데이터 와 같은 서버 에 대한 정보를 노출합니다.

여러 개의 mongos 서버가 있는 샤딩된 클러스터 사용하는 경우 localhost에서 배포를 실행 좋습니다. 이러한 배포에 대한 작업은 지연 시간 짧고 처리량 높습니다. 이 예시 localhost에서 실행 서버만 고려하도록 서버 선택 알고리즘 사용자 지정하는 방법을 보여 줍니다.

조건자 함수는 다음 기준을 충족해야 합니다.

  • ServerInfo 객체 에 대한 참조를 매개 변수로 허용합니다.

  • 서버 선택에 적합한지 여부를 나타내는 부울을 반환합니다.

  • ServerInfo 객체를 생성하거나 수정하지 않습니다.

다음 예시 호스팅하다 주소 가 localhost인 서버를 선호하는 조건자를 정의합니다.

let prefer_localhost = Arc::new(|server_info: &ServerInfo| {
matches!(
server_info.address(),
ServerAddress::Tcp { host, .. } if host == "localhost"
)
});

조건자가 사용 가능한 모든 서버 에 대해 false 를 반환하면 운전자 서버 선택할 수 없습니다. 이 경우 작업이 실패하고 사용 가능한 서버가 지정된 기준에 적합하지 않음을 나타내는 서버 선택 시간 초과 오류를 반환합니다.

이러한 결과를 방지하려면 조건자가 정상적인 조건에서 하나 이상의 서버 와 일치하는지, 또는 애플리케이션 코드의 서버 선택 오류를 처리하는지 확인하고 필요한 경우 덜 제한적인 SelectionCriteria (으)로 재시도합니다.

서버 선택에 조건자를 사용하려면 클라이언트 만들 때 selection_criteria 옵션에 전달합니다. :guilabel:Asynchronous 또는 :guilabel:Synchronous 탭 선택하여 각 런타임에 해당하는 코드를 확인합니다.

let prefer_localhost = Arc::new(|server_info: &ServerInfo| {
matches!(
server_info.address(),
ServerAddress::Tcp { host, .. } if host == "localhost"
)
});
let options = ClientOptions::builder()
.hosts(vec![ServerAddress::Tcp {
host: "<hostname>".to_string(),
port: Some(27017),
}])
.selection_criteria(SelectionCriteria::Predicate(prefer_localhost))
.build();
let client = Client::with_options(options)?;
let mut options = ClientOptions::parse(
"mongodb://<db_username>:<db_password>@<hostname>:<port>",
)
.await?;
let prefer_localhost = Arc::new(|server_info: &ServerInfo| {
matches!(
server_info.address(),
ServerAddress::Tcp { host, .. } if host == "localhost"
)
});
options.selection_criteria = Some(
SelectionCriteria::Predicate(prefer_localhost),
);
let client = Client::with_options(options)?;

Rust 드라이버의 서버 선택 알고리즘 사용자 지정에 대한 자세한 내용은 다음 API 문서를 참조하세요.

돌아가기

네트워크 트래픽 압축

이 페이지의 내용