Kecepatan: Magento dengan APC dan Memcached

17

Kami telah mempelajari banyak forum dan tidak tahu jawabannya. Kami memiliki kedua APCdan Memcachediinstal di server kami. Kami tidak yakin apa konfigurasi yang benar dan terbaik.

Pertanyaan saya

Apa pengaturan terbaik untuk menjalankan Magento menggunakan Memcache + APC secara bersamaan? (Atau apakah ini sama sekali tidak pintar)

Penelitian latar belakang

Di sini, Memcache dan APC disarankan sebagai cache cepat dan lambat (tetapi tidak ada disk). Kedengarannya seperti ini hanya berfungsi ketika Anda memiliki cukup RAM (dan yakin tentang itu)

Dan artikel ini tentang Memcache atau APC - dan kami memiliki keduanya

Dan di sini disebutkan bahwa Memcache hanya benar-benar berfungsi ketika Anda juga memiliki backend lambat yang didefinisikan

Dan saya pikir artikel ini mengatakan hal yang sama

Ini adalah solusi ISP saya untuk local.xml

<cache>
  <backend>apc</backend>
  <prefix>sitenamehere__</prefix>
</cache>
<cache>
  <backend>memcached</backend>
  <memcached>
    <servers>
      <server>
        <host><![CDATA[127.0.0.1]]></host>
        <port><![CDATA[11211]]></port>
        <persistent><![CDATA[1]]></persistent>
      </server>
    </servers>
    <compression><![CDATA[0]]></compression>
    <cache_dir><![CDATA[]]></cache_dir>
    <hashed_directory_level><![CDATA[]]></hashed_directory_level>
    <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
    <file_name_prefix><![CDATA[]]></file_name_prefix>
  </memcached>
</cache>

Situasi

Hosting bersama Brim FPC terinstal: http://ecommerce.brimllc.com/full-page-cache-magento.html (FPC ini juga memiliki cache file yang dapat diukur untuk membuatnya lebih kompleks)

snh_nl
sumber
@sonassi, mengapa tidak malah memcached-tag? code.google.com/p/memcached-tag

Jawaban:

26

Anda perlu memahami perbedaan yang jelas antara kedua produk ini untuk memahami cara menggunakannya.

  • APC adalah OPCode Cache dan Fast Backend
  • Memcache hanyalah Backend Cepat

Menggunakan APC sebagai OPCode Cache

Cukup instal modul di server Anda

pecl install apc

Dan aktifkan di php.ini

echo "extension=apc.so" >> /usr/lib/local/php.ini       (RedHat/Centos)
echo "extension=apc.so" >> /etc/php5/conf.d/20apc.ini   (Debian)

Anda kemudian mengaktifkan dan menyempurnakan konfigurasi runtime yang sesuai, misalnya.

apc.enonaktifkan
apc.shm_segments
apc.shm_size
apc.optimisasi
apc.num_files_hint
apc.user_entries_hint
apc.ttl
apc.user_ttl
...

Kemudian restart PHP / Apache

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

Setelah itu, tidak ada lagi yang bisa dilakukan. Konfirmasikan APC diaktifkan dengan cepat phpinfo()- tetapi sebaliknya, pada titik ini, bagian cache OPCode dari APC aktif.

Tidak ada yang perlu dikonfigurasi di sisi Magento.

Menggunakan APC sebagai Backend Cepat

Anda perlu menambahkan yang berikut ke ./app/etc/local.xml

<global>
  ...
  <cache>
    <backend>apc</backend>
      <prefix>mystore_</prefix>
  </cache>
  ...
</global>

Lalu siram cache toko yang ada. Untuk memverifikasi itu berfungsi, muat halaman di front-end dan ./var/cachedirektori harus tetap kosong.

Menggunakan Memcache sebagai Backend Cepat

Anda harus menginstal Memcache sebagai ekstensi PHP, dan menginstal Memcache Daemon masing-masing (Memcached) di server Anda.

pecl install memcache

Dan aktifkan di php.ini Anda

echo "extension=memcache.so" >> /usr/lib/local/php.ini            (RedHat/Centos)
echo "extension=memcache.so" >> /etc/php5/conf.d/20memcache.ini   (Debian)

/etc/init.d/httpd restart                               (RedHat/Centos)
/etc/init.d/apache2 restart                             (Debian)

Kemudian instal Memcached di server. Untuk RH / Centos, sesuaikan URL agar sesuai dengan versi rilis dan arsitektur CPU Anda.

rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
yum --enablerepo=rpmforge install memcached

apt-get install memcached                               (Debian)

Kemudian modifikasi Magento untuk menggunakan Memcache sebagai backend cepat, ubah jalur soket ke koneksi TCP / IP yang sesuai.

<cache>
  <slow_backend>database</slow_backend>

  <fast_backend>memcached</fast_backend>
  <fast_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </fast_backend_options>

  <backend>memcached</backend>
  <memcached>
  <servers>
    <server>
      <host>unix:///tmp/memcached.sock</host>
      <port>0</port>
      <persistent>0</persistent>
    </server>
  </servers>
