Bagaimana Anda melakukan pengujian beban dan perencanaan kapasitas untuk situs web?

113

Ini adalah pertanyaan kanonik tentang perencanaan kapasitas untuk situs web.

Terkait:

Apa saja alat dan metode perencanaan kapasitas yang disarankan untuk situs web dan aplikasi web?

Jangan ragu untuk menggambarkan berbagai alat dan teknik untuk berbagai server web, kerangka kerja, dll., Serta praktik terbaik yang berlaku untuk server web secara umum.

gWaldo
sumber

Jawaban:

127

Jawaban singkatnya adalah: Tidak ada yang bisa menjawab pertanyaan ini kecuali Anda.

Jawaban panjangnya adalah menentukan tolok ukur beban kerja spesifik Anda adalah sesuatu yang perlu Anda lakukan sendiri, karena itu seperti bertanya "Berapa lama seutas tali?".

Situs web statis satu halaman sederhana dapat di-host di Pentium Pro 150 dan masih melayani ribuan tayangan setiap hari.

Pendekatan dasar yang perlu Anda ambil untuk menjawab pertanyaan ini adalah dengan mencobanya dan melihat apa yang terjadi. Ada banyak alat yang dapat Anda gunakan untuk secara buatan menempatkan sistem Anda di bawah tekanan untuk melihat di mana gesper.

Gambaran singkat tentang ini adalah:

  • Taruh skenario Anda di tempat
  • Tambahkan pemantauan
  • Tambahkan lalu lintas
  • Evaluasi hasil
  • Remediasi berdasarkan hasil
  • Bilas, ulangi sampai cukup bahagia

Taruh skenario Anda di tempat

Pada dasarnya, untuk menguji beberapa beban, Anda memerlukan sesuatu untuk diuji. Siapkan lingkungan untuk diuji. Ini harus menjadi tebakan yang cukup dekat dengan perangkat keras produksi Anda jika memungkinkan, jika tidak, Anda akan dibiarkan memperkirakan data Anda.

Siapkan server, akun, situs web, bandwidth, dll. Bahkan jika Anda melakukan ini pada VM tidak apa-apa asalkan Anda siap untuk mengukur hasil Anda.

Jadi, saya akan menyiapkan mesin virtual bertenaga menengah (dua core, RAM 512 MB, HDD 4 GB) dan menginstal load balancer favorit saya, haproxydi dalam Red Hat Linux di VM.

Saya juga akan memiliki dua server web di belakang load balancer yang akan saya gunakan untuk stress test load balancer. Kedua server web ini diatur secara identik ke sistem live saya.

Tambahkan Pemantauan

Anda perlu beberapa metrik untuk dipantau, jadi saya akan mengukur berapa banyak permintaan yang masuk ke server web saya, dan berapa banyak permintaan yang dapat saya peras per detik sebelum pengguna mulai mendapatkan waktu respons lebih dari dua detik.

Saya juga akan memonitor penggunaan RAM, CPU dan disk pada haproxycontoh untuk memastikan bahwa penyeimbang beban dapat menangani koneksi.

Cara melakukan ini sangat tergantung pada platform Anda dan berada di luar cakupan jawaban ini. Anda mungkin perlu meninjau file log server web, memulai penghitung kinerja, atau mengandalkan kemampuan pelaporan alat pengujian stres Anda.

Beberapa hal yang selalu ingin Anda pantau:

  • penggunaan CPU
  • Penggunaan RAM
  • Penggunaan disk
  • Latensi disk
  • Pemanfaatan jaringan

Anda mungkin juga memilih untuk melihat kebuntuan SQL, mencari waktu, dll, tergantung pada apa yang Anda uji khusus.

Tambahkan lalu lintas

Di sinilah segalanya menjadi menyenangkan. Sekarang Anda perlu mensimulasikan beban uji. Ada banyak alat yang dapat melakukan ini, dengan opsi yang dapat dikonfigurasi:

Pilih nomor, nomor apa saja. Katakanlah Anda akan melihat bagaimana sistem merespons dengan 10.000 hit per menit. Tidak masalah nomor apa yang Anda pilih karena Anda akan mengulangi langkah ini berkali-kali, menyesuaikan angka itu ke atas atau ke bawah untuk melihat bagaimana sistem merespons.

Idealnya, Anda harus mendistribusikan 10.000 permintaan ini melalui beberapa klien pengujian / node sehingga satu klien tidak menjadi hambatan permintaan. Misalnya, Pengujian Jarak Jauh JMeter menyediakan antarmuka pusat untuk meluncurkan beberapa klien dari mesin Jmeter yang mengendalikan.

