Cara Stress Test Website Dengan k6 Secara Selamat

Home » Server Management & DevOps
10:00 AM By Han
Sharing is Caring

Cara stress test website dengan k6 perlu dimulakan secara terkawal, bukan terus menghantar ribuan permintaan ke server production. Ujian yang baik mempunyai objektif, had beban, threshold kejayaan dan pelan berhenti apabila ralat meningkat. Dengan pendekatan ini, anda boleh mengenal pasti had kapasiti website tanpa mencetuskan downtime yang tidak perlu.

Sebelum menjalankan skrip, baca panduan utama stress test web dan ketahanan website. Artikel ini memfokuskan penggunaan Grafana k6 untuk menguji halaman, API atau aliran ringkas pada sistem yang anda miliki atau telah mendapat kebenaran bertulis untuk diuji.

Jangan menguji laman pihak lain tanpa kebenaran. Beban tinggi boleh mengganggu operasi, menambah kos cloud, memenuhi log dan mencetuskan perlindungan WAF. Mulakan pada staging yang menyerupai production, kemudian gunakan ujian production berskala kecil hanya apabila pasukan teknikal bersedia memantau dan menghentikannya.

Persediaan Sebelum Cara Stress Test Website Dengan k6

cara stress test website dengan k6
Panduan menjalankan ujian beban k6 secara terkawal dan membaca hasilnya.

Tentukan dahulu perkara yang mahu dibuktikan. Contohnya, halaman utama perlu kekal responsif pada 50 pengguna serentak, API carian perlu memberi respons dalam tempoh tertentu atau checkout perlu mengekalkan kadar ralat rendah semasa kempen. Objektif yang jelas membantu anda memilih senario, metrik dan tempoh ujian.

Sediakan baseline sebelum menambah beban. Catat penggunaan CPU, RAM, disk I/O, sambungan database, cache hit ratio, masa respons dan kadar ralat ketika trafik biasa. Tanpa baseline, sukar untuk menentukan sama ada perubahan selepas ujian benar-benar berpunca daripada beban atau masalah sedia ada.

  • Dapatkan kebenaran dan tetapkan skop URL yang boleh diuji.
  • Gunakan akaun, data dan kaedah pembayaran ujian.
  • Maklumkan pasukan hosting, aplikasi dan database.
  • Tetapkan had kos, tempoh dan bilangan virtual users.
  • Sediakan dashboard pemantauan serta arahan menghentikan ujian.
  • Pastikan backup dan pelan pemulihan telah diuji.

1. Pasang k6 dan Sahkan Pemasangan

Ikuti kaedah pemasangan untuk sistem operasi anda dalam dokumentasi rasmi Grafana k6. Selepas pemasangan, buka terminal dan semak versi dengan arahan berikut:

k6 version

Simpan semua skrip dalam repositori atau folder projek. Gunakan pemboleh ubah persekitaran untuk URL, token dan tetapan yang berubah antara staging dengan production. Jangan menulis kata laluan sebenar terus di dalam skrip yang mungkin dikongsi atau dimasukkan ke Git.

2. Tulis Skrip Ujian Asas

Mulakan dengan satu permintaan dan satu pemeriksaan status. Skrip asas berikut menguji halaman utama, memastikan respons HTTP 200 dan memberi masa rehat supaya corak trafik lebih realistik:

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  vus: 1,
  duration: '30s',
};

export default function () {
  const res = http.get(__ENV.BASE_URL);
  check(res, {
    'status ialah 200': (r) => r.status === 200,
  });
  sleep(1);
}

Jalankan ujian smoke terlebih dahulu menggunakan satu virtual user. Tujuannya ialah mengesan URL salah, redirect tidak dijangka, sijil SSL bermasalah atau skrip yang menghasilkan data berulang. Jangan menaikkan beban selagi ujian kecil masih gagal.

3. Naikkan Virtual Users Secara Berperingkat

Cara stress test website yang selamat ialah menggunakan peringkat ramp-up, tempoh stabil dan ramp-down. Peningkatan berperingkat menunjukkan titik apabila masa respons mula merosot. Ia juga memberi peluang kepada pasukan untuk menghentikan ujian sebelum server kehabisan sumber.

export const options = {
  stages: [
    { duration: '2m', target: 10 },
    { duration: '5m', target: 10 },
    { duration: '2m', target: 25 },
    { duration: '5m', target: 25 },
    { duration: '2m', target: 0 },
  ],
};

Virtual user bukan semestinya sama dengan seorang pelawat sebenar. Seorang pengguna mungkin menunggu, membaca atau melakukan beberapa permintaan dalam satu sesi. Pilih model berdasarkan data analytics, log aplikasi dan kadar transaksi sebenar, bukannya angka rawak yang kelihatan besar.

4. Gunakan Checks dan Thresholds

Checks mengesahkan keadaan pada setiap respons, manakala thresholds menentukan sama ada keseluruhan ujian lulus atau gagal. Contohnya, anda boleh menetapkan kadar ralat HTTP di bawah satu peratus dan 95 peratus permintaan selesai di bawah masa sasaran.

export const options = {
  thresholds: {
    http_req_failed: ['rate<0.01'],
    http_req_duration: ['p(95)<800'],
    checks: ['rate>0.99'],
  },
};

Nilai contoh di atas bukan standard untuk semua website. Tetapkan sasaran mengikut fungsi, pengalaman pengguna dan service level objective anda. Rujuk penerangan thresholds dalam dokumentasi k6 sebelum menjadikannya syarat automasi CI/CD.

