Penerapan dan Pemeliharaan / Benchmark Kinerja
Dokumen ini terutama menjelaskan cara melakukan benchmark kinerja pada DataFlux Func.
1. Pendahuluan
Semua hasil contoh dalam dokumen ini diperoleh dari pengujian pada lingkungan perangkat keras berikut:
| Keterangan | |
|---|---|
| Komputer | HP ProBook Laptop |
| CPU | AMD Ryzen 5 7530U with Radeon Graphics / 4.5 GHz |
| Memori | 32 GB / 3200 MHz (0.3 ns) |
| Sistem Operasi | Ubuntu 22.04.5 LTS |
2. Paket Pengujian Benchmark
Unduh Benchmark.zip, lalu impor ke DataFlux Func.
Paket pengujian Benchmark berisi konten berikut:
| Konten | Keterangan |
|---|---|
Kumpulan Skrip benchmark |
|
Fungsi benchmark__main.hello_world |
Fungsi kosong yang langsung mengembalikan "ok", digunakan untuk pengujian konkurensi |
Fungsi benchmark__main.json_dump |
Melakukan serialisasi / deserialisasi JSON, digunakan untuk pengujian kinerja |
Fungsi benchmark__main.calc_pi |
Menghitung nilai pi, digunakan untuk pengujian kinerja |
API Sinkron benchmark-hello-world |
Digunakan untuk pengujian konkurensi |
Tugas Terjadwal benchmark-hello-world |
Digunakan untuk menguji kinerja penjadwalan tugas |
Tugas Terjadwal benchmark-compute-pi |
Digunakan untuk menguji kinerja komputasi (menghitung nilai pi) |
Tugas Terjadwal benchmark-json-dump-and-load |
Digunakan untuk menguji kinerja komputasi (serialisasi / deserialisasi JSON) |
3. Menjalankan Pengujian
Setelah mengimpor paket pengujian Benchmark, karena Tugas Terjadwal berjalan otomatis, tunggu beberapa menit, lalu hasilnya dapat dilihat dari catatan tugas.
Sedangkan pengujian kinerja konkurensi pada DataFlux Func perlu dilakukan dengan bantuan alat lain.
3.1 Menguji Kinerja Penjadwalan Tugas
Setelah mengimpor paket pengujian Benchmark, tunggu beberapa menit, lalu hasil dapat dilihat pada catatan tugas "Hello, World" di "Tugas Terjadwal".
Umumnya, durasi setiap tugas seharusnya tidak lebih dari 10 milidetik.
3.2 Menguji Kinerja Komputasi
Setelah mengimpor paket pengujian Benchmark, tunggu beberapa menit, lalu hasil dapat dilihat pada catatan tugas "Compute pi" dan "JSON dump and load" di "Tugas Terjadwal".
Berdasarkan lingkungan pengujian pada bagian "Pendahuluan", setiap tugas memakan waktu sekitar 1 detik:
- Menghitung nilai pi ("Compute pi")
- Serialisasi / deserialisasi JSON ("JSON dump and load")
3.3 Menguji Kinerja Konkurensi API Fungsi
Saat menguji kinerja konkurensi, Anda dapat menggunakan alat ab (ApacheBench) untuk melakukan pengujian.
Jika ab belum diinstal, Anda dapat menginstalnya dengan perintah berikut:
| Bash | |
|---|---|
1 | |
| Bash | |
|---|---|
1 | |
Gunakan ab untuk menguji pemanggilan "Hello, World" dalam paket pengujian, perintahnya sebagai berikut:
| Bash | |
|---|---|
1 | |
| Bash | |
|---|---|
1 | |
Berdasarkan lingkungan pengujian pada bagian "Pendahuluan", konkurensi fungsi kosong sekitar 1000 (Requests per second):
| Keluaran pengujian ab | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | |
4. Penyebab yang Mempengaruhi Kinerja
Karena isi eksekusi aktual tugas ditentukan oleh Skrip yang benar-benar dipanggil, jika eksekusi tugas memakan waktu lama, Anda dapat memeriksa apakah kode memiliki masalah berikut:
4.1 Banyak print(...)
Untuk memudahkan debugging, seseorang mungkin langsung mengeluarkan semua data dalam DB dan data yang dikembalikan oleh API melalui print(...) dalam Skrip.
Karena DataFlux Func secara otomatis mencatat konten print(...) saat tugas dieksekusi, operasi semacam ini akan menyebabkan penurunan kinerja yang sangat besar.
Disarankan untuk hanya mempertahankan output print(...) yang diperlukan setelah kode digunakan di produksi, dan hindari output teks dalam jumlah besar.
4.2 Respons Sistem Eksternal Lambat
Ketika melakukan kueri ke database eksternal, memanggil antarmuka API (termasuk menjalankan kueri DQL, dll.) dalam Skrip, jika terjadi kemacetan jaringan, atau bahkan hanya karena sistem pihak lain merespons lambat, hal ini juga akan menyebabkan tugas memakan waktu lama untuk dieksekusi.
Hal ini pada dasarnya tidak ada hubungannya dengan DataFlux Func; Anda sebaiknya menghubungi penanggung jawab sistem eksternal tersebut untuk meningkatkan kecepatan respons.
Berikut adalah contoh kode sederhana untuk menguji waktu pemrosesan:
| Python | |
|---|---|
1 2 3 4 5 6 7 | |