Optimalkan koneksi driver klien untuk lingkungan tanpa server - 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.

Optimalkan koneksi driver klien untuk lingkungan tanpa server

Untuk berkomunikasi dengan Amazon Keyspaces, Anda dapat menggunakan driver klien Apache Cassandra yang ada pilihan Anda. Karena Amazon Keyspaces adalah layanan tanpa server, kami menyarankan Anda mengoptimalkan konfigurasi koneksi driver klien Anda untuk kebutuhan throughput aplikasi Anda. Topik ini memperkenalkan praktik terbaik termasuk cara menghitung berapa banyak koneksi yang dibutuhkan aplikasi Anda, serta pemantauan dan penanganan kesalahan koneksi.

Cara kerja koneksi di Amazon Keyspaces

Bagian ini memberikan gambaran umum tentang cara kerja koneksi driver klien di Amazon Keyspaces. Karena kesalahan konfigurasi driver klien Cassandra dapat mengakibatkan peristiwa PerConnectionRequestExceeded di Amazon Keyspaces, mengonfigurasi jumlah koneksi yang tepat dalam konfigurasi driver klien diperlukan untuk menghindari kesalahan koneksi ini dan serupa.

Saat menyambungkan ke Amazon Keyspaces, driver memerlukan titik akhir seed untuk membuat koneksi awal. Amazon Keyspaces menggunakan DNS untuk merutekan koneksi awal ke salah satu dari banyak titik akhir yang tersedia. Titik akhir dilampirkan ke penyeimbang beban jaringan yang pada gilirannya membuat koneksi ke salah satu penangan permintaan di armada. Setelah koneksi awal dibuat, driver klien mengumpulkan informasi tentang semua titik akhir yang tersedia dari tabelsystem.peers. Dengan informasi ini, driver klien dapat membuat koneksi tambahan ke titik akhir yang terdaftar. Jumlah koneksi yang dapat dibuat oleh driver klien dibatasi oleh jumlah koneksi lokal yang ditentukan dalam pengaturan driver klien. Secara default, sebagian besar driver klien membuat satu koneksi per titik akhir dan membuat kumpulan koneksi ke Cassandra dan memuat kueri keseimbangan melalui kumpulan koneksi tersebut. Meskipun beberapa koneksi dapat dibuat ke titik akhir yang sama, di belakang penyeimbang beban jaringan mereka mungkin terhubung ke banyak penangan permintaan yang berbeda. Saat menghubungkan melalui titik akhir publik, membuat satu koneksi ke masing-masing dari sembilan titik akhir yang tercantum dalam system.peers tabel menghasilkan sembilan koneksi ke penangan permintaan yang berbeda.

Diagram yang menunjukkan bagaimana koneksi yang dibuat oleh driver pertama mencapai titik akhir layanan Amazon Keyspaces, kemudian berlanjut ke penyeimbang beban, dan setelah otentikasi dan otorisasi CQL permintaan mencapai lapisan penyimpanan.

Cara mengonfigurasi koneksi di Amazon Keyspaces

Amazon Keyspaces mendukung hingga 3.000 CQL kueri per TCP koneksi per detik. Karena tidak ada batasan jumlah koneksi yang dapat dibuat oleh pengemudi, kami sarankan untuk menargetkan hanya 500 CQL permintaan per detik per koneksi untuk memungkinkan overhead, ledakan lalu lintas, dan penyeimbangan beban yang lebih baik. Ikuti langkah-langkah ini untuk memastikan bahwa koneksi driver Anda dikonfigurasi dengan benar untuk kebutuhan aplikasi Anda.

Tingkatkan jumlah koneksi per alamat IP yang dipertahankan driver Anda di kolam koneksinya.

  • Sebagian besar driver Cassandra membuat kumpulan koneksi ke Cassandra dan memuat kueri keseimbangan di atas kumpulan koneksi itu. Perilaku default sebagian besar driver adalah membuat satu koneksi ke setiap titik akhir. Amazon Keyspaces mengekspos sembilan alamat IP peer ke driver, jadi berdasarkan perilaku default sebagian besar driver, ini menghasilkan 9 koneksi. Amazon Keyspaces mendukung hingga 3.000 CQL kueri per TCP koneksi per detik, oleh karena itu, throughput CQL kueri maksimum driver yang menggunakan pengaturan default adalah CQL 27.000 kueri per detik. Jika Anda menggunakan pengaturan default driver, satu koneksi mungkin harus memproses lebih dari throughput CQL kueri maksimum 3.000 CQL kueri per detik. Ini bisa mengakibatkan PerConnectionRequestExceeded peristiwa.

  • Untuk menghindari PerConnectionRequestExceeded kejadian, Anda harus mengonfigurasi driver untuk membuat koneksi tambahan per titik akhir untuk mendistribusikan throughput.

  • Sebagai praktik terbaik di Amazon Keyspaces, asumsikan bahwa setiap koneksi dapat mendukung 500 CQL kueri per detik.

  • Itu berarti bahwa untuk aplikasi produksi yang perlu mendukung sekitar 27.000 CQL kueri per detik yang didistribusikan di sembilan titik akhir yang tersedia, Anda harus mengonfigurasi enam koneksi per titik akhir. Ini memastikan bahwa setiap koneksi memproses tidak lebih dari 500 permintaan per detik.

