데이터 저장소 모드용 Java 클라이언트는 gRPC를 전송 계층 옵션으로 제공합니다. gRPC 연결 풀링을 사용하면 여러 연결에 RPC를 분산할 수 있어 성능이 향상될 수 있습니다.
시작하기 전에
최신 버전의 google-cloud-datastore
라이브러리를 설치합니다.
gRPC 전송 동작을 사용 설정하는 방법
gRPC 전송 동작을 사용 설정하려면 클라이언트 인스턴스화에 setTransportOptions
를 추가합니다.
자바
DatastoreOptions datastoreOptions = DatastoreOptions.newBuilder() .setProjectId("my-project") .setDatabaseId("my-database") .setTransportOptions(GrpcTransportOptions.newBuilder().build()) .build();
전송 옵션을 GrpcTransportOptions
로 명시적으로 설정하면 서버를 호출할 때 HTTP 대신 gRPC를 사용하도록 클라이언트가 구성됩니다.
gRPC 전송 동작 비활성화
HTTP 전송 동작으로 되돌려 gRPC 전송 동작을 비활성화할 수 있습니다. 이렇게 하려면 .setTransportOptions
코드 줄을 삭제하거나 GrpcTransportOptions
을 HttpTransportOptions
로 바꿉니다.
애플리케이션을 다시 빌드하고 다시 시작해야 합니다.
자바
// Use this code to deactivate the gRPC transport behavior // by reverting to the HTTP transport behavior. DatastoreOptions datastoreOptions = DatastoreOptions.newBuilder() .setProjectId("my-project") .setDatabaseId("my-database") .build(); // You can also use this code to revert to the HTTP transport behavior DatastoreOptions datastoreOptions = DatastoreOptions.newBuilder() .setProjectId("my-project") .setDatabaseId("my-database") .setTransportOptions(HttpTransportOptions.newBuilder() .setConnectTimeout(1000) .build()) .build();
교통 옵션 확인
클라이언트가 사용하는 TransportOptions
유형을 확인하려면 전송 옵션 유형을 검사하세요.
자바
// Compares datastore transport options type boolean isGRPC = datastore.getOptions().getTransportOptions() instanceof GrpcTransportOptions; boolean isHTTP = datastore.getOptions().getTransportOptions() instanceof HTTPTransportOptions;
연결 풀 구성
연결 풀(채널 풀이라고도 함)은 클라이언트가 연결 지연 시간과 성능을 개선하기 위해 공유하고 재사용하는 데이터베이스 연결의 캐시입니다. 애플리케이션의 성능을 개선하려면 연결 풀을 구성하세요.
이 섹션에서는 최적의 연결 풀 크기를 결정하는 방법을 설명하고 Java 클라이언트 라이브러리 내에서 연결 풀을 구성하는 방법을 보여줍니다.
최적의 연결 풀 크기 결정
기본 연결 풀 크기는 대부분의 애플리케이션에 적합하며 대부분의 경우 변경할 필요가 없습니다. 하지만 높은 처리량이나 버퍼링된 요청으로 인해 연결 풀 크기를 변경해야 할 수도 있습니다.
트래픽 변동에 대해 여지를 남겨 두기 위해 연결 풀은 포화도를 최대화하기 위해 필요한 연결 수의 약 2배를 차지하는 것이 가장 좋습니다. 연결 하나에서 동시 요청을 최대 100개까지 처리할 수 있으므로 대기 요청은 연결당 10~50개가 가장 좋습니다. 미들웨어 레이어는 gRPC 연결당 동시 스트림 한도를 100개로 적용하며 이 한도는 구성할 수 없습니다. 예상 클라이언트당 QPS와 평균 지연 시간 수를 사용하여 연결 풀의 최적 연결 수를 계산하려면 다음 단계를 따르세요.
클라이언트 측 측정항목에서 다음 정보를 수집하고 다음 계산을 실행합니다.
- 애플리케이션이 워크로드를 실행할 때 클라이언트별 최대 초당 쿼리 수 (QPS)를 확인합니다.
- 밀리초(ms) 단위의 평균 지연 시간(단일 요청의 응답 시간)을 확인합니다.
- 1,000을 평균 지연 시간 값으로 나누어 순차적으로 전송할 수 있는 초당 요청 수를 결정합니다.
- QPS(초 단위)를 초당 직렬 요청 수로 나눕니다.
- 최소 최적 연결 풀 크기를 결정하려면 결과를 채널당 요청 50개로 나눕니다. (계산이 2보다 작으면 채널을 2개 이상 사용하여 중복성을 보장합니다.)
- 최대 최적 연결 풀 크기를 결정하려면 동일한 결과를 채널당 요청 10개로 나눕니다.
이 단계를 수행하려면 다음 방정식을 사용하세요.
(QPS sec ÷ (1,000 ÷ latency ms)) ÷ 50 streams = Minimum optimal number of
connections
(QPS sec ÷ (1,000 ÷ latency ms)) ÷ 10 streams = Maximum optimal number of
connections
예를 들어 애플리케이션에서 일반적으로 초당 50,000개의 요청을 전송하며 평균 지연 시간은 10밀리초입니다. 1,000을 10밀리초로 나눠 초당 100개의 요청을 순차적으로 보낼 수 있는지 확인합니다. QPS 50,000개를 전송하는 데 필요한 동시 로드를 구하려면 해당 숫자를 50,000으로 나눕니다. 그러면 500이 됩니다.
각 채널에는 요청이 동시에 최대 100개까지 있을 수 있으며 대상 채널 사용률은 동시 스트림 10~50개입니다. 따라서 최소 연결 풀 크기를 계산하려면 500을 50으로 나눠 10을 구합니다. 최대 연결 풀 크기를 찾으려면 500을 10으로 나눠 50을 구합니다.
즉, 이 예시의 연결 풀 크기는 연결 10~50개입니다. 이러한 변경 후 트래픽을 모니터링하고 필요한 경우 풀의 연결 수를 조정하는 것도 중요합니다.
풀 크기 설정
다음 코드 샘플은 DatastoreOptions
를 사용하여 클라이언트 라이브러리에서 연결 풀을 구성하는 방법을 보여줍니다.
자바
InstantiatingGrpcChannelProvider channelProvider = DatastoreSettings.defaultGrpcTransportProviderBuilder() .setChannelPoolSettings( ChannelPoolSettings.builder() .setInitialChannelCount(MIN_VAL) .setMaxChannelCount(MAX_VAL) .build()) .build(); DatastoreOptions options = DatastoreOptions.newBuilder() .setProjectId("my-project") .setChannelProvider(channelProvider) .setTransportOptions(GrpcTransportOptions.newBuilder().build()) .build();
다음 단계
연결 풀 및 성능 권장사항에 대한 자세한 내용은 다음을 참고하세요.