Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Masalah Koneksi dengan Amazon DocumentDB
Identifikasi - Temukan masalahnya
Penyebab Umum
Masalah koneksi biasanya berasal dari tiga bidang utama:
Kelelahan kumpulan koneksi terjadi ketika aplikasi mencapai koneksi maksimum yang diizinkan ke Amazon DocumentDB, baik melalui batas kumpulan koneksi sisi klien atau batas instans sisi server. Kondisi ini menyebabkan penurunan kinerja aplikasi, batas waktu, dan potensi kegagalan karena permintaan koneksi baru diantrian atau ditolak.
Overload otentikasi terjadi ketika Amazon DocumentDB mengalami permintaan otentikasi bersamaan yang berlebihan, terutama saat memproses lebih dari 1.000 koneksi baru dalam waktu singkat. Selama pemeliharaan otentikasi, Amazon DocumentDB memegang kunci eksklusif pada peta sesi, menyebabkan upaya otentikasi berikutnya untuk mengantri hingga pemeliharaan selesai.
Masalah konfigurasi di Amazon DocumentDB sering kali berasal dari kesalahan konfigurasi dalam pengaturan jaringan, keamanan, dan klien. Ini termasuk item seperti pengaturan grup keamanan yang salah, konfigurasi VPC yang tidak tepat, atau masalah SSL/TLS sertifikat. Memahami konfigurasi yang tepat sangat penting untuk menjaga akses database yang aman dan andal.
Diagnosa - Temukan akar penyebabnya
Kolam koneksi
Kumpulan koneksi menginisialisasi saat membuat MongoClient instance. Setiap pool memelihara koneksi berdasarkan dua parameter utama:
minPoolSize - Jumlah minimum koneksi dipertahankan
maxPoolSize - Koneksi maksimum yang diizinkan
Ketika permintaan membutuhkan koneksi:
-
Pool memeriksa koneksi idle yang tersedia
-
Jika tidak ada dan ukuran kolam < maxPoolSize, itu menciptakan koneksi baru
-
Jika di maxPoolSize, permintaan memasuki antrian tunggu
-
Jika antrian penuh atau batas waktu tercapai, itu melempar MongoWaitQueueFullException
Perilaku antrian tunggu ditangani melalui parameter ini:
waitQueueTimeoutMS - Waktu tunggu maksimum untuk koneksi
waitQueueSize - Permintaan antrian maksimum
Berikut adalah contoh pendekatan bermasalah untuk menghubungkan ke Amazon DocumentDB di mana kumpulan baru dibuat setiap kali:
for(Request request : requests) { MongoClient client = MongoClients.create(settings); // Process request client.close(); }
CloudWatch Metrik penting untuk dipantau adalah:
-
DatabaseConnections- Jumlah koneksi (aktif dan idle) terbuka pada instance yang diambil pada frekuensi 1 menit. -
DatabaseConnectionsMax- Jumlah maksimum koneksi database terbuka (aktif dan idle) pada instance dalam periode 1 menit. -
DatabaseConnectionsLimit- Jumlah maksimum koneksi database bersamaan (aktif dan idle) diizinkan pada sebuah instance pada waktu tertentu. -
LowMemNumOperationsThrottled- Jumlah permintaan yang dibatasi karena memori yang tersedia rendah dalam periode 1 menit.
Lihat Kuota dan batas untuk batas per kelas instance.
Tanda-tanda peringatan umum masalah kumpulan koneksi di tingkat aplikasi meliputi:
-
Meningkatkan waktu akuisisi koneksi
-
Menumbuhkan ukuran antrian tunggu
-
Meningkatnya jumlah pengecualian batas waktu
Otentikasi kelebihan
Menghubungkan ke Amazon DocumentDB mengikuti alur yang mirip dengan di bawah ini:
Permintaan Koneksi → Jabat Tangan SSL → Otentikasi → Pembuatan Sesi → Siap Koneksi
Saat memproses >1.000 koneksi baru, permintaan koneksi tambahan akan memasuki antrian untuk Otentikasi setelah menyelesaikan jabat tangan SSL. Waktu koneksi rata-rata dari aplikasi Anda akan meningkat selama kejadian kelebihan beban ini.
CloudWatch Metrik penting untuk dipantau adalah:
-
DatabaseConnections- Jumlah koneksi (aktif dan idle) terbuka pada instance yang diambil pada frekuensi 1 menit. -
DatabaseConnectionsMax- Jumlah maksimum koneksi database terbuka (aktif dan idle) pada instance dalam periode 1 menit. -
DatabaseConnectionsLimit- Jumlah maksimum koneksi database bersamaan (aktif dan idle) diizinkan pada sebuah instance pada waktu tertentu.
Masalah konfigurasi
Masalah konfigurasi yang paling umum disebabkan ketika mencoba terhubung ke titik akhir cluster Amazon DocumentDB pribadi dari lingkungan tanpa akses ke lingkungan jaringan pribadi. Amazon DocumentDB adalah virtual private cloud (VPC)-satu-satunya dan saat ini tidak mendukung titik akhir publik. Anda tidak dapat terhubung langsung ke cluster Amazon DocumentDB dari laptop atau lingkungan pengembangan lokal di luar VPC Anda.
Ini akan terwujud dalam kesalahan seperti di bawah ini:
Error: couldn't connect to server... Failed to connect to... exception: connect failed connection attempt failed
Konfigurasi grup keamanan yang salah juga dapat menyebabkan kegagalan koneksi. Cluster Amazon DocumentDB mendengarkan koneksi pada port TCP 27017 secara default. Aplikasi Anda akan gagal jika mencoba menyambung ke port yang berbeda dari apa yang digunakan oleh cluster, atau jika aplikasi tidak tercakup dalam konfigurasi grup keamanan ingress untuk cluster.
Manajemen sertifikat yang salah juga dapat menyebabkan masalah koneksi. Secara default, enkripsi dalam transit diaktifkan untuk klaster Amazon DocumentDB yang baru dibuat. Ketika enkripsi dalam perjalanan diaktifkan, koneksi aman menggunakan TLS diperlukan untuk terhubung ke cluster menggunakan sertifikat global-bundle.pem. Jika Anda mencoba menggunakan sertifikat yang salah, Anda akan menerima kesalahan seperti:
unable to get local issuer certificate
Jika mencoba terhubung ke cluster dengan TLS diaktifkan tanpa menentukan parameter TLS, Anda akan menerima kesalahan seperti:
Server selection timed out after 30000 ms
Selesaikan - Perbaiki masalah
Kumpulan koneksi: Tinjau penyatuan koneksi dengan menerapkan atau menyesuaikan ukuran kolam agar sesuai dengan persyaratan beban kerja. Konfigurasi kolam yang optimal bergantung pada beban kerja dan persyaratan Anda. Anda harus menyimpan minPoolSize sedemikian rupa sehingga koneksi inti siap dan tersedia, dan cukup maxWaitTime pendek untuk gagal dengan cepat jika kolam telah habis.
Berikut adalah contoh cara menggunakan kembali satu kolam tanpa membuat yang baru setiap kali:
MongoClient client = MongoClients.create(settings); for(Request request : requests) { // Process request }
Overload otentikasi: Kelola otentikasi dengan menerapkan peningkatan koneksi bertahap dan membatasi koneksi baru menjadi 1.000 sekaligus. Gunakan penyatuan koneksi untuk menggunakan kembali koneksi yang diautentikasi secara efektif. Untuk menghindari kelebihan beban klaster Amazon DocumentDB dengan koneksi, terapkan strategi peningkatan koneksi.
public class ConnectionManager { private static final int BATCH_SIZE = 100; private static final int DELAY_MS = 1000; public void establishConnections(int totalRequired) { int established = 0; while (established < totalRequired) { int batch = Math.min(BATCH_SIZE, totalRequired - established); createConnections(batch); Thread.sleep(DELAY_MS); established += batch; } } }
Anda juga dapat mengonfigurasi pengaturan kumpulan koneksi untuk membatasi jumlah total koneksi yang diizinkan.
MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> { builder.maxSize(500) // Limit total connections .minSize(10) // Maintain base connections .maxConnectionLifeTime(3600000) // Rotate connections hourly }) .applyToServerSettings(builder -> { builder.heartbeatFrequency(10000) // Regular server checks }) .build();
Masalah konfigurasi: Pastikan aplikasi Anda memiliki akses ke VPC pribadi dan subnet tempat sumber daya Amazon DocumentDB Anda berada. Jika menggunakan VPC Peering, periksa panduan pengembang Memecahkan masalah koneksi peering VPC untuk informasi lebih lanjut. Anda juga dapat meninjau artikel Pusat Pengetahuan Bagaimana cara mengatasi masalah konektivitas dari internet ke instans Amazon EC2 dalam
Untuk konfigurasi grup keamanan, Anda harus menyertakan aturan ingress di grup keamanan Amazon DocumentDB untuk mengizinkan koneksi dari aplikasi Anda.
{ "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 27017, "ToPort": 27017, "SourceSecurityGroupId": "<application-security-group>", "Description": "DocumentDB access from application tier" } ], "SecurityGroupEgress": [ { "IpProtocol": "-1", "FromPort": -1, "ToPort": -1, "CidrIp": "0.0.0.0/0" } ] }
Jika cluster dikonfigurasi dengan enkripsi TLS, unduh sertifikat TLS untuk Amazon DocumentDB Amazon bernama global-bundle.pem dan gunakan saat menghubungkan ke cluster.
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
Solusi Jangka Panjang
Penskalaan instans mungkin diperlukan melalui peningkatan ke kelas instance yang lebih besar atau menambahkan replika baca untuk mendistribusikan beban koneksi. Implementasi load balancing yang tepat memastikan pemanfaatan sumber daya yang optimal di seluruh cluster.
Perubahan aplikasi harus fokus pada penerapan penanganan koneksi yang kuat, pemantauan komprehensif, dan kepatuhan terhadap praktik terbaik penyatuan koneksi. Ini termasuk penanganan kesalahan yang tepat dan manajemen siklus hidup koneksi.
Perbaikan arsitektur mungkin melibatkan adopsi Amazon DocumentDB Tanpa Server untuk beban kerja variabel, menerapkan logika coba ulang yang canggih, dan merancang untuk toleransi kesalahan. Pertimbangkan restrukturisasi arsitektur aplikasi untuk menangani manajemen koneksi dengan lebih baik.
Praktik Terbaik
Kolam koneksi
Melalui manajemen dan pemantauan kumpulan koneksi yang tepat, aplikasi dapat mempertahankan konektivitas database yang stabil sekaligus mencegah skenario kelelahan yang dapat memengaruhi keandalan dan kinerja sistem. Konfigurasikan batas waktu yang sesuai dan ukuran kumpulan Anda berdasarkan karakteristik beban kerja Anda.
Contoh pengaturan kolam koneksi
MongoClientSettings settings = MongoClientSettings.builder() .applyToConnectionPoolSettings(builder -> builder.maxSize(10)) .applyToConnectionPoolSettings(builder -> builder.maxWaitQueueSize(2)) .applyToConnectionPoolSettings(builder -> builder.maxConnectionIdleTime(10, TimeUnit.MINUTES)) .build();
Untuk informasi lebih lanjut, lihat: https://aws.amazon.com/blogs/database/ - -compatibility-part-1-client-configuration/ building-resilient-applications-with amazon-documentdb-with-mongodb
Otentikasi kelebihan
Selalu terapkan penyatuan koneksi dengan nilai yang sesuai untuk parameter berdasarkan beban kerja Anda. Gunakan teknik pembentukan koneksi bertahap dan pertahankan koneksi persisten, jika memungkinkan. Menerapkan pembersihan koneksi yang tepat untuk memastikan tidak ada sumber daya idle yang terbuang sia-sia.
Masalah konfigurasi
Pastikan Anda telah mengonfigurasi perutean yang sesuai dari aplikasi Anda ke sumber daya Amazon DocumentDB. Memanfaatkan TLS untuk enkripsi dalam perjalanan dan menerapkan akses hak istimewa paling sedikit. Verifikasi kredensyal Amazon DocumentDB Anda dan validasi nilai string koneksi.