Tekan tombol Go ajaib dan saksikan server web Anda mencair dan macet.

Evaluasi hasil

Jadi, sekarang Anda harus kembali ke metrik yang Anda kumpulkan di langkah 2. Anda melihat bahwa dengan 10.000 koneksi bersamaan, haproxykotak Anda hampir tidak berkeringat, tetapi waktu respons dengan dua server web adalah sentuhan selama lima detik. Itu tidak keren - ingat, waktu respons Anda bertujuan selama dua detik. Jadi, kita perlu melakukan beberapa perubahan.

Remediasi

Sekarang, Anda perlu mempercepat situs web Anda lebih dari dua kali. Jadi, Anda tahu bahwa Anda perlu memperbesar atau memperkecil.

Untuk meningkatkan, dapatkan server web yang lebih besar, lebih banyak RAM, disk lebih cepat.

Untuk meningkatkan skala, dapatkan lebih banyak server.

Gunakan metrik Anda dari langkah 2, dan pengujian, untuk membuat keputusan ini. Misalnya, jika Anda melihat bahwa latensi disk sangat besar selama pengujian, Anda tahu Anda perlu meningkatkan dan mendapatkan hard drive lebih cepat.

Jika Anda melihat bahwa prosesor berada pada 100% selama pengujian, mungkin Anda perlu meningkatkan skala untuk menambahkan server web tambahan untuk mengurangi tekanan pada server yang ada.

Tidak ada jawaban benar atau salah yang umum, hanya ada yang tepat untuk Anda. Coba tingkatkan, dan jika itu tidak berhasil, gunakan skala. Atau tidak, itu terserah Anda dan beberapa pemikiran di luar kotak.

Katakanlah kita akan meningkatkan skala. Jadi saya memutuskan untuk mengkloning dua server web saya (mereka adalah VM) dan sekarang saya memiliki empat server web.

Bilas, ulangi

Mulai lagi dari Langkah 3. Jika Anda mendapati hal-hal tidak berjalan seperti yang Anda harapkan (misalnya, kami menggandakan server web, tetapi waktu responsnya masih lebih dari dua detik), kemudian lihat kemacetan lainnya. Misalnya, Anda menggandakan server web, tetapi masih memiliki server database yang jelek. Atau, Anda mengkloning lebih banyak VM, tetapi karena mereka berada di host fisik yang sama, Anda hanya mencapai pertengkaran yang lebih tinggi untuk sumber daya server.

Anda kemudian dapat menggunakan prosedur ini untuk menguji bagian lain dari sistem. Alih-alih memukul penyeimbang beban, coba tekan server web secara langsung, atau server SQL menggunakan alat tolok ukur SQL .

Mark Henderson
sumber
1
Ini sangat baik untuk pengujian beban, tetapi tidak banyak berbicara tentang perencanaan kapasitas. Siapa yang dapat menulis tentang arsitektur skalabel Google, yang disusun sejak awal, atau alternatifnya menggunakan kotak yang lebih sedikit dan lebih mahal.
rleir
10

Perencanaan kapasitas dimulai dengan pengukuran, dalam hal ini waktu respons versus beban. Setelah Anda mengetahui sejauh mana program melambat dengan beban, yang BUKAN fungsi linier, Anda dapat memilih target waktu respons, dan kemudian menemukan sumber daya apa yang diperlukan untuk memenuhi target itu untuk jumlah beban tertentu.

Pengukuran kinerja selalu dilakukan dengan satuan waktu , seperti

  • mereka adalah apa yang pengguna pedulikan
  • mereka dapat ditingkatkan ke atas dan ke bawah

Hal-hal seperti% CPU dan IOPS khusus untuk sistem, jadi Anda hanya menggunakannya ketika Anda telah merencanakan sistem dan mengukurnya dalam pra-produksi, untuk bertindak sebagai "pengganti" untuk hal yang Anda pedulikan, waktu.

davecb
sumber
8

Perencanaan kapasitas adalah binatang yang merepotkan. Ini sama sainsnya dengan seni (jika jelas yang gelap).