</cache>

Peringatan Memcache dan penandaan - apa yang disimpannya

Memcache hanya mendukung satu tingkat hubungan nilai kunci, sehingga tidak dapat menyimpan tag cache Magento (yang digunakan untuk menyiram data cache secara independen). Akibatnya, Anda harus menentukan a slow_backenduntuk mempertahankan hubungan tag konten cache, atau tidak mendefinisikannya sama sekali.

Jika Anda mendefinisikan a slow_backend, Anda menjalankan risiko tag cache semakin besar sehingga kinerja dinegasikan; ada juga masalah inheren yang Anda tidak dapat skala di beberapa server jika setiap server mempertahankan tag cache mereka sendiri.

Jadi ketika menggunakan Memcache, pendekatan yang lebih baik (dengan peringatan Anda tidak dapat membersihkan cache secara mandiri), adalah tidak repot menggunakan slow_backend.

Dalam hal ini, kami sarankan menghapus <slow_backend>database</slow_backend>dan menggantinya dengan:

  <slow_backend>Memcached</slow_backend>
  <slow_backend_options>
    <servers>
      <server>
        <host>unix:///tmp/memcached.sock</host>
        <port>0</port>
        <persistent>0</persistent>
      </server>
    </servers>
  </slow_backend_options>

Ini akan merusak / menonaktifkan level 2 caching (dan mencegah penyimpanan tag), tetapi masih memungkinkan kinerja Memcache.

Yang digunakan

Jika ini adalah penyebaran server tunggal - tidak ada salahnya hanya menggunakan APC untuk semuanya.

Jika ini adalah set-up terdistribusi - maka Anda harus menggunakan Memcache sebagai backend cepat (sehingga semua mesin dapat mengakses toko umum).

Yang lebih memprihatinkan adalah bahwa jika penyedia hosting Anda tidak dapat memberi tahu Anda pengaturan yang tepat untuk digunakan, Anda tentu saja dengan host yang salah.


Atribut: sonassi.com , php.net , repoforge.org

Ben Lessani - Sonassi
sumber
Ketika saya mencoba untuk menonaktifkan slow_backend_cache menggunakan trik ini, saya mendapatkan slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfaceMage 1.7.0.2
Aaron Pollock
6

Saya cukup setuju dengan jawaban sebelumnya, tapi inilah ketepatan yang singkat untuk melengkapinya: Ya, apc dapat digunakan sebagai mesin penyimpan cache dan sebagai pengoptimal kode byte PHP. Tetapi dua poin perlu diklarifikasi:

  • Sebagai backend cepat, arahan konfigurasi yang digunakan oleh APC untuk memahami bagaimana ia harus menyimpan data dikelola melalui arahan apc.user_%. Yang lain hanya menyangkut cache kode byte (Ex apc.ttl: durasi kedaluwarsa untuk cache opcode, apc.user_ttl: durasi kedaluwarsa untuk data yang disimpan dalam cache oleh Magento Anda).

  • Dan sebagai backend cepat, APC memiliki perilaku yang sama persis dengan memcached: APC tidak mengelola tag cache, dan untuk Magento memerlukan backend yang dikonfigurasi (atau digunakan secara default file backend lambat).

Dari pengalaman saya, di situs web dengan lalu lintas besar, jika Anda menggunakan apc sebagai pengoptimal kode byte saja, Anda memerlukan antara 96 ​​dan 256Mo dalam nilai konfigurasi apc.shm_size. Juga tingkatkan apc.num_files_hint dari 1000 menjadi 15000: secara default kode byte cache cache hanya 1000 file dan Magento berisi sekitar ~ 20.000 file PHP dan PHTML secara default ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l). Jadi sesuaikan nilai ini dengan kode sumber Anda.

Jika Anda menggunakan APC atau memcached sebagai backend cepat, sulit untuk memberikan Anda beberapa tips tentang memori yang diperlukan: itu benar-benar tergantung pada kebijakan cache yang diterapkan pada instance Anda.

Untuk saat ini, konfigurasi cache Anda berfungsi seperti ini:

  • setiap konten disimpan dalam memcached dan dalam file
  • Backend cepat selalu diminta sebelum memperlambat backend
  • jika tidak ada yang ditemukan di backend cepat, magento mencari di backend lambat

Mengapa manajemen dua level ini? memcached dan backend cepat lainnya adalah penyimpanan memori. Jadi itu berarti bahwa data dapat rusak atau hilang.

Bagaimana Anda dapat meningkatkan kinerja konfigurasi ini?

