개요
이 가이드 에서는 Ruby 운전자 연결 풀을 사용하여 MongoDB deployment 에 대한 연결을 관리 방법과 애플리케이션 에서 연결 풀 설정을 구성하는 방법에 대해 학습 합니다.
연결 풀 Ruby 운전자 에 의해 유지 관리되는 개방형 데이터베이스 연결의 캐시 입니다. 애플리케이션 MongoDB 에 대한 연결을 요청하면 운전자 풀에서 원활하게 연결을 가져오고, 작업을 수행하고, 재사용을 위해 연결을 풀에 반환합니다.
연결 풀은 애플리케이션 지연 시간 줄이고 Ruby 운전자 에서 새 연결을 생성하는 횟수를 줄이는 데 도움이 됩니다.
연결 풀 구성
모든 Mongo::Client 인스턴스 에는 MongoDB 토폴로지 의 각 서버 에 대한 내장 연결 풀 있습니다. min_pool_size 옵션을 구성하지 않으면 연결 풀이 필요에 따라 연결을 열어 애플리케이션 에서 MongoDB 에 대한 동시 요청을 지원 .
Mongo::Client 인스턴스 에서 다음 연결 풀 설정을 지정할 수 있습니다.
설정 | 설명 |
|---|---|
| The maximum number of concurrent connections that the pool maintains.
If the number of in-use connections to a server reaches the specified
value, the next request to that server waits until a connection becomes
available. Setting this option to 0 creates an unlimited connection pool.Default: 100 |
| The maximum number of connections that each pool can establish
concurrently. Default: 2 |
| The minimum number of concurrent connections that the pool maintains. Default: 0 |
| The maximum number of seconds that a connection can remain idle in
the pool. Default: 0 (no limit) |
max_pool_size
애플리케이션의 요청을 지원 데 필요한 연결 외에도 각 Mongo::Client 인스턴스 MongoDB 토폴로지 에서 서버 당 최대 두 개의 연결을 열어 서버 상태 모니터링 .
예시 들어, 3노드 복제본 세트 에 연결된 클라이언트 6개의 모니터링 연결을 엽니다. 애플리케이션 max_pool_size 기본값 설정을 사용하고 프라이머리 (기본값) 노드 만 쿼리하는 경우 연결 풀 에는 최대 106 개의 열린 연결과 100 개의 연결이 있을 수 있습니다. 애플리케이션 읽기 설정 (read preference) 사용하여 세컨더리 노드를 쿼리 경우 이러한 연결 풀이 커지고 열린 모니터링 연결을 포함하여 총 연결 수가 306 개가 될 수 있습니다.
하나의 프로세스 내에서 많은 수의 동시 MongoDB 요청을 지원하려면 max_pool_size를 늘리면 됩니다.
다음 코드는 options 객체 에 max_pool_size 옵션을 지정하여 최대 연결 풀 크기가 200 인 Mongo::Client 인스턴스 를 생성합니다.
require 'mongo' uri = "<connection-string>" client = Mongo::Client(uri, { max_pool_size: 200 })
max_connecting
연결 풀 속도 제한 연결 설정. max_connecting 옵션은 풀이 언제든지 병렬로 생성할 수 있는 연결 수를 결정합니다. 예시 를 들어 max_connecting 값이 2인 경우 연결을 동시에 체크아웃하려는 세 번째 요청 다음 경우 중 하나가 발생할 때만 성공합니다.
연결 풀에서 연결 생성이 완료되었으며 풀에 연결 수가
max_pool_size미만입니다.기존 연결이 풀로 다시 확인됩니다.
다음 코드는 options 객체 에 max_connecting 옵션을 지정하여 풀당 동시에 설정할 수 있는 최대 2 연결을 가진 Mongo::Client 인스턴스 만듭니다.
require 'mongo' uri = "<connection-string>" client = Mongo::Client(uri, { max_connecting: 2 })
min_pool_size
min_pool_size 옵션을 사용하여 각 서버 에 대한 최소 연결 수를 설정하다 수 있습니다. 운전자 연결 풀 에 min_pool_size 옵션으로 설정하다 연결 수가 항상 최소한 있는지 확인합니다. 연결이 닫혀 총 연결 수(사용 중인 연결 수와 유휴 상태 모두)가 최소값 아래로 떨어지면 운전자 최소값에 도달할 때까지 더 많은 연결을 엽니다.
다음 코드는 options 객체 에 min_pool_size 옵션을 지정하여 최소 연결 풀 크기가 10 인 Mongo::Client 인스턴스 를 생성합니다.
require 'mongo' uri = "<connection-string>" client = Mongo::Client(uri, { min_pool_size: 10 })
참고
max_idle_time 로 구성된 Mongo::Client 및 0 로 설정하다 min_pool_size 는 활동량이 지속적으로 낮은 워크로드에 최적입니다. 이 구성을 사용하면 연결 풀 비활성 기간 동안 사용하지 않는 연결을 닫을 수 있습니다.
max_idle_time
max_idle_time 옵션을 설정하여 연결이 풀에서 유휴 상태로 유지될 수 있는 최대 시간(밀리초)을 설정할 수 있습니다. 연결이 max_idle_time 동안 유휴 상태이면 연결 풀이 이를 제거하고 교체합니다. 이 옵션의 기본값은 0(제한 없음)입니다.
다음 코드는 options 객체 에 max_idle_time 설정을 지정하여 최대 유휴 시간이 10000 밀리초(10 초)인 Mongo::Client 인스턴스 생성합니다.
require 'mongo' uri = "<connection-string>" client = Mongo::Client(uri, { max_idle_time: 10000 })
연결 닫기
요청 이 Mongo::Client.close()을(를) 호출하면 Ruby 운전자 다음 조치를 수행합니다.
연결 풀 의 모든 유휴 연결을 닫습니다.
풀로 반환될 때 사용 중인 모든 연결을 닫습니다.
관련 작업이 완료될 때만 사용 중인 모든 연결을 닫습니다.
Mongo::Client.close() 를 호출하면 비활성 연결만 닫히고 진행 중인 작업이 직접 종료되지 않습니다.
참고
Mongo::Client.close() 메서드는 기존 세션과 트랜잭션을 닫으며, 이는 진행 중인 작업의 동작에 간접적으로 영향을 미치고 커서를 엽니다.
연결 시간 초과 방지
연결 풀 크다고 해서 항상 재연결 요청이 줄어드는 것은 아닙니다. 다음 예시 시나리오를 가정해 보겠습니다.
애플리케이션 의 연결 풀 크기가 5 연결이고
timeout_ms옵션이 5000 밀리초로 설정하다 있습니다.작업은 평균 3000 밀리초마다 발생하며 재연결 요청이 자주 발생합니다.
각 연결은 5000 밀리초 후에 시간 초과되므로 모든 연결이 닫히지 않으려면 이 5000 밀리초 동안 조치를 취해야 합니다.
이 시나리오에서는 각 연결이 5000 밀리초 후에 시간 초과되며, 연결이 닫히지 않으려면 이 시간 초과 기간 내에 활동해야 합니다. 그러나 3000 밀리초마다 하나의 메시지로는 모든 연결을 활성 상태로 유지하기에 충분하지 않아 여러 연결이 시간 초과될 수 있습니다.
과도한 연결 시간 초과를 방지하려면 max_pool_size 옵션을 지정하여 운전자 연결 풀 에서 유지할 수 있는 연결 수를 줄입니다. max_pool_size 옵션을 설정하다 방법을 학습 이 가이드 의 max_pool_size 섹션을 참조하세요.
API 문서
Ruby 운전자 사용하여 Mongo::Client 객체 만들고 옵션을 지정하는 방법에 대한 자세한 내용은 Mongo::Client API 설명서의 옵션 해시 섹션을 참조하세요.