5. Uji Aliran Pengguna Yang Penting

Jangan hanya menguji halaman utama. Pilih aliran yang memberi kesan kepada operasi seperti carian, login, paparan produk, tambah ke cart dan checkout. Gunakan akaun serta produk ujian supaya transaksi palsu tidak bercampur dengan rekod pelanggan.

Untuk WordPress, baca juga cara melajukan website WordPress. Ujian beban membantu mengukur hasil, tetapi ia tidak menggantikan pengoptimuman imej, cache, plugin, query database dan konfigurasi server.

Jika aliran mempunyai side effect seperti menghantar e-mel, mencipta pesanan atau memotong stok, gunakan endpoint sandbox atau data yang boleh dibersihkan. Hadkan kadar permintaan kepada gateway pembayaran, API penghantaran dan servis pihak ketiga agar ujian tidak melanggar kuota atau menghasilkan caj.

6. Pantau Server Semasa Ujian

Output k6 sahaja tidak menunjukkan punca masalah. Pantau CPU, memori, load average, disk latency, network, proses PHP, queue, Redis, sambungan database dan slow query. Padankan masa lonjakan metrik server dengan perubahan virtual users dalam ujian.

GejalaPunca yang perlu disemakTindakan awal
Masa respons naik tetapi CPU rendahDatabase, external API, lock atau disk I/OSemak slow query, log dan dependency
CPU kekal hampir penuhPHP worker, kod berat atau cache missProfil aplikasi dan semak cache
Ralat 502 atau 504 meningkatTimeout, worker habis atau upstream gagalKurangkan beban dan semak log proxy
Ralat 429 munculRate limit atau perlindungan WAFSahkan had dan whitelist sumber ujian secara terkawal
Database connection penuhPool terlalu kecil atau query lambatSemak pool, index dan tempoh query

Rujuk juga artikel kesan website perlahan terhadap hasil perniagaan untuk memahami mengapa masa respons perlu dilihat bersama kadar penukaran dan pengalaman pelanggan.

7. Tentukan Bila Ujian Perlu Dihentikan

Sebelum bermula, tetapkan stop condition. Hentikan ujian apabila kadar ralat melebihi had, database tidak stabil, queue meningkat tanpa pulih, latency melonjak berterusan atau pelanggan sebenar mula terjejas. Ujian bukan pertandingan untuk menjatuhkan server; tujuannya ialah mendapatkan data yang boleh digunakan.

Selepas ujian, biarkan sistem melalui tempoh pemulihan. Pastikan penggunaan CPU, sambungan database, queue dan error rate kembali ke baseline. Semak sama ada cron, backup atau proses background tertangguh akibat beban.

Kesilapan Biasa Semasa Stress Test

  • Terus menjalankan beban tinggi tanpa smoke test.
  • Menguji production tanpa kebenaran, pemantauan dan pelan berhenti.
  • Menganggap virtual users sama tepat dengan jumlah pelawat.
  • Tidak menggunakan checks sehingga respons ralat dianggap berjaya.
  • Menggunakan satu halaman sahaja sedangkan bottleneck berada pada checkout atau database.
  • Mengabaikan cache warm-up dan menjalankan perbandingan yang tidak setara.
  • Tidak menyimpan versi skrip, konfigurasi server dan keputusan ujian.

Dokumentasikan tarikh, commit aplikasi, konfigurasi infrastruktur, dataset, skrip, threshold dan hasil. Apabila penambahbaikan dibuat, ulang cara stress test website dengan senario sama supaya perbandingan lebih adil.

Kesimpulan: Naikkan Beban Berdasarkan Data

Cara stress test website dengan k6 yang betul bermula daripada smoke test, diikuti ramp-up terkawal, checks, thresholds dan pemantauan server. Keputusan terbaik bukan sekadar jumlah pengguna tertinggi, tetapi titik kapasiti yang boleh diterangkan bersama punca serta tindakan pembaikan.

Kembali ke panduan stress test web untuk merancang ujian kapasiti secara menyeluruh. Jalankan hanya pada sistem yang dibenarkan, gunakan staging dahulu dan ulang ujian selepas setiap perubahan penting supaya peningkatan prestasi dapat dibuktikan.

Soalan Lazim

Apakah beza load test dan stress test?

Load test mengukur prestasi pada beban yang dijangka, manakala stress test menaikkan beban untuk melihat tingkah laku apabila menghampiri atau melebihi kapasiti. Kedua-duanya perlu mempunyai had keselamatan.

Bolehkah k6 digunakan untuk website WordPress?

Ya. Anda boleh menguji halaman awam, REST API dan aliran tertentu. Berhati-hati dengan login, cart, checkout, e-mel dan rekod yang mempunyai side effect.

Berapa virtual users patut digunakan?

Gunakan data trafik, kadar transaksi dan objektif kapasiti. Mulakan kecil, naikkan secara berperingkat dan hentikan apabila threshold atau stop condition dicapai.

Adakah selamat menjalankan ujian pada production?

Ia mempunyai risiko. Gunakan staging terlebih dahulu. Ujian production memerlukan kebenaran, waktu sesuai, pemantauan aktif, had rendah dan pelan rollback atau penghentian.

Metrik manakah paling penting?

Gabungkan percentile masa respons seperti p95, kadar ralat, checks, throughput dan metrik server. Satu metrik sahaja tidak cukup untuk menerangkan punca masalah.

Sharing is Caring

Leave a Comment