Hitung jumlah koneksi per alamat IP yang perlu Anda konfigurasikan untuk driver Anda berdasarkan kebutuhan aplikasi Anda.

Untuk menentukan jumlah koneksi yang perlu Anda konfigurasikan per titik akhir untuk aplikasi Anda, pertimbangkan contoh berikut. Anda memiliki aplikasi yang perlu mendukung 20.000 CQL kueri per detik yang terdiri dari 10.000INSERT, 5.000SELECT, dan 5.000 DELETE operasi. Aplikasi Java berjalan pada tiga instance di Amazon Elastic Container Service (AmazonECS) di mana setiap instance menetapkan satu sesi ke Amazon Keyspaces. Perhitungan yang dapat Anda gunakan untuk memperkirakan berapa banyak koneksi yang perlu Anda konfigurasi untuk driver Anda menggunakan input berikut.

  1. Jumlah permintaan per detik yang perlu didukung aplikasi Anda.

  2. Jumlah instance yang tersedia dengan satu dikurangi untuk memperhitungkan pemeliharaan atau kegagalan.

  3. Jumlah titik akhir yang tersedia. Jika Anda terhubung melalui titik akhir publik, Anda memiliki sembilan titik akhir yang tersedia. Jika Anda menggunakan VPC titik akhir, Anda memiliki antara dua dan lima titik akhir yang tersedia, tergantung pada Wilayah.

  4. Gunakan 500 CQL kueri per detik per koneksi sebagai praktik terbaik untuk Amazon Keyspaces.

  5. Bulatkan hasilnya.

Untuk contoh ini, rumusnya terlihat seperti ini.

20,000 CQL queries / (3 instances - 1 failure) / 9 public endpoints / 500 CQL queries per second = ROUND(2.22) = 3

Berdasarkan perhitungan ini, Anda perlu menentukan tiga koneksi lokal per titik akhir dalam konfigurasi driver. Untuk koneksi jarak jauh, konfigurasikan hanya satu koneksi per titik akhir.

Cara mengonfigurasi kebijakan coba lagi untuk koneksi di Amazon Keyspaces

Saat mengonfigurasi kebijakan coba lagi untuk koneksi ke Amazon Keyspaces, sebaiknya Anda menerapkan kebijakan coba ulang Amazon Keyspaces. AmazonKeyspacesExponentialRetryPolicy Kebijakan coba lagi ini lebih cocok untuk mencoba lagi di berbagai koneksi ke Amazon Keyspaces daripada driver. DefaultRetryPolicy

DenganAmazonKeyspacesExponentialRetryPolicy, Anda dapat mengonfigurasi jumlah upaya coba lagi untuk koneksi yang memenuhi kebutuhan Anda. Secara default, jumlah percobaan ulang untuk AmazonKeyspacesExponentialRetryPolicy diatur ke 3.

Keuntungan tambahan adalah kebijakan coba ulang Amazon Keyspaces meneruskan kembali pengecualian asli yang dikembalikan oleh layanan, yang menunjukkan mengapa upaya permintaan gagal. Kebijakan coba ulang default hanya menampilkan generikNoHostAvailableException, yang mungkin menyembunyikan wawasan tentang kegagalan permintaan.

Untuk mengonfigurasi kebijakan coba ulang permintaan menggunakanAmazonKeyspacesExponentialRetryPolicy, sebaiknya Anda mengonfigurasi sejumlah kecil percobaan ulang, dan menangani pengecualian yang dikembalikan dalam kode aplikasi Anda.

Untuk contoh kode yang menerapkan kebijakan coba lagi, lihat kebijakan coba ulang Amazon Keyspaces di Github.

Cara mengonfigurasi koneksi melalui VPC titik akhir di Amazon Keyspaces

Saat menghubungkan melalui VPC titik akhir pribadi, kemungkinan besar Anda memiliki 3 titik akhir yang tersedia. Jumlah VPC titik akhir dapat berbeda per Wilayah, berdasarkan jumlah Availability Zone, dan jumlah subnet dalam yang ditetapkan. VPC Wilayah AS Timur (Virginia N.) memiliki lima Availability Zone dan Anda dapat memiliki hingga lima titik akhir Amazon Keyspaces. Wilayah AS Barat (California Utara) memiliki dua Availability Zone dan Anda dapat memiliki hingga dua titik akhir Amazon Keyspaces. Jumlah titik akhir tidak memengaruhi skala, tetapi meningkatkan jumlah koneksi yang perlu Anda buat dalam konfigurasi driver. Pertimbangkan contoh berikut. Aplikasi Anda perlu mendukung 20.000 CQL kueri dan berjalan pada tiga instance di Amazon di ECS mana setiap instans menetapkan satu sesi ke Amazon Keyspaces. Satu-satunya perbedaan adalah berapa banyak titik akhir yang tersedia di berbagai Wilayah AWS titik.

Koneksi yang diperlukan di Wilayah AS Timur (Virginia N.):

