Topik ini menjelaskan cara melakukan uji stres untuk jumlah maksimum koneksi ke beberapa instance ApsaraDB for MongoDB replika dengan spesifikasi berbeda. Pengujian dilakukan dengan mengakses instance ApsaraDB for MongoDB dari sebuah Instance ECS (Elastic Compute Service).
Lingkungan pengujian
Buat sebuah Instance ECS dan sebuah instance ApsaraDB for MongoDB. Untuk informasi lebih lanjut, lihat Buat Instance Replika dan Buat Instance ECS.
Tabel berikut menjelaskan konfigurasi Instance ECS dan instance ApsaraDB for MongoDB yang digunakan dalam pengujian.
Item konfigurasi | ECS Instance | Instance ApsaraDB for MongoDB yang menggunakan disk cloud | Instance ApsaraDB for MongoDB yang menggunakan disk lokal |
Wilayah dan zona | Beijing Zona H | Beijing Zona H | Beijing Zona H |
Jenis jaringan | Virtual Private Cloud (VPC) | VPC | VPC |
Kategori instance | c6e, keluarga instans yang dioptimalkan untuk komputasi dengan performa ditingkatkan | Tujuan umum dan spesifikasi khusus | Tujuan umum dan spesifikasi khusus |
Tipe instance | ecs.c6e.2xlarge | Tiga tipe instance tersedia. Untuk informasi lebih lanjut, lihat Hasil pengujian. | Dua tipe instance tersedia. Untuk informasi lebih lanjut, lihat Hasil pengujian. |
Jenis penyimpanan | Enterprise SSD (ESSD) AutoPL disks | ESSDs | Local SSDs |
Gambar atau versi mesin | Alibaba Cloud Linux 3.2104 LTS 64-bit | 4.19.91-26.al7.x86_64 | 3.10.0-327.ali2017.alios7.x86_64 |
Versi kernel | N/A |
|
|
Instance ApsaraDB for MongoDB yang digunakan dalam pengujian mengadopsi arsitektur tiga node yang terdiri dari node primer, node sekunder, dan node tersembunyi.
Instance ECS dan instance ApsaraDB for MongoDB yang digunakan dalam pengujian ditempatkan di zona yang sama di wilayah yang sama, dengan rata-rata Round-Trip Time (RTT) sebesar 0,103 ms.
Alat pengujian
Alat Yahoo Cloud Serving Benchmark (YCSB) versi 0.17.0 open-source digunakan dalam pengujian.
CatatanYCSB adalah alat Java yang dapat digunakan untuk membandingkan performa berbagai jenis database. Untuk informasi lebih lanjut tentang cara menginstal dan menggunakan YCSB, lihat YCSB.
Program uji stres koneksi kustom digunakan dalam pengujian. Untuk informasi lebih lanjut, lihat Informasi Tambahan tentang Uji Stres untuk 96.000 Koneksi.
Metode pengujian
Tambahkan primary private IP address dari instance ECS ke daftar putih instance ApsaraDB for MongoDB. Untuk informasi lebih lanjut, lihat Ubah Daftar Putih untuk Instance.
CatatanAnda dapat masuk ke Konsol ECS dan melihat Primary Private IP Address dari instance ECS di bagian Configuration Information halaman Instance Details.
Hubungkan ke instance ECS. Untuk informasi lebih lanjut, lihat Buat dan Kelola Instance ECS Menggunakan Konsol ECS (Versi Ekspres).
Gunakan alat YCSB untuk memuat data uji.
// Jalankan perintah ycsb run. ./bin/ycsb.sh load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -p table=test -threads 8Modifikasi pengaturan berikut:
recordcount=1.000.000: jumlah total data yang dimuat ke instance ApsaraDB for MongoDB.mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin": string koneksi instance ApsaraDB for MongoDB. Dalam pengujian, akun database adalah test dan database adalah admin.CatatanAnda dapat memperoleh titik akhir di bagian Internal Connections - VPC halaman Database Connections di Konsol ApsaraDB for MongoDB.
threads 8: jumlah thread konkuren pada klien yang digunakan dalam pengujian.
Jalankan perintah berikut untuk melakukan uji stres performa:
./bin/ycsb.sh run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p operationcount=5000000 -p readproportion=50 -p updateproportion=50 -p requestdistribution=zipfian -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin&maxPoolSize=8000" -p table=test -threads 8000Modifikasi pengaturan berikut:
recordcount=1.000.000: jumlah total data yang dimuat ke instance ApsaraDB for MongoDB.operationcount=5.000.000: jumlah total operasi baca dan tulis.insertproportion=0: rasio operasi muat.readproportion=50: rasio operasi baca.updateproportion=50: rasio operasi pembaruan.mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin": string koneksi instance ApsaraDB for MongoDB. Dalam pengujian, akun database adalah test dan database adalah admin.CatatanAnda dapat memperoleh titik akhir di bagian Internal Connections - VPC halaman Database Connections di Konsol ApsaraDB for MongoDB.
Saat menjalankan perintah sebelumnya, Anda harus mengonfigurasi parameter
maxPoolSize. Jika tidak, jumlah koneksi default adalah 100. Dalam kasus ini, kesalahanMongoWaitQueueFullExceptionakan dikembalikan selama pengujian, dan jumlah maksimum koneksi yang diharapkan tidak dapat dicapai.
Lihat informasi pemantauan instance ApsaraDB for MongoDB yang digunakan dalam pengujian. Untuk informasi lebih lanjut, lihat Pemantauan Node (Sebelumnya Pemantauan Dasar).
Pada tab Pemantauan Node, pilih periode waktu yang sesuai dengan pengujian untuk melihat metrik CPU Utilization, Memory Usage, QPS, Connections, dan Connection Utilization.
Informasi tambahan tentang uji stres untuk 96.000 koneksi
Uji YCSB bergantung pada lingkungan Java. Ukuran heap memori maksimum mesin virtual Java (JVM) dibatasi. Jika pengujian menggunakan lebih dari 20.000 thread konkuren, kesalahan Cannot allocate memory akan dikembalikan, yang mengganggu pengujian.
Setelah Anda meningkatkan nilai parameter JAVA_OPTS, kesalahan tersebut masih terjadi. Untuk menyelesaikan masalah, gunakan program uji stres koneksi kustom. Program uji stres siklikal menghasilkan beberapa thread. Setiap thread menghasilkan MongoClient. Setelah MongoClient melakukan query, MongoClient mempertahankan koneksi selama periode waktu tanpa dilepaskan.
Sebuah mesin tunggal tempat klien uji stres berjalan memiliki jumlah port terbatas. Oleh karena itu, mesin tidak dapat memenuhi persyaratan uji stres koneksi (hingga 96.000 koneksi) dengan spesifikasi 32 core dan 128 GB memori. Dalam kasus ini, Anda harus menjalankan program uji stres yang sama di beberapa mesin.
Jalankan perintah Bash berikut untuk menanyakan rentang port saat ini dari mesin:
sysctl net.ipv4.ip_local_port_rangeContoh hasil:
net.ipv4.ip_local_port_range = 40000 65535Jalankan perintah berikut untuk memperluas rentang port mesin dan kemudian lakukan uji stres koneksi:
sudo sysctl -w net.ipv4.ip_local_port_range="10240 65535"Hasil pengujian
Instance yang menggunakan ESSD
Instance khusus dengan 4 core dan 8 GB memori
Jumlah maksimum koneksi: 8.000
QPS | Koneksi | Utilisasi koneksi | Utilisasi CPU | Penggunaan memori |
|
|
|
|
|
Jika Anda memilih granularitas koleksi pada level menit di tab Pemantauan Node, jumlah maksimum koneksi yang dicapai dalam granularitas tersebut tidak dapat ditampilkan di tab. Jumlah koneksi aktual mencapai 8.000. Hal ini dapat dikonfirmasi dengan mengonfigurasi pemantauan granular atau melihat sub-dokumen connections dalam output perintah serverStatus.
Instance khusus dengan 32 core dan 128 GB memori
Jumlah maksimum koneksi: 96.000
QPS | Koneksi | Utilisasi koneksi | Utilisasi CPU | Penggunaan memori |
|
|
|
|
|
Alat yang digunakan dalam pengujian ketika jumlah maksimum koneksi adalah 96.000 berbeda dari alat yang digunakan dalam pengujian ketika jumlah maksimum koneksi adalah 8.000 dan 16.000. Oleh karena itu, tangkapan layar pemantauan terkait QPS, utilisasi CPU, dan penggunaan memori memiliki perbedaan.
Instance tujuan umum dengan 8 core dan 32 GB memori
Jumlah maksimum koneksi: 16.000
QPS | Koneksi | Utilisasi koneksi | Utilisasi CPU | Penggunaan memori |
|
|
|
|
|
Instance yang menggunakan disk lokal
Instance tujuan umum dengan 16 core dan 64 GB memori
Jumlah maksimum koneksi: 32.000
QPS | Koneksi | Utilisasi koneksi | Utilisasi CPU | Penggunaan memori |
|
|
|
|
|
Jika Anda menentukan granularitas koleksi pada level menit di tab Pemantauan Node, jumlah koneksi pada beberapa titik waktu tidak dipantau untuk instance tujuan umum dengan 16 core dan 64 GB memori karena timeout perintah koleksi yang disebabkan oleh utilisasi CPU 100%. Dalam kasus ini, lembah level menit terjadi, dan jumlah koneksi aktual pada titik-titik waktu tersebut tetap 32.000.
Instance khusus dengan 2 core dan 16 GB memori
Jumlah maksimum koneksi: 8.000
QPS | Koneksi | Utilisasi koneksi | Utilisasi CPU | Penggunaan memori |
|
|
|
|
|
Ringkasan
ApsaraDB for MongoDB instance replika dengan spesifikasi dan jenis penyimpanan berbeda dapat mencapai jumlah maksimum koneksi sesuai dengan spesifikasinya.
Setelah jumlah maksimum koneksi tercapai, ApsaraDB for MongoDB menolak koneksi berikutnya. Permintaan memiliki latensi tinggi atau macet di aplikasi Anda karena kegagalan dalam menetapkan koneksi.
Jumlah koneksi konkuren yang lebih besar mengonsumsi lebih banyak sumber daya seperti CPU dan memori. Kami merekomendasikan agar Anda menyesuaikan jumlah koneksi ke instance Anda berdasarkan kebutuhan bisnis Anda.
























