Pengalaman dunia nyata dalam penskalaan dan penyetelan kinerja

54

Situs web yang saya kerjakan diduga memiliki hit rate yang besar segera setelah diluncurkan . Klien berbicara tentang kemungkinan sekitar 2500 hit per detik selama sekitar satu hari.

Mengabaikan fakta bahwa hit rate ini mungkin optimisme klien liar dan selain dari mendapatkan server terbesar mungkin, apa cara terbaik yang Drupal harus dikonfigurasi untuk mendukung hit rate besar.

Saya telah membaca Scaling, drupal.org Infrastruktur , blog kinerja Drupal , Praktik Terbaik untuk Scaling Drupal dan banyak halaman lainnya, tetapi yang saya cari adalah pengalaman nyata melakukan hal ini, apa yang berhasil, apa yang tidak, dan apa yang harus dilakukan. mengharapkan.

Richard Harrison
sumber

Jawaban:

47

Jawaban Markdorison pada dasarnya adalah metode yang diterima untuk menyerang masalah ini. Saya akan mengambil sedikit lebih jauh.

Ketika Anda memiliki Pressflow untuk D6 atau Drupal untuk D7, Memcached dan Varnish semua bekerja dengan baik bersama-sama Anda harus mengkustomisasi file VCL Anda . Ada yang gratis tersedia yang membuat poin awal tetapi Anda selalu perlu bermain dengannya.

Agar Varnish bekerja secara optimal, pastikan Anda memulainya dengan -s malloc xG daripada default -s file / path / to / file. Juga dengan Varnish memiliki item statis cache Varnish selama Anda bisa.

Jika Anda memiliki lebih dari satu server web, hapus ETag dari header yang dikirim ke Varnish di VCL. Saya juga menghapus Kedaluwarsa dan cukup mengandalkan Umur dan maks-usia di tajuk sehingga dapatkan peramban kembali ke situs.

Versi 1.5 (per 3 Maret 2011) masih merupakan versi tercepat dari modul Memcached dari Drupal.org. Saya biasanya menyebarkannya menggunakan satu nampan per server untuk menurunkan lalu lintas tcp untuk koneksi ke beberapa tempat sampah dalam skala besar)

Konfigurasikan caching di "Performance" ke eksternal dan atur usia maks yang akan mengirim header yang benar ke proxy caching seperti Varnish.

Jika Anda tidak bisa mendapatkan halaman tertentu untuk di-cache dengan benar di Varnish, periksa posting blog di web yang merinci cara memeriksa permintaan. Berikut adalah contoh tulisan yang saya tulis beberapa waktu lalu: Apa yang menghentikan Varnish dan Drupal Pressflow dari caching tampilan halaman pengguna anonim

Anda harus memilih InnoDB (atau salah satu dari itu nama lain dari penyedia lain seperti XtraDB) untuk MySQL dan memindahkan semua tabel ke dalamnya. Kemudian lihat posting blog ini untuk saran penyetelan dasar http://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

Memiliki kolam penyangga yang besar pada dasarnya penting. Saat memuat pengujian situs, aktifkan log kueri lambat. Anda mungkin ingin menangkap query pada awalnya mengambil lebih dari 50msec kemudian tune query dan secara berulang-ulang mengurangi waktu penangkapan log lambat sampai Anda memiliki sebagian besar query berjalan menggunakan indeks, dan menjalankan cukup cepat.

Dasar-dasar lain melibatkan memiliki APC untuk PHP. Jika Anda menggunakan CGI cepat daripada mod_php, habiskan beberapa waktu untuk mencoba membuat cache APC dibagi di seluruh instance php dengan mengkonfigurasi skrip wrapper yang baik. Juga pastikan bahwa cache APC ada dalam file yang dipetakan untuk memeras setiap bit terakhir dari PHP.

Stewart Robinson
sumber
"Jika Anda menggunakan CGI cepat daripada mod_php, habiskan beberapa waktu untuk mencoba membuat cache APC dibagi di seluruh instance php dengan mengkonfigurasi skrip wrapper yang baik. Juga pastikan bahwa cache APC berada dalam file yang dipetakan dalam memori untuk memeras setiap bit terakhir keluar dari PHP. " : Ok, bagaimana caranya? Terima kasih
john
1
Untuk apc memori yang dipetakan tergantung pada flag kompilasi ... php.net/manual/en/apc.configuration.php
Stewart Robinson
23

Saya akan merekomendasikan mulai dengan Pressflow (jika menggunakan Drupal 6), Memcache , Varnish , dan beberapa bentuk Jaringan Distribusi Konten (CDN) seperti Akamai. Hasil akhirnya harus sesedikit mungkin dari pengguna yang benar-benar mengenai server asal Anda.

