it-swarm-id.com

Pengalaman dunia nyata dalam penskalaan dan penyetelan kinerja

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

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

Saya telah membaca Scaling the drupal.org Infrastructure , blog kinerja Drupal , Praktik Terbaik untuk Scaling Drupal dan banyak halaman lain, tetapi apa yang saya ' Yang saya cari adalah pengalaman nyata melakukan ini, apa yang berhasil, apa yang tidak, dan apa yang diharapkan.

52

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

Ketika Anda telah Tekan aliran untuk D6 atau Drupal untuk D7, Memcached dan Varnish semua bekerja dengan baik bersama-sama Anda perlu mengkustomisasi kode Anda - VCL file. Ada yang gratis yang membuat poin awal tetapi Anda selalu harus 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 browser 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 posting 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 50 msec 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 in 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.

45

Saya akan merekomendasikan dimulai 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 Origin 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. callback atau sisi Tepi termasuk.

Jika Anda memiliki sekelompok kecil pengguna internal (seperti sekelompok editor) yang harus 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).

22
markdorison

2500 hit per detik selama sehari - jika dengan "hit" maksudmu "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. Meskipun saran di utas ini sangat baik 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 jumlah waktu dan upaya yang tidak baik untuk menyelesaikan masalah, pastikan Anda memiliki masalah. 2500 hit per detik, bing mendapat kurang dari itu, Anda menyadari itu, kan?

15
user49
  • 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 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 cache statis dan persisten strategi hingga log kueri lambat muncul bersih.
    • Hindari PHP kesalahan yang terjadi dalam loop foreach bersarang di semua biaya.
    • Copot modul yang tidak digunakan.
    • Aktifkan caching untuk Drupal blok inti 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.
6
amateur barista

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

5
Randy Burgess

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 Jaringan Pengiriman Konten ( 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 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 Bar atau Yottaa yang memiliki integrasi untuk Drupal).
  • Gunakan alat pemantauan untuk situs web Anda (mis. Nagios).
  • Instal Varnish dan modul Varnish HTTP Accelerator Integration , lalu konfigurasikan .
  • Varnish + Authcache: Periksa ini Contoh VCL untuk Authcache File konfigurasi Varnish.
  • Pertimbangkan Pound atau NGINX di depan Varnish. Lihat: Mengapa Pound mengagumkan di depan Varnish .
  • NGINX dapat bekerja 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 , memuat dan menguji 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 Drupal saran optimasi, periksa: Bagaimana Anda meningkatkan Drupal kinerja?

3
kenorb

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

3
Jeremy French

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

0
James Stallings

Aktifkan dua ekstensi:

  • Zend OPcache
  • wincache

Performa Anda akan bekerja lebih baik.

Jika Anda ingin twig Zend OPcache dan Wincache di Microsoft Azure, pada awalnya 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 mulai ulang aplikasi web Anda. Jika ingin tahu lebih banyak tentang konfigurasi ranting, silakan periksa dokumentasi Microsoft .

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

0
npcoder