20,000 CQL queries / (3 instances - 1 failure) / 5 private VPC endpoints / 500 CQL queries per second = 4 local connections

Koneksi yang diperlukan di Wilayah AS Barat (California Utara):

20,000 CQL queries / (3 instances - 1 failure) / 2 private VPC endpoints / 500 CQL queries per second = 10 local connections
penting

Saat menggunakan VPC titik akhir pribadi, izin tambahan diperlukan untuk Amazon Keyspaces untuk menemukan VPC titik akhir yang tersedia secara dinamis dan mengisi tabel. system.peers Untuk informasi selengkapnya, lihat Mengisi entri system.peers tabel dengan informasi titik akhir VPC antarmuka.

Saat mengakses Amazon Keyspaces melalui titik akhir VPC pribadi menggunakan yang Akun AWS berbeda, kemungkinan Anda hanya melihat satu titik akhir Amazon Keyspaces. Sekali lagi ini tidak memengaruhi skala kemungkinan throughput ke Amazon Keyspaces, tetapi mungkin mengharuskan Anda untuk meningkatkan jumlah koneksi dalam konfigurasi driver Anda. Contoh ini menunjukkan perhitungan yang sama untuk satu titik akhir yang tersedia.

20,000 CQL queries / (3 instances - 1 failure) / 1 private VPC endpoints / 500 CQL queries per second = 20 local connections

Untuk mempelajari lebih lanjut tentang akses lintas akun ke Amazon Keyspaces menggunakan VPC shared, lihat. Konfigurasikan akses lintas akun ke Amazon Keyspaces VPC menggunakan endpoint dalam shared VPC

Cara memantau koneksi di Amazon Keyspaces

Untuk membantu mengidentifikasi jumlah titik akhir yang terhubung dengan aplikasi Anda, Anda dapat mencatat jumlah rekan yang ditemukan dalam system.peers tabel. Contoh berikut adalah contoh kode Java yang mencetak jumlah rekan setelah koneksi dibuat.

ResultSet result = session.execute(new SimpleStatement("SELECT * FROM system.peers")); logger.info("number of Amazon Keyspaces endpoints:" + result.all().stream().count());
catatan

CQLKonsol atau AWS konsol tidak digunakan dalam a VPC dan oleh karena itu menggunakan titik akhir publik. Akibatnya, menjalankan system.peers kueri dari aplikasi yang terletak di luar VPCE sering menghasilkan 9 rekan. Mungkin juga bermanfaat untuk mencetak alamat IP masing-masing rekan.

Anda juga dapat mengamati jumlah peer saat menggunakan VPC titik akhir dengan menyiapkan CloudWatch metrik VPCE Amazon. Di CloudWatch, Anda dapat melihat jumlah koneksi yang dibuat ke VPC titik akhir. Driver Cassandra membuat koneksi untuk setiap titik akhir untuk mengirim CQL kueri dan koneksi kontrol untuk mengumpulkan informasi tabel sistem. Gambar di bawah ini menunjukkan CloudWatch metrik VPC titik akhir setelah tersambung ke Amazon Keyspaces dengan 1 koneksi yang dikonfigurasi dalam pengaturan driver. Metrik menunjukkan enam koneksi aktif yang terdiri dari satu koneksi kontrol dan lima koneksi (1 per titik akhir di seluruh Availability Zones).

Tangkapan layar yang menampilkan metrik di dasbor Cloudwatch untuk koneksi melalui titik akhir. VPC Metrik yang digunakan adalah ActiveConnections dan BytesProcessed.

Untuk memulai memantau jumlah koneksi menggunakan CloudWatch grafik, Anda dapat menerapkan AWS CloudFormation template ini yang tersedia GitHub di repositori template Amazon Keyspaces.

Cara menangani kesalahan koneksi di Amazon Keyspaces

Saat melebihi 3.000 permintaan per kuota koneksi, Amazon Keyspaces mengembalikan PerConnectionRequestExceeded acara dan driver Cassandra menerima atau pengecualian. WriteTimeout ReadTimeout Anda harus mencoba lagi pengecualian ini dengan dukungan eksponensial dalam kebijakan percobaan ulang Cassandra Anda atau dalam aplikasi Anda. Anda harus memberikan backoff eksponensial untuk menghindari pengiriman permintaan tambahan.

Kebijakan coba ulang default mencoba try next host dalam paket kueri. Karena Amazon Keyspaces mungkin memiliki satu hingga tiga titik akhir yang tersedia saat menghubungkan ke VPC titik akhir, Anda juga dapat melihat tambahan WriteTimeout dan ReadTimeout pengecualian NoHostAvailableException di log aplikasi Anda. Anda dapat menggunakan kebijakan coba ulang yang disediakan Amazon Keyspaces, yang mencoba lagi pada titik akhir yang sama tetapi di koneksi yang berbeda.

Anda dapat menemukan contoh kebijakan percobaan ulang eksponensial untuk Java di repositori contoh GitHub kode Java Amazon Keyspaces. Anda dapat menemukan contoh bahasa tambahan di Github di repositori contoh kode Amazon Keyspaces.