6단계: (선택 사항) 애플리케이션의 연결 풀 크기를 구성하는 모범 사례 - Amazon Keyspaces(Apache Cassandra용)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

6단계: (선택 사항) 애플리케이션의 연결 풀 크기를 구성하는 모범 사례

이 섹션에서는 애플리케이션의 쿼리 처리량 요구 사항을 기반으로 이상적인 연결 풀 크기를 결정하는 방법을 설명합니다.

Amazon Keyspaces는 TCP 연결당 초당 최대 3,000개의 CQL 쿼리를 허용합니다. 따라서 드라이버가 Amazon Keyspaces와 설정할 수 있는 연결 수에는 사실상 제한이 없습니다. 하지만 VPC 엔드포인트 연결과 함께 Amazon Keyspaces를 사용할 때는 연결 풀 크기를 애플리케이션의 요구 사항에 맞추고 사용 가능한 엔드포인트를 고려하는 것이 좋습니다.

연결 풀 크기는 클라이언트 드라이버에서 구성합니다. 예를 들어 로컬 풀 크기가 2이고 가용 영역 3개에 생성된 VPC 인터페이스 엔드포인트를 기반으로 드라이버는 쿼리를 위한 6개(제어 연결 포함 총 7개)의 연결을 설정합니다. 이 6개의 연결을 사용하면 초당 최대 18,000개의 CQL 쿼리를 지원할 수 있습니다.

애플리케이션이 초당 40,000개의 CQL 쿼리를 지원해야 하는 경우 필요한 쿼리 수를 기준으로 역방향으로 작업하여 필요한 연결 풀 크기를 결정합니다. 초당 40,000개의 CQL 쿼리를 지원하려면 로컬 풀 크기를 초당 최소 45,000개의 CQL 쿼리를 지원하는 5개 이상으로 구성해야 합니다.

네임스페이스의 PerConnectionRequestRateExceeded CloudWatch 지표를 사용하여 연결당 초당 최대 작업 수의 할당량을 초과하는지 모니터링할 수 있습니다. AWS/Cassandra PerConnectionRequestRateExceeded 지표는 Amazon Keyspaces에 대한 요청 중 연결당 요청 속도에 대한 할당량을 초과하는 요청 수를 보여 줍니다.

이 단계의 코드 예제는 인터페이스 VPC 엔드포인트를 사용할 때 연결 풀링을 추정하고 구성하는 방법을 보여 줍니다.

Java

Java 드라이버에서 풀당 연결 수를 구성할 수 있습니다. Java 클라이언트 드라이버 연결의 전체 예는 Cassandra Java 클라이언트 드라이버를 사용하여 프로그래밍 방식으로 Amazon Keyspaces에 액세스 섹션을 참조하세요.

클라이언트 드라이버가 시작되면 먼저 스키마 및 토폴로지 변경과 같은 관리 작업을 위한 제어 연결이 설정됩니다. 그런 다음 추가 연결이 생성됩니다.

다음 예제에서는 로컬 풀 크기 드라이버 구성을 2로 지정합니다. VPC 내 서브넷 3개에 걸쳐 VPC 엔드포인트를 생성하면 다음 공식과 같이 인터페이스 엔드포인트가 NewConnections 7인치가 됩니다. CloudWatch

NewConnections = 3 (VPC subnet endpoints created across) * 2 (pool size) + 1 ( control connection)
datastax-java-driver { basic.contact-points = [ "cassandra.us-east-1.amazonaws.com:9142"] advanced.auth-provider{ class = PlainTextAuthProvider username = "ServiceUserName" password = "ServicePassword" } basic.load-balancing-policy { local-datacenter = "us-east-1" slow-replica-avoidance = false } advanced.ssl-engine-factory { class = DefaultSslEngineFactory truststore-path = "./src/main/resources/cassandra_truststore.jks" truststore-password = "my_password" hostname-validation = false } advanced.connection { pool.local.size = 2 } }

활성 연결 수가 구성된 풀 크기(서브넷 간 집계) + 1개의 제어 연결과 일치하지 않으면 연결이 생성되지 않는 것입니다.

Node.js

Node.js 드라이버에서 풀당 연결 수를 구성할 수 있습니다. Node.js 클라이언트 드라이버 연결의 전체 예는 Cassandra Node.js 클라이언트 드라이버를 사용하여 프로그래밍 방식으로 Amazon Keyspaces에 액세스 섹션을 참조하세요.

다음 코드 예제의 경우 로컬 풀 크기 드라이버 구성을 1로 지정합니다. VPC 내 서브넷 4개에 걸쳐 VPC 엔드포인트를 생성하면 다음 공식과 같이 인터페이스 엔드포인트가 NewConnections 5인치가 됩니다. CloudWatch

NewConnections = 4 (VPC subnet endpoints created across) * 1 (pool size) + 1 ( control connection)
const cassandra = require('cassandra-driver'); const fs = require('fs'); const types = cassandra.types; const auth = new cassandra.auth.PlainTextAuthProvider('ServiceUserName', 'ServicePassword'); const sslOptions1 = { ca: [ fs.readFileSync('/home/ec2-user/sf-class2-root.crt', 'utf-8')], host: 'cassandra.us-east-1.amazonaws.com', rejectUnauthorized: true }; const client = new cassandra.Client({ contactPoints: ['cassandra.us-east-1.amazonaws.com'], localDataCenter: 'us-east-1', pooling: { coreConnectionsPerHost: { [types.distance.local]: 1 } }, consistency: types.consistencies.localQuorum, queryOptions: { isIdempotent: true }, authProvider: auth, sslOptions: sslOptions1, protocolOptions: { port: 9142 } });