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


Ini adalah sebuah pertanyaan kanonis tentang perencanaan kapasitas untuk situs web.

Terkait:

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

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


111
2018-01-16 22:49






Jawaban:


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

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

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

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

Gambaran singkat tentang ini adalah:

  • Letakkan skenario Anda di tempatnya
  • Tambahkan pemantauan
  • Tambahkan lalu lintas
  • Evaluasi hasil
  • Remediasi berdasarkan hasil
  • Bilas, ulangi hingga cukup bahagia

Letakkan skenario Anda di tempatnya

Pada dasarnya, untuk menguji beberapa beban, Anda perlu sesuatu untuk diuji. Siapkan lingkungan untuk diuji. Ini harus menjadi perkiraan yang cukup dekat untuk perangkat keras produksi Anda jika mungkin, jika tidak, Anda akan dibiarkan mengekstrapolasi data Anda.

Siapkan server, akun, situs web, bandwidth, dll. Bahkan jika Anda melakukan ini di VM, itu tidak masalah selama Anda siap untuk mengukur hasil Anda.

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

Saya juga akan memiliki dua server web di belakang load balancer yang akan saya gunakan untuk menguji stres penyeimbang beban. Kedua server web ini diatur secara identik ke sistem hidup saya.

Tambahkan Pemantauan

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

Saya juga akan memonitor penggunaan RAM, CPU dan disk pada haproxy contoh untuk memastikan bahwa load balancer dapat menangani koneksi.

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

Beberapa hal yang selalu ingin Anda pantau:

  • penggunaan CPU
  • Penggunaan RAM
  • Penggunaan disk
  • Disk latensi
  • Pemanfaatan jaringan

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

Tambahkan lalu lintas

Di sinilah hal-hal 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 klik per menit. Tidak masalah nomor apa yang Anda pilih karena Anda akan mengulangi langkah ini berkali-kali, menyesuaikan angka tersebut ke atas atau ke bawah untuk melihat bagaimana sistem merespons.

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

Tekan sihirnya Pergi tombol dan lihat server web Anda mencair dan macet.

Evaluasi hasil

Jadi, sekarang Anda harus kembali ke metrik Anda yang Anda kumpulkan di langkah 2. Anda melihat bahwa dengan 10.000 koneksi bersamaan, Anda haproxy kotak 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 membuat beberapa perubahan.

Remediasi

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

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

Untuk skala, dapatkan lebih banyak server.

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

Jika Anda melihat prosesor berada pada 100% selama pengujian, mungkin Anda perlu memperbesar 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. Cobalah meningkatkan skala, dan jika itu tidak berhasil, diskalakanlah. Atau tidak, terserah Anda dan sebagian berpikir di luar kotak.

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

Bilas, ulangi

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

Anda kemudian dapat menggunakan prosedur ini untuk menguji bagian lain dari sistem. Daripada menekan load balancing, cobalah langsung memukul server web, atau server SQL menggunakan alat benchmarking SQL.


119
2018-04-29 14:05



Ini sangat baik untuk pengujian beban, tetapi tidak banyak membahas tentang perencanaan kapasitas. Siapa yang dapat menulis tentang arsitektur skalabel Google, yang disusun sejak awal, atau alternatif menggunakan kotak yang lebih sedikit dan lebih mahal. - rleir


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

Pengukuran kinerja selalu dilakukan dengan waktu unit, sebagai

  • mereka adalah hal yang diperhatikan pengguna
  • mereka dapat ditingkatkan ke atas dan ke bawah

Hal-hal seperti% CPU dan IOPS bersifat spesifik-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.


9
2018-04-21 22:32





Perencanaan kapasitas adalah binatang yang merepotkan. Itu sama banyaknya dengan seni (jika pasti yang gelap).

Kasus terbaik Anda adalah Anda membuat keputusan yang terinformasi dengan baik dan keberuntungan / keberuntungan menguntungkan Anda dengan memiliki realitas memenuhi asumsi Anda. Jika kapasitas Anda membutuhkan asumsi yang sesuai dengan realitas, Anda terlihat seperti seorang yogi mistik. Sayangnya, jika asumsi Anda melebihi realitas, Anda akan tampak melampaui batas dan kelebihan belanja. Lebih disayangkan lagi, jika asumsi Anda berada di bawah realitas akhirnya (atau tidak benar), Anda akan kekurangan kapasitas yang Anda butuhkan, dan harus berebut untuk mengurangi kegagalan infrastruktur Anda yang merintih, yang membuat Anda terlihat seperti Anda kurang memiliki kompetensi.

Tidak ada tekanan...

Sayangnya, dark art of capacity planning lebih dari yang dapat disaring menjadi jawaban Server Fault; sungguh, ini topik yang layak untuk buku.

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


8





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 a Kinerja situs web Drupal.

Konfigurasi Apache Dengan Mod_Prefork

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

Kamu harus tak pernah gunakan konfigurasi Apache di luar kotak. Anda selalu perlu menyetel Apache ke situs Anda. Utama Konfigurasi Apache file di CentOS berada 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 dibangun untuk menjadi fleksibel dan disesuaikan sesuai dengan kebutuhan situs web tertentu. Ada Modul Multi-Pemrosesan yang berbeda bahwa Apache dapat dikonfigurasi untuk digunakan untuk mengikat ke port jaringan dan menerima & memproses permintaan.

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

  • Cari tahu jumlah maksimum memori yang Anda inginkan agar dapat digunakan oleh Apache.
  • Sangat menguji situs web Anda, dan tentukan berapa banyak memori yang digunakan setiap proses Apache (menggunakan bagian atas).
  • Ambil proses Apache di bagian atas yang menggunakan memori paling banyak, tambahkan sedikit untuk itu untuk ukuran yang baik, dan kemudian bagi nomor pertama Anda (jumlah maksimum memori yang ingin Anda gunakan Apache) dengan nomor baru ini.
  • Nomor yang Anda dapatkan seharusnya menjadi milik Anda MaxClients & ServerLimit variabel.

Ini tentu bukan jawaban akhir semua. Tuning server Apache Anda membutuhkan waktu dan membutuhkan pengalaman untuk melakukan yang benar.


5



penggunaan memori hanya berdasarkan di atas sedikit cacat, silakan periksa f.e. stackoverflow.com/questions/7880784/… Anda juga mungkin ingin menggunakan skrip python "ps_mem.py" alih-alih atas untuk penggunaan memori, atau bahkan menggunakan nilai yang dilampirkan pada proses di bawah / proc - Dennis Nolte
Seluruh jawaban bernilai karena catatan yang Anda tambahkan: "Anda tidak boleh menggunakan konfigurasi Apache di luar kotak". Kami tidak pernah bisa cukup menekankan ini. - ezra-s


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


0