Eksperimen ujian beban terkini yang mengkaji berapa banyak permintaan HTTP sesaat yang boleh dikendalikan oleh sebuah mesin tunggal telah mencetuskan perbincangan komuniti mengenai pilihan penyimpanan pangkalan data, pengumpulan sambungan, dan had sebenar perkakasan moden. Ujian ini menggunakan persediaan asas dengan PostgreSQL yang mengandungi lebih satu juta rekod dan mengukur prestasi merentasi profil beban yang berbeza.
Konfigurasi Pangkalan Data:
- PostgreSQL dengan 1+ juta rekod
- Hikari Connection Pool : 10 sambungan awal, boleh dikembangkan kepada 20
- DigitalOcean Block Storage luaran (bukan sistem fail tempatan)
- Had sambungan lalai PostgreSQL : ~100 sambungan
Konfigurasi Penyimpanan Pangkalan Data Menimbulkan Persoalan
Persediaan ujian menggunakan penyimpanan blok luaran untuk pangkalan data berbanding penyimpanan sistem fail tempatan, yang menarik perhatian ramai pembangun. Pilihan ini memberi kesan ketara kepada prestasi kerana penyimpanan blok memperkenalkan kependaman rangkaian untuk setiap operasi pangkalan data. Ahli komuniti menyatakan bahawa menggunakan apa-apa selain sistem fail tempatan untuk pangkalan data secara amnya tidak digalakkan untuk aplikasi yang kritikal prestasi.
Walau bagaimanapun, persekitaran awan sering memerlukan pertukaran ini. Penyimpanan blok menyediakan kebolehpercayaan dan kegigihan data apabila tika boleh gagal pada bila-bila masa, manakala penyimpanan tempatan menawarkan prestasi yang lebih baik tetapi berisiko kehilangan data. Ketegangan asas antara prestasi dan kebolehpercayaan ini membentuk banyak keputusan seni bina dalam aplikasi moden.
Had Kumpulan Sambungan Menjadi Jelas
Ujian mendedahkan kesesakan dalam pengendalian sambungan pangkalan data, dengan persediaan menggunakan Hikari Connection Pool yang dikonfigurasikan untuk 10 sambungan awal yang boleh dikembangkan kepada 20. Analisis komuniti mencadangkan saiz kumpulan sambungan yang agak kecil ini berkemungkinan mengekang prestasi sebelum mencapai had perkakasan sebenar.
Had sambungan lalai PostgreSQL sekitar 100 sambungan serentak sepatutnya menyediakan ruang yang mencukupi apabila dikumpulkan dengan betul. Perbincangan menyerlahkan bahawa dengan beribu-ribu permintaan berpotensi sesaat, saiz kumpulan sambungan menjadi kritikal untuk mengelakkan kesesakan buatan.
Perspektif Perkakasan Mencabar Andaian
Ujian menggambarkan mesin 8-CPU, 16GB RAM sebagai besar, yang menarik kritikan daripada pembangun yang biasa dengan keupayaan perkakasan moden. Mesin pengguna mewah hari ini boleh menyokong 512GB RAM, manakala sistem perusahaan berskala hingga 20+ terabait memori dan beratus-ratus teras.
Mesin besar hari ini mempunyai 20+ TB RAM dan beratus-ratus teras. Malah mesin pengguna mewah boleh mempunyai 512GB RAM!
Jurang perspektif ini mencadangkan bahawa banyak aplikasi boleh berskala jauh melebihi andaian semasa dengan hanya menaik taraf kepada mesin tunggal yang lebih berkuasa berbanding menggunakan seni bina teragih yang kompleks.
Konfigurasi Mesin Ujian:
- Mesin kecil: 4 teras CPU, memori 4 GiB
- Mesin sederhana: 4 vCPU, memori 4 GiB
- Mesin besar: 8 vCPU, memori 4 GiB
- Mesin "besar": 8 CPU, memori 16 GB
Had Metodologi Ujian
Pendekatan ujian beban menggunakan pengehadan kadar buatan dalam kod klien, yang dikenal pasti oleh beberapa ahli komuniti sebagai berpotensi memesongkan keputusan. Ujian sengaja mengehadkan permintaan sesaat berbanding mengukur daya pemprosesan maksimum yang mampan, menjadikannya sukar untuk menentukan had prestasi sebenar.
Selain itu, menjalankan kedua-dua aplikasi dan pangkalan data pada mesin yang sama mewujudkan pertandingan sumber yang tidak akan wujud dalam penggunaan pengeluaran biasa. Walaupun ini menguji sistem lengkap di bawah kekangan sumber, ia tidak mengasingkan prestasi pelayan aplikasi daripada prestasi pangkalan data.
Eksperimen menunjukkan bahawa mesin tunggal boleh mengendalikan beban yang besar, tetapi nombor khusus mungkin tidak mencerminkan konfigurasi yang dioptimumkan. Untuk banyak aplikasi yang kini menggunakan seni bina perkhidmatan mikro yang kompleks untuk mengendalikan hanya beberapa permintaan sesaat, malah keputusan konservatif ini mencadangkan penyelesaian yang lebih mudah boleh mencukupi.
Rujukan: Load Testing: how many HTTP requests/second can a Single Machine handle?