Jika Anda memiliki bagian halaman yang tidak dapat Anda cache untuk pengguna non-anonim (hal-hal yang khusus untuk pengguna itu, "Welcome userX" dll.), Anda dapat menjelajahi opsi untuk mengisi bagian-bagian halaman ini seperti asinkron. termasuk callback atau sisi tepi.

Jika Anda memiliki sekelompok kecil pengguna internal (seperti sekelompok editor) yang perlu dapat melihat versi situs yang tidak di-cache, saya akan merekomendasikan mengekspos versi situs yang tidak di-cache di URL yang berbeda (dilindungi di belakang VPN atau setara jika memungkinkan).

markdorison
sumber
Richard: Dengan senang hati. Beri tahu saya jika Anda memiliki pertanyaan lanjutan.
markdorison
16

2500 hit per detik selama sehari - jika "hit" maksud Anda "halaman terkirim" maka itu 216 juta halaman sehari. Biarkan saya memberi tahu Anda ini: Anda tidak memiliki 216 juta halaman sehari. Saya suka klien ini ...

Yang mengatakan, data lalu lintas mentah tidak mengatakan apa-apa. Sementara saran di utas ini sangat bagus tentang Varnish / CDN jika semua yang Anda miliki adalah lalu lintas anonim tetapi jika Anda telah masuk lalu lintas, Anda menghadapi tantangan. Tetapi sebelum menghabiskan waktu dan upaya yang tidak saleh untuk menyelesaikan suatu masalah, pastikan Anda memiliki masalah. 2500 hit per detik, bing mendapat kurang dari itu, Anda menyadari itu, kan?


sumber
2
2500 / detik adalah nomor klien berdasarkan apa yang saya pikir kita semua anggap sebagai tebakan liar; hanya itu yang harus saya jalani. Ternyata peluncuran itu tidak terlalu sukses seperti yang mereka rencanakan (harapkan) untuk dan anehnya tingkat aktual memuncak pada 20 (halaman) per detik selama sekitar 10 menit - terutama anonim, dengan rata-rata harian dari 7,32 halaman / detik .....
Richard Harrison
7
  • Sisi server

    • Instal Varnish untuk halaman caching untuk pengguna anonim.
    • Instal sistem cache persisten (Memcached, APC, Memcache).
    • Gunakan CDN seperti Akamai untuk menyajikan file statis (JavaScript, CSS, gambar).
  • Sisi Kode

    • Gunakan Pressflow, ini memungkinkan Varnish untuk melayani halaman yang di-cache untuk pengguna anonim.
    • Bersihkan meja pengawas Drupal. Setiap kali kesalahan anjing penjaga dicatat, ia menghabiskan sumber daya CPU di server web dan server database. Ini juga meningkatkan waktu buka secara signifikan.
    • Terapkan strategi cache statis dan persisten hingga log kueri lambat muncul bersih.
    • Hindari kesalahan PHP yang terjadi dalam loop bersarang foreach di semua biaya.
    • Copot modul yang tidak digunakan.
    • Aktifkan caching untuk blok inti Drupal dan Tampilan.
  • Basis data

    • Pastikan tabel diindeks dengan benar untuk pencarian yang lebih cepat.
    • Jangan menyimpan catatan yang tidak perlu, basis data 100 simpul akan selalu diakses lebih cepat dari basis data 3 juta simpul.
barista amatir
sumber
6

Saya juga akan mendengarkan podcast Lullabot ini tentang cara mereka mengatur situs web Grammys.com untuk ledakan lalu lintas selama seminggu. Itu penjelasan yang cukup mendidik.

http://www.lullabot.com/podcasts/podcast-92-grammycom

Randy Burgess
sumber
Sepenuhnya setuju dengan Anda.
João Guilherme
4

Meskipun sangat sulit untuk memprediksi pola, jika Anda memiliki gagasan yang adil tentang tingkat lalu lintas. Uji beban solusi Anda. Ada sejumlah opsi yang berbeda dan banyak yang tidak akan dapat diprediksi sampai Anda memiliki lalu lintas langsung, tetapi jika Anda memuat tes sebanyak mungkin, setidaknya Anda akan memiliki tingkat kepercayaan yang adil bahwa pengaturan Anda dapat menangani lalu lintas.

Semua penyetelan di dunia tidak akan membantu jika Anda tidak mengujinya terlebih dahulu.

Ini adalah presentasi di DC SF tentang bagaimana ekonom melakukannya. http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online-using-grinder

Jeremy French
sumber
Tautan ke presentasi benar-benar sangat berguna. Terima kasih
Richard Harrison
4

Untuk situs web dengan lalu lintas tinggi, Anda harus menggunakan beberapa server dan memuat penyeimbang atau hanya menggunakan CDN. Juga sangat penting untuk melakukan cache sebanyak mungkin untuk meminimalkan beban pada server web.

