Cara tumbuh dari pengaturan server tunggal

8

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:

mysql cpu Penyimpanan

Jon M
sumber
Saya akan memeriksanya, Erik, terima kasih. Adakah yang berpikir bahwa meningkatkan jumlah RAM akan memiliki efek besar? Saya pikir itu mahal dari Rackspace, £ 50 / GB / bulan IIRC.
Apakah Anda melakukan MySQL membaca dan menulis atau satu lebih penting daripada yang lain?
wag2639
Saya tidak yakin ini seharusnya dipindahkan dari SO. Penskalaan di luar satu kotak adalah masalah pemrograman sama halnya dengan masalah perangkat keras. Lebih tepatnya, sebenarnya. Membeli perangkat keras itu mudah. Menulis kode yang menggunakannya secara skalabel secara horizontal sulit.
Frank Farmer
wag2639 sebagian besar pertanyaan dipilih. Menurut grafik munin saya, hit cache adalah sekitar 50% dari total .... apakah ada cara saya dapat memposting gambar? Memuncak pada 2.160 QPS, rata-rata 522 QPS.
Jon M

Jawaban:

3

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).

MarkR
sumber
32G tidak terlalu terjangkau saat Anda menyewa perangkat keras. Dan menyewa perangkat keras umumnya lebih ekonomis bila Anda hanya memiliki satu atau dua kotak.
Frank Farmer
MarkR / Frank, dapatkah Anda menawarkan wawasan lebih lanjut berdasarkan grafik yang saya posting di atas? Kutipan terakhir saya untuk RAM tambahan adalah ~ £ 50 / GB / bulan!
Jon M
1

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 SELECTsintaks MySQL mungkin bermanfaat.

Caching hasil dari beberapa query MySQL yang dipilih (bahkan hanya untuk waktu yang singkat) benar-benar dapat meningkatkan kinerja Anda.

Vegard Larsen
sumber
Terima kasih Vegard. Ya, saya secara teratur berkonsultasi dengan log kueri lambat dan menjelaskan perintah pada pertanyaan saya. Server cukup banyak hanya menjalankan instance apache dan MySQL, tetapi kami melakukan beberapa hal seperti konversi video juga, yang saya sedang dalam proses pindah ke server cloud.
Jika masalah Anda benar-benar kehabisan thread apache, Anda dapat dengan mudah mengambil beberapa beban dengan menginstal nginx (atau proxy reverse ringan lainnya) di depan apache. Nginx kemudian dapat menyajikan konten statis, dan mengambil alih tugas memberi makan klien lambat byte, membebaskan apache untuk melakukan apa yang benar-benar perlu: bertindak sebagai wadah aplikasi PHP. Untuk tinjauan umum yang lebih lengkap dari konsep ini, lihat: modperlbook.org/html/…
Frank Farmer
Terima kasih Frank, ini jelas tampak masuk akal, saya telah pindah sebanyak mungkin ke Amazon S3, pada dasarnya itu hanya UGC, tapi saya sekarang mencoba untuk meletakkan semua elemen grafis dan CSS di sana juga. Saya yakin ada beberapa penyesuaian Apache dan MySQL yang harus dilakukan.
Jon M
1

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:

  • tumpukan jaringan
  • tumpukan memori
  • disk io
  • lapisan aplikasi
  • lapisan os

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:

  • database memori suka memori
  • Disk apa pun selain serangan 10 dapat membunuh kinerja basis data
  • optimasi yang salah - nilai besar tidak diterjemahkan ke dalam kinerja besar
  • aplikasi - menyalahkan server untuk desain aplikasi yang buruk

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.

jeffatrackaid
sumber
0

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.

serg
sumber
Terima kasih atas saran Anda Serg, saya sudah melakukan caching ke HTML di berbagai tempat dan menggunakan beberapa query database semalam untuk mengisi beberapa tabel "pencarian cepat".
0

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
Jika Anda memiliki RAM gratis yang cukup, dan mysql sedang lambat untuk menjawab pertanyaan yang dibaca, Anda tidak dapat menyetel mysql dengan benar. gunakan ram untuk database sebagai gantinya. Caching MySQL akan sepenuhnya transparan untuk aplikasi, tidak memperkenalkan bug dan tidak pernah mengembalikan data basi.
MarkR
Cache permintaan mysql, bagi banyak beban kerja, tidak valid terlalu agresif untuk menjadi berharga. Memperbarui satu baris pada tabel akan membatalkan setiap kueri terhadap tabel itu.
Frank Farmer
0

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.

TomTom
sumber