Saya mencari sumber daya tentang cara menumbuhkan pengaturan server kami.
Saat ini kami memiliki satu server khusus dengan Rackspace di Inggris dengan spesifikasi berikut:
HPDL385_G2_PrevGen
HP Single Core Dual Opteron 2214 (2.2Ghz)
4GB RAM
2x 10.000 SCSI Drive di RAID 1
Lalu lintas kami hingga 550.000 UV per bulan.
Situs ini menjalankan pengaturan PHP dan MySQL. Basis data mendapat palu mutlak, kami memiliki banyak pertanyaan kompleks yang bergabung dengan tabel multilpe.
Kami menggunakan APC untuk caching PHP.
Saya sampai pada tahap di mana saya telah melakukan sebanyak mungkin optimasi DB dan query dan bertanya-tanya apa langkah selanjutnya seharusnya ......
Saya telah melihat memcache, tetapi saya mendapat kesan bahwa dia membutuhkan sejumlah besar RAM dan idealnya kotak khusus ....
Begitu juga langkah selanjutnya untuk memiliki dua kotak; satu untuk basis data, satu untuk Apache? Atau ada langkah yang saya abaikan.
Beban kami biasanya sekitar 2 tanda, tetapi sekarang ini di 20!
Beberapa grafik dari Munin:
sumber
Jawaban:
Beli beberapa perangkat keras, tetapi letakkan di lab pengujian Anda bukan di pusat data. Kemudian tekankan aplikasi Anda pada berbagai kombinasi perangkat keras / lunak hingga Anda menemukan yang masuk akal yang akan melakukan apa yang Anda inginkan.
Tentu saja Anda perlu merekayasa sesuatu yang dapat membuat lalu lintas palsu terhadap basis data seperti produksi yang menjalankan salinan uji aplikasi Anda. Tapi siapa bilang itu mudah.
Jika Anda tidak melakukan ini dan hanya melakukan beberapa hal dalam produksi, Anda tidak tahu apakah itu akan berhasil atau tidak, dan Anda mungkin telah menghabiskan BANYAK upaya rekayasa menerapkan hal-hal seperti cache (yang akan datang dengan bagian yang adil mereka bug!) pada sesuatu yang tidak membantu.
Tes, uji, dan uji lagi. Jangan melemparkan perubahan perangkat keras / lunak ke dalam produksi sampai Anda mendapatkan data kinerja yang baik yang menunjukkan bahwa hal itu akan meningkatkan masalah secara signifikan. Upaya rekayasa mahal, uji perangkat keras tidak (khususnya).
Memcached hanyalah salah satu opsi, dan Anda mungkin tidak perlu mempertimbangkannya sampai caching basis data berfungsi optimal. Ini berarti meletakkannya di kotak khusus (64-bit, tentu saja) dengan jumlah RAM yang wajar (bukan 4G - laptop memilikinya saat ini; 32G pasti terjangkau) dan menyetelnya dengan tepat.
Anda belum menyebutkan seberapa besar basis data Anda, tetapi jika itu layak, Anda ingin mencoba sepenuhnya dalam ram (atau setidaknya bit panas). Mendapatkan basis data Anda sepenuhnya di ram akan membuat operasi baca IO hilang sepenuhnya dan karenanya berhenti menjadi hambatan.
Profil pertanyaan basis data Anda. Ada alat yang digunakan untuk melakukan hal ini - Anda harus dapat mensimulasikan beban produksi di lingkungan pengujian Anda. Kuncinya adalah untuk menghindari permintaan yang lambat dan memastikan bahwa yang sering dieksekusi cepat.
Jika masalah kinerja Anda terkait dengan sinkronisasi IO, karena Anda hanya melakukan terlalu banyak transaksi untuk database, pastikan Anda menggunakan pengontrol serangan yang didukung baterai yang berperilaku benar (bicarakan dengan vendor Anda tentang hal itu). Mereka memberikan lebih banyak operasi penulisan IO daripada yang didukung baterai (karena data hanya perlu sampai ke cache sebelum OS mendapatkan konfirmasi). Atau, jika data Anda tidak terlalu penting, pertimbangkan untuk merelaksasi parameter ketahanan basis data (sinkronisasi innodb pada komit).
sumber
Dengan melihat ke dalam solusi caching, seperti yang disarankan banyak orang di sini, Anda dapat berharap untuk mendapatkan sekitar 10% dari beban yang Anda miliki saat ini, mungkin lebih sedikit.
Namun, ini tergantung pada layanan apa yang Anda jalankan di mesin Anda. Anda dapat melakukan banyak hal dengan memcached tanpa terlalu banyak RAM.
Anda harus mencoba membuat profil kueri basis data mana yang paling lama, baik dengan menggunakan log kueri lambat MySQL (atau yang setara untuk basis data Anda), atau dengan menggunakan alat seperti mytop . Juga,
EXPLAIN SELECT
sintaks MySQL mungkin bermanfaat.Caching hasil dari beberapa query MySQL yang dipilih (bahkan hanya untuk waktu yang singkat) benar-benar dapat meningkatkan kinerja Anda.
sumber
Saya melakukan banyak kinerja dan meningkatkan pekerjaan dan yang saya temukan adalah:
Setiap pemuatan aplikasi unik
Respons umum seperti menambahkan lebih banyak ram, mendapatkan server lain, lakukan y, coba x sering menjadi pelajaran dalam frustrasi dan biarkan setup yang berbelit-belit.
Ukur Hal yang Benar
Salah satu tantangan terbesar adalah dalam menentukan tolok ukur apa yang penting. Ini sering membutuhkan langkah mundur dan Anda harus menempatkan diri pada posisi klien Anda. Terkadang, perubahan desain situs sederhana dan berarti manfaat besar bagi pengunjung web. Inilah sebabnya saya menyukai alat seperti YSlow! yang lebih fokus pada pengalaman pengguna akhir daripada tingkat server. Setelah Anda menentukan tolok ukur yang tepat untuk situs Anda, maka Anda dapat mulai menyetel. Benchmark mungkin adalah total waktu buka halaman, ukuran halaman total, efektivitas cache, latensi situs, dll. Anda harus memilih yang masuk akal untuk aplikasi Anda.
Mur dan Baut
Saat Anda melacak tolok ukur yang tepat, mulailah dari tingkat yang sangat rendah. Saya suka menggunakan sysstat. Anda dapat memperoleh banyak informasi dari sysstat dan membantu Anda memisahkan sistem mana yang mungkin membatasi kinerja aplikasi secara keseluruhan. Secara umum, saya merebus masalah kinerja menjadi:
Dengan menggunakan sysstat dan alat-alat lain, Anda dapat mulai membelah rambut dan menemukan sistem yang membatasi kinerja.
Sebagai contoh, saya telah melihat server yang sangat gagal gagal karena cara aplikasi mereka dikonfigurasi. Caching yang buruk, kurangnya header yang kedaluwarsa pada konten statis, menggunakan HTTP vs. file, dll. Semua berkontribusi pada kinerja aplikasi yang buruk. Memperbaiki masalah aplikasi ini tidak memerlukan perubahan perangkat keras. Dalam kasus lain, saya telah melihat disk yang dimaksimalkan meskipun ada banyak caching. Pindah ke disk yang lebih cepat memperbaiki masalah.
Bilas dan Ulangi
Seringkali selama penyetelan aplikasi, Anda akan membuka sumbat satu bottleneck hanya untuk menemukan yang lain. Inilah sebabnya saya menyarankan Anda untuk memantau apa pun yang sedang Anda setel.
Misalnya, Anda memperbaiki masalah IO disk tetapi aplikasi Anda masih lambat. Anda mungkin berpikir bahwa Anda telah menyia-nyiakan usaha Anda, tetapi yang terjadi adalah Anda telah dengan mudah memukul kemacetan lagi. Dengan memonitor IO disk dengan hati-hati, Anda dapat yakin bahwa Anda meningkatkan IO disk meskipun monitor kinerja aplikasi penting Anda tidak berubah.
Dapatkan Alat yang Tepat
Pastikan Anda menggunakan alat yang tepat untuk pekerjaan itu. Pemantauan, pengujian, benchmarking, profil, dan teknik optimasi lainnya semuanya memiliki berbagai alat. Temukan alat yang paling cocok dengan situasi Anda.
Aturan Jempol
Meskipun setiap aplikasi unik, saya menemukan beberapa titik awal standar:
Langkah Selanjutnya
Jika Anda tidak menemukan hambatan Anda, menambahkan server mungkin tidak banyak membantu. Untuk mengatasi disk IO Anda mungkin perlu server lain atau SAN. Jika Anda memiliki hambatan bott server lain akan menyelesaikan masalah hanya dalam hal itu menambah lebih banyak RAM. Bergerak cukup mahal dibandingkan dengan hanya menambahkan lebih banyak RAM ke server Anda yang ada.
Perbaikan Cepat
Lebih dari menyebarkan. Saya harus melakukan ini ketika muncul tumpukan aplikasi masalahnya. Pada dasarnya memuat pada CPU, RAM dan disk IO (RAID 10, 15K SCSI atau SSD). Go big pada perangkat keras dan kemudian mulai mencari. Ini membuat Anda bertahan sampai Anda menyelesaikan masalah.
sumber
Saya akan mengatakan langkah selanjutnya adalah caching (caching data dan / atau caching halaman tergantung pada fungsionalitas Anda). Jika memcached tampaknya terlalu rumit, Anda bisa mulai dengan solusi caching data sederhana seperti PEAR Cache Lite yang hanya membutuhkan beberapa baris kode tetapi bisa membuat perbedaan besar. Caching halaman (atau bagian halaman) didukung oleh Smarty mesin template misalnya.
Setelah caching tidak memotongnya lagi, maka Anda dapat meningkatkan jumlah server karena tidak ada lagi yang tersisa.
sumber
Jika Anda memiliki cukup RAM, memcached akan membantu Anda bahkan di kotak yang sama. Cobalah untuk men-cache beberapa pertanyaan paling berat dan untuk melihat apa yang akan terjadi. Juga, Apache terlalu berat, gunakan nginx atau lighttpd sebagai gantinya (dengan aplikasi PHP bekerja melalui FastCGI, lihat php-fpm ).
sumber
Mulai caching, tetapi abaikan MySQL untuk saat ini. Seriouosly.
Aturannya harus - hentikan permintaan SEBAGAIMANA MUNGKIN. Jadi, proxy terbalik atau caching level Apache yang tepat akan memberi Anda hasil terbaik, lalu caching hasil level sql DALAM aplikasi, lalu caching level sql;)
Semakin awal Anda menghentikan permintaan, semakin sedikit overhead yang Anda miliki. Tingkat cache output - bahkan PHP tidak perlu dijalankan, jadi untuk berbicara.
sumber