Menggunakan Content Delivery Network ( CDN ) membantu menyebarkan sumber daya melalui beberapa domain (domain sharding) yang mengurangi beban pada server web.

Menggunakan CDN membantu dengan caching terdistribusi dan akselerasi jarak jauh, juga membantu mengurangi serangan DDoS , karena beberapa titik akhir. Ini membantu dengan keamanan, karena konten yang di-cache lebih sulit untuk dieksploitasi.

Contoh penyedia: Cepat , Rackspace , Akamai , Azure, CloudFlare, Amazon, MaxCDN, Verizon.

Berikut beberapa saran lainnya:

  • Dengan CDN, gunakan domain tanpa cooki untuk komponen statis yang akan di-cache (seperti sstatic.net ). Karena beberapa proxy mungkin menolak untuk me-cache komponen yang diminta dengan cookie.
  • Hangatkan cache Anda setelah menghapus cache (menggunakan wget, Cache Warmer , Drush ECL ).
  • Gunakan pemantauan kinerja (mis. Relik Baru atau Yottaa yang memiliki integrasi untuk Drupal).
  • Gunakan alat pemantauan untuk situs web Anda (mis. Nagios).
  • Instal modul Varnish dan Varnish HTTP Accelerator Integration , lalu konfigurasikan .
  • Varnish + Authcache: Lihat Contoh ini VCL untuk file konfigurasi Authcache Varnish.
  • Pertimbangkan Pound atau NGINX di depan Varnish. Lihat: Mengapa Pound mengagumkan di depan Varnish .
  • NGINX dapat berfungsi sebagai proxy terbalik dan penyeimbang beban, sehingga dapat menggantikan Pound dan Varnish.
  • Pertimbangkan versi komersial Varnish atau NGINX untuk memanfaatkan fitur yang tidak tersedia di versi open source "komunitas".
  • Pertimbangkan loadbalancer / caching perangkat keras untuk menggantikan Varnish dan Pound (mis. BIG-IP F5 ).
  • Gunakan alat seperti ab, JMeter untuk TTFB , pengujian beban dan stres pada aplikasi web Anda.

Jadi arsitektur web Anda dari sudut pandang pengguna dapat terlihat seperti:

  1. Pengguna (caching browser lokal).
  2. NGINX atau Pound + Varnish (load balancer, reverse proxy sebagai akselerator HTTP).
  3. Apache (server web).
  4. PHP-FPM (Manajer Proses PHP FastCGI).
  5. MariaDB (basis data).

Untuk saran pengoptimalan Drupal, periksa: Bagaimana Anda meningkatkan kinerja Drupal?

kenorb
sumber
1

Aktifkan dua ekstensi:

  • Zend OPcache
  • wincache

Performa Anda akan bekerja lebih baik.

Jika Anda ingin mencabut Zend OPcache dan Wincache di Microsoft Azure, pertama-tama buat nama folder ' ini' di bawah ' D:\home\site\'. Juga, buat 2 file, ' .user.ini' dan ' settings.ini'

Tambahkan konfigurasi berikut di setiap file:

.user.ini

[PHP]
post_max_size = 32M
memory_limit = 512M
zend.enable_gc = On
upload_max_filesize = 32M
opcache.enable=1

setting.ini

wincache.ocenabled = 1
wincache.ocachesize = 255

Juga, tambahkan Pengaturan Aplikasi ke Aplikasi Web Anda dengan kunci PHP_INI_SCAN_DIR dan nilai d:\home\site\ini

Setelah mengubah PHP_INI_SYSTEM restart aplikasi web Anda. Jika ingin tahu lebih banyak tentang konfigurasi ranting, silakan periksa dokumentasi Microsoft .

Setelah pengaturan di atas, Drupal saya (Drupal 8.3) memuat situs dalam 3 detik.

npcoder
sumber
0

Anda juga dapat memeriksa distribusi ulang beban pada beberapa server dengan bantuan solusi penyeimbangan beban berbasis DNS atau perangkat lunak / perangkat keras. Ini juga akan memanggang toleransi kesalahan.

James Stallings
sumber
Itu bukan jawaban yang baik karena tidak membahas cara mencapai ini. seperti yang disebutkan dalam OQ itu adalah pengalaman penskalaan dunia nyata yang saya kejar.
Richard Harrison
Jika kekuatan yang memutuskan kita dapat menjalankan drupal di tempat kerja maka saya akan dengan senang hati memberikan posting blog 5+ halaman yang menguraikan perangkat keras dan konfigurasi kita.
James Stallings
Luar biasa. Bisa jadi referensi yang bermanfaat.
Richard Harrison
Apakah Anda mendapat izin untuk mengirim ulang garis besar Anda?
Richard Harrison