Nonaktifkan penulisan kedua mungkin salah satu opsi paling efisien. Ini dijelaskan dalam artikel keempat yang Anda sebutkan. Tetapi Anda tidak dapat menggunakan tanpa modifikasi kode sumber slow_backend_store_data. Dalam konteks Anda, saya tidak merekomendasikan untuk membuat penyesuaian ini karena alasan berikut: data Anda yang disimpan dalam cache tidak akan pernah dapat dikendalikan. Anda akan menyimpan data dalam memori, akan menghasilkan kinerja, tetapi mungkin mengirimkan konten yang tidak valid kepada pengunjung Anda. Jadi, Anda perlu menemukan solusi yang memastikan Anda memiliki akses memori (untuk kinerja yang lebih baik), kontrol tulis, dan kemampuan untuk menonaktifkan caching slow_backend_store_data. Anda dapat mencapai konteks ini dengan:

  • ganti memcached server dengan redis (redis dapat mengontrol baca dan tulis seperti dilakukan oleh sistem file), dan terus menggunakan apc sebagai pengoptimal kode byte

  • * memastikan bahwa Anda dapat menggunakan opsi slow_backend_store_data * baik dengan menyesuaikan kode sumber Anda atau dengan beralih ke database lambat backend (ya itu meningkatkan beban server database Anda, tetapi jika kebijakan cache Anda didefinisikan dengan baik, itu tidak boleh masalah)

  • * Nonaktifkan opsi slow_backend_store_data * : dalam konfigurasi ini tidak diperlukan lagi, Anda telah membaca dan menulis kontrol yang dilakukan oleh redis.

Matthieu MARY
sumber
2

Sebagai catatan tambahan untuk ini, kami telah menemukan bahwa ketika menggunakan APC dengan Magento (untuk caching opcode - kami menggunakan Redis untuk halaman Magento konvensional dan memblokir caching) maka penting untuk memastikan bahwa pengaturan stat adalah 0 dalam produksi (tetapi 1 dalam pengembangan):

apc.stat = 0

Pengaturan apc.stat digunakan untuk menentukan apakah akan memeriksa skrip pada setiap permintaan untuk menentukan apakah skrip itu telah dimodifikasi ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat ) dan pengaturan ini ke 0 dalam lingkungan produksi akan membawa manfaat kinerja APC tidak melakukan pemeriksaan ini dengan setiap permintaan.

Patut dicatat bahwa sekali apc.stat diatur ke 0, Anda kemungkinan harus memulai kembali proses server web Anda untuk mengambil perubahan file (mis. Pasca penempatan) tetapi ini harus tetap menjadi bagian dari strategi pasca penempatan Anda.

simonyoung
sumber
1

Hal terbaik yang kami lakukan untuk mempercepat backend secara signifikan adalah menginstal REDIS sebagai penangan cache . Sekarang juga didukung pada inti dari Magento 1.8 dan lebih tinggi.

Tidak ada yang membandingkan ... sekarang klik klik klik clickerdy

http://www.magentocommerce.com/knowledge-base/entry/redis-magento-ce-ee

Selain itu Anda dapat mempertimbangkan untuk menambahkan ekstensi Sesi Redis untuk juga menambahkan sesi ke server memori redis ...

Semoga berhasil!

snh_nl
sumber
0

Dari file local.xml ini, Magento akan mengambil entri terakhir dan menggunakan Memcache. Saya pikir ada kebingungan antara bagaimana APC dan Memcache dapat bekerja dengan Magento.

Pertama, APC memiliki 2 kegunaan:

  • caching opcode - kompilasi file php Anda menjadi opcode, membuat eksekusi skrip sekitar 25% lebih cepat
  • penyimpanan kunci / nilai - dapat digunakan oleh Magento sebagai sistem cache.

Memcache di sisi lain hanyalah toko kunci / nilai. Keuntungan besar dari Memcache adalah dapat bekerja dalam mode client-server, jadi beberapa server frontend dapat menggunakan cache yang sama, yang merupakan keharusan jika Anda memiliki beberapa server yang melayani situs web yang sama.

Setup yang paling umum adalah menginstal APC untuk mendapatkan caching opcode (sehingga Anda mendapatkan ~ 25% eksekusi skrip lebih cepat) dan menggunakan Memcache sebagai server cache. Saya juga menggunakan APC sebagai sistem cache dan meskipun secara teori seharusnya sedikit lebih cepat daripada Memcache, Anda tidak dapat membedakannya.

Paul Grigoruta
sumber
Jadi jika saya membaca ini: Setup yang paling umum adalah menginstal APC untuk mendapatkan caching opcode (sehingga Anda mendapatkan ~ eksekusi script lebih cepat 25%) dan menggunakan Memcache sebagai server cache. Lalu bagaimana kita bisa menggunakan keduanya bersama-sama? Apakah seperti ini: coeusblue.com/blog/48-magento/65-magento-caching
snh_nl
Untuk menggunakan keduanya bersama-sama, Anda tidak harus menyatakan apa pun yang berhubungan dengan APC sama sekali.
Ben Lessani - Sonassi
Jadi kodenya akan menjadi segalanya? <cache> <backend> memcached </backend> dan tinggalkan bagian pertama
snh_nl
Tambahan. Bagi saya kecepatan backend selalu menjadi ukuran untuk kecepatan keseluruhan (seperti FPC dll tidak berlaku di sini) ...
snh_nl