Langkah 6: (Opsional) Praktik terbaik untuk mengonfigurasi ukuran kolam koneksi untuk aplikasi Anda - Amazon Keyspaces (untuk Apache Cassandra)

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Langkah 6: (Opsional) Praktik terbaik untuk mengonfigurasi ukuran kolam koneksi untuk aplikasi Anda

Pada bagian ini, kami menguraikan cara menentukan ukuran kumpulan koneksi yang ideal berdasarkan persyaratan throughput kueri aplikasi Anda.

Amazon Keyspaces memungkinkan maksimum 3.000 kueri CQL per detik per koneksi TCP. Jadi hampir tidak ada batasan jumlah koneksi yang dapat dibuat driver dengan Amazon Keyspaces. Namun, kami menyarankan agar Anda mencocokkan ukuran kumpulan koneksi dengan persyaratan aplikasi Anda dan mempertimbangkan titik akhir yang tersedia saat Anda menggunakan Amazon Keyspaces dengan koneksi titik akhir VPC.

Anda mengonfigurasi ukuran kolam koneksi di driver klien. Misalnya, berdasarkan ukuran kolam lokal 2 dan titik akhir antarmuka VPC yang dibuat di 3 Availability Zones, driver membuat 6 koneksi untuk kueri (total 7, yang mencakup koneksi kontrol). Dengan menggunakan 6 koneksi ini, Anda dapat mendukung maksimal 18.000 kueri CQL per detik.

Jika aplikasi Anda perlu mendukung 40.000 kueri CQL per detik, kerjakan mundur dari jumlah kueri yang diperlukan untuk menentukan ukuran kumpulan koneksi yang diperlukan. Untuk mendukung 40.000 kueri CQL per detik, Anda perlu mengonfigurasi ukuran kolam lokal menjadi minimal 5, yang mendukung minimal 45.000 kueri CQL per detik.

Anda dapat memantau jika Anda melebihi kuota untuk jumlah maksimum operasi per detik, per koneksi dengan menggunakan PerConnectionRequestRateExceeded CloudWatch metrik di AWS/Cassandra namespace. PerConnectionRequestRateExceededMetrik menunjukkan jumlah permintaan ke Amazon Keyspaces yang melebihi kuota untuk tingkat permintaan per koneksi.

Contoh kode dalam langkah ini menunjukkan cara memperkirakan dan mengonfigurasi penyatuan koneksi saat Anda menggunakan titik akhir VPC antarmuka.

Java

Anda dapat mengonfigurasi jumlah koneksi per kumpulan di driver Java. Untuk contoh lengkap koneksi driver klien Java, lihatMenggunakan driver klien Cassandra Java untuk mengakses Amazon Keyspaces secara terprogram.

Ketika driver klien dimulai, pertama koneksi kontrol dibuat untuk tugas-tugas administratif, seperti untuk skema dan perubahan topologi. Kemudian koneksi tambahan dibuat.

Dalam contoh berikut, konfigurasi driver ukuran kolam lokal ditentukan sebagai 2. Jika titik akhir VPC dibuat di 3 subnet dalam VPC, ini menghasilkan 7 in CloudWatch untuk titik akhir antarmuka, seperti yang ditunjukkan NewConnections pada rumus berikut.

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 } }

Jika jumlah koneksi aktif tidak sesuai dengan ukuran kumpulan yang dikonfigurasi (agregasi di seluruh subnet) +1 koneksi kontrol, ada sesuatu yang mencegah koneksi dibuat.

Node.js

Anda dapat mengonfigurasi jumlah koneksi per pool di driver Node.js. Untuk contoh lengkap koneksi driver klien Node.js, lihatMenggunakan driver klien Cassandra Node.js untuk mengakses Amazon Keyspaces secara terprogram.

Untuk contoh kode berikut, konfigurasi driver ukuran kolam lokal ditentukan sebagai 1. Jika titik akhir VPC dibuat di 4 subnet dalam VPC, ini menghasilkan 5 in CloudWatch untuk titik akhir antarmuka, seperti yang ditunjukkan NewConnections pada rumus berikut.

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 } });