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 diantri atau ditolak.
Overload otentikasi terjadi ketika Amazon DocumentDB mengalami permintaan otentikasi bersamaan yang berlebihan, terutama saat memproses lebih dari 1.000 koneksi baru dalam jangka waktu singkat. Selama pemeliharaan otentikasi, Amazon DocumentDB memegang kunci eksklusif pada peta sesi, menyebabkan upaya otentikasi berikutnya mengantri hingga pemeliharaan selesai.
Masalah konfigurasi di Amazon DocumentDB sering 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.
Diagnosis - Temukan akar penyebab
Kolam koneksi
Kumpulan koneksi diinisialisasi saat membuat MongoClient instance. Setiap kumpulan mempertahankan koneksi berdasarkan dua parameter utama:
min PoolSize - Jumlah minimum koneksi yang dipertahankan
max PoolSize - Koneksi maksimum yang diizinkan
Ketika permintaan membutuhkan koneksi:
-
Kumpulan memeriksa koneksi idle yang tersedia
-
Jika tidak ada dan ukuran kolam < maksPoolSize, itu membuat koneksi baru
-
Jika maksimalPoolSize, permintaan memasuki antrian tunggu
-
Jika antrian penuh atau batas waktu tercapai, itu melempar MongoWaitQueueFullException
Perilaku antrian tunggu ditangani melalui parameter ini:
tunggu QueueTimeout MS - Waktu tunggu maksimum untuk koneksi
wait QueueSize - 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) yang diizinkan pada sebuah instance pada waktu tertentu. -
LowMemNumOperationsThrottled- Jumlah permintaan yang dibatasi karena memori yang tersedia rendah dalam periode 1 menit.
Untuk kuota per kelas instance, lihatKuota instans.
Tanda-tanda peringatan umum masalah kumpulan koneksi di tingkat aplikasi meliputi:
-
Meningkatkan waktu akuisisi koneksi
-
Meningkatnya ukuran antrian tunggu
-
Meningkatnya jumlah pengecualian batas waktu
Otentikasi kelebihan beban
Menghubungkan ke Amazon DocumentDB mengikuti alur yang mirip dengan di bawah ini:
Permintaan Koneksi → Jabat Tangan SSL → Otentikasi → Pembuatan Sesi → Koneksi Siap
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 peristiwa 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) yang diizinkan pada sebuah instance pada waktu tertentu.
Masalah konfigurasi
Masalah konfigurasi yang paling umum disebabkan saat mencoba menyambung 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 bermanifestasi 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 yang digunakan cluster, atau jika aplikasi tidak tercakup dalam konfigurasi grup keamanan masuk 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 transit 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 menyambung 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 pengumpulan koneksi dengan menerapkan atau menyesuaikan ukuran kumpulan agar sesuai dengan persyaratan beban kerja. Konfigurasi kumpulan yang optimal tergantung pada beban kerja dan persyaratan Anda. Anda harus menjaga minimum se PoolSize demikian rupa sehingga koneksi inti siap dan tersedia, dan maksimum cukup WaitTime pendek untuk gagal dengan cepat jika kolam telah habis.
Berikut adalah contoh cara menggunakan kembali satu kumpulan 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 hingga 1.000 pada satu waktu. Gunakan pengumpulan koneksi untuk menggunakan kembali koneksi yang diautentikasi secara efektif. Untuk menghindari kelebihan beban cluster 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 selengkapnya. Anda juga dapat meninjau artikel Pusat Penget ahuan Bagaimana cara memecahkan masalah konektivitas dari internet ke instans Amazon EC2 dalam VPC saya?
Untuk konfigurasi grup keamanan, Anda harus menyertakan aturan masuk dalam 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 Amazon DocumentDB bernama global-bundle.pem dan gunakan saat menghubungkan ke cluster.
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
Long-term Solusi
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 pengumpulan koneksi. Ini termasuk penanganan kesalahan yang tepat dan manajemen siklus hidup koneksi.
Peningkatan arsitektur mungkin melibatkan mengadopsi Amazon DocumentDB Serverless untuk beban kerja variabel, menerapkan logika coba ulang yang canggih, dan merancang untuk toleransi kesalahan. Pertimbangkan untuk merestrukturisasi 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 sambil mencegah skenario kelelahan yang dapat memengaruhi keandalan dan kinerja sistem. Konfigurasikan batas waktu yang sesuai dan ukuran kumpulan 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 selengkapnya, lihat Membangun aplikasi tangguh dengan Amazon DocumentDB — Bagian 1: Konfigur
Otentikasi kelebihan beban
Selalu terapkan pengumpulan koneksi dengan nilai yang sesuai untuk parameter berdasarkan beban kerja Anda. Gunakan teknik pembentukan koneksi bertahap dan pertahankan koneksi yang persisten, jika memungkinkan. Terapkan 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. Manfaatkan TLS untuk enkripsi dalam transit dan terapkan akses hak istimewa paling sedikit. Verifikasi kredentif Amazon DocumentDB Anda dan validasi nilai string koneksi.