Kasus terbaik Anda adalah bahwa Anda membuat keputusan dan keberuntungan / keberuntungan yang terinformasi menguntungkan Anda dengan membuat kenyataan memenuhi asumsi Anda. Jika kapasitas Anda membutuhkan asumsi yang cocok dengan kenyataan, Anda terlihat seperti yogi mistis. Sayangnya, jika asumsi Anda melebihi kenyataan, Anda akan terlihat memiliki kelebihan dan kekurangan. Lebih sayangnya, jika asumsi Anda berada di bawah realitas akhirnya (atau sebaliknya tidak benar), Anda akan kekurangan kapasitas yang Anda butuhkan, dan harus berjuang untuk mengurangi kegagalan infrastruktur keluhan Anda, yang membuat Anda terlihat seperti Anda tidak memiliki kompetensi.

Tidak ada tekanan...

Sayangnya, seni kelam dari perencanaan kapasitas lebih dari yang dapat didistilasi secara wajar menjadi satu jawaban Kesalahan Server; sungguh, ini adalah topik yang pantas untuk buku.

Untungnya, ada buku seperti itu: " Seni Perencanaan Kapasitas "

gWaldo
sumber
5

Untuk memperluas posting Mark Henderson, saya menulis ini khusus untuk Apache. Untuk mengulangi apa yang dia katakan, "Jawaban singkatnya adalah: Tidak ada yang bisa menjawab pertanyaan ini kecuali Anda." Teks jawaban ini banyak dipinjam dari jawaban saya untuk pertanyaan serupa tentang kinerja situs web Drupal .

Konfigurasi Apache Dengan Mod_Prefork

Apache bisa dibilang salah satu (jika bukan) server web paling populer yang tersedia. Ini adalah open source dan masih dipelihara secara aktif. Anda dapat menjalankannya di sistem operasi Linux dan Windows, tetapi lebih populer di dunia Linux / Unix.

Anda seharusnya tidak pernah menggunakan konfigurasi Apache out-of-the-box. Anda selalu perlu menyetel Apache ke situs Anda. File konfigurasi Apache utama pada CentOS terletak di /etc/httpd/conf/httpd.conf, dan file konfigurasi Apache utama pada sistem Ubuntu biasanya terletak di /etc/apache2/apache2.conf. File konfigurasi tambahan digunakan untuk hal-hal seperti Host Virtual .

Seperti banyak perangkat lunak, Apache dibuat agar fleksibel dan dapat disesuaikan sesuai dengan kebutuhan situs web tertentu. Ada beberapa Modul Multi-Pemrosesan yang berbeda yang dapat dikonfigurasi Apache untuk digunakan untuk mengikat ke port jaringan dan menerima & memproses permintaan.

Sebagian besar waktu pada instalasi default Apache yang datang dengan server CentOS dan Ubuntu, MPM " mod_prefork " digunakan. Dengan asumsi Anda menggunakan mod_prefork (jika Anda tidak yakin, maka itu kemungkinan besar, tetapi hanya Anda yang dapat menentukannya) Berikut adalah dasar-dasar cara mengonfigurasinya:

  • Cari tahu jumlah maksimum memori yang Anda ingin dapat digunakan oleh Apache.
  • Sangat menguji situs web Anda, dan menentukan berapa banyak memori yang digunakan setiap proses Apache (menggunakan atas).
  • Ambil proses Apache di atas yang menggunakan sebagian besar memori, tambahkan sedikit ke sana untuk ukuran yang baik, dan kemudian bagi nomor pertama Anda (jumlah maksimum memori yang ingin Anda gunakan oleh Apache) dengan nomor baru ini.
  • Jumlah yang Anda peroleh harus MaxClients& ServerLimitvariabel Anda.

Ini tentu bukan jawaban akhir semua. Tuning server Apache Anda membutuhkan waktu dan membutuhkan pengalaman untuk bisa melakukannya dengan benar.

David W
sumber
1
penggunaan memori hanya berdasarkan atas sedikit cacat, silakan periksa fe stackoverflow.com/questions/7880784/... selain itu Anda mungkin ingin menggunakan skrip python "ps_mem.py" alih-alih atas untuk penggunaan memori, atau bahkan menggunakan nilai yang langsung terpasang untuk proses dalam / proc
Dennis Nolte
1
Seluruh jawaban bernilai karena catatan yang Anda tambahkan: "Anda seharusnya tidak pernah menggunakan konfigurasi Apache out-of-the-box". Kita tidak pernah bisa cukup menekankan hal ini.
ezra-s
0

Saya juga menyarankan untuk berbicara dengan Arsitek & Insinyur yang merancang / membangun aplikasi untuk mencoba mengidentifikasi kemacetan, satu titik kegagalan, dan batasan lisensi.

DuckDNS
sumber