Hız: APC ve Memcached ile Magento


17

Birçok forum inceledik ve aşağıdakilerin cevabını bilmiyoruz. İkimiz de var APCve Memcachesunucularımıza kurduk. Doğru ve en iyi yapılandırmanın ne olduğundan emin değiliz.

Benim sorum

Hem Memcache + APC'yi aynı anda kullanarak Magento'yu çalıştırmak için en iyi ayarlar hangileridir? (Yoksa bu hiç de akıllı değil)

Arkaplan araştırması

Burada Memcache ve APC'ye hızlı ve yavaş önbellek (disksiz) önerilmektedir. Bunun sesi sadece yeterli RAM'iniz olduğunda işe yarar (ve bundan emin olun)

Ve bu makale Memcache veya APC hakkında - ve her ikimiz de

Ve burada Memcache'in sadece yavaş bir arka uç tanımladığınızda gerçekten çalıştığını belirtiyor

Ve sanırım bu makale aynı şeyi söylüyor

Bu benim ISS'mizin local.xml çözümü

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

Durum

Paylaşılan barındırma Brim FPC yüklendi: http://ecommerce.brimllc.com/full-page-cache-magento.html (bu FPC'de daha karmaşık hale getirmek için ölçeklenebilir bir dosya önbelleği de vardır)


@sonassi, neden memcached-tag yerine olmasın? code.google.com/p/memcached-tag

Yanıtlar:


26

Bunların nasıl kullanılacağını anlamak için bu iki ürün arasındaki açık ayrımı anlamanız gerekir.

  • APC bir hem işlem kodu önbellek ve Hızlı arka uç
  • Memcache sadece hızlı bir arka uç

APC'yi OPCode Önbelleği olarak kullanma

Modülü sunucunuza kurmanız yeterlidir

pecl install apc

Ve bunu php.ini

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

Daha sonra çalışma zamanı yapılandırmasını etkinleştirip ince ayar yapabilirsiniz , örn.

apc.enabled
apc.shm_segments
apc.shm_size
apc.optimization
apc.num_files_hint
apc.user_entries_hint
apc.ttl
apc.user_ttl
...

Sonra PHP / Apache'yi yeniden başlatın

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

Bundan sonra yapacak başka bir şey yok. APC'nin hızlı bir şekilde etkinleştirildiğini onaylayın phpinfo()- ancak aksi takdirde bu noktada APC'nin OPCode önbellek kısmı etkindir.

Magento'nun tarafında hiçbir şey yapılandırmaya gerek yok.

APC'yi Hızlı Arka Uç Olarak Kullanma

Şunlara aşağıdakileri eklemeniz gerekir: ./app/etc/local.xml

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

Ardından mevcut mağaza önbelleklerinizi yıkayın. Çalıştığını doğrulamak için ön uca bir sayfa yükleyin; ./var/cachedizin boş kalmalıdır.

Memcache'i Hızlı Arka Uç Olarak Kullanma

Memcache'i bir PHP uzantısı olarak yüklemeniz ve ilgili Memcache Daemon'u (Memcached) sunucunuza kurmanız gerekir.

pecl install memcache

Ve php.ini dosyasında etkinleştirin

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)

Sonra sunucuya Memcached yükleyin. RH / Centos için URL'yi sürüm sürümünüze ve CPU mimarinize uyacak şekilde ayarlayın.

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)

Daha sonra Memcache'i hızlı bir arka uç olarak kullanmak için Magento'yu değiştirin, soket yolunu TCP / IP bağlantısına uyacak şekilde değiştirin.

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

Memcache ve etiketleme uyarıları - ne saklıyor

Memcache yalnızca tek bir anahtar / değer çifti ilişkisini destekler, bu nedenle Magento önbellek etiketlerini (önbellek verilerini bağımsız olarak temizlemek için kullanılan) depolayamaz. Sonuç olarak, slow_backendönbellek içerik etiketi ilişkisini sürdürmek için bir belirtmeniz gerekir veya hiç tanımlamamanız gerekir.

A tanımlarsanız slow_backend, performansın reddedileceği kadar büyük önbellek etiketlerinin riskini alırsınız; her sunucu kendi önbellek etiketlerini koruyorsa, birden fazla sunucuda ölçeklendirememenizin doğasında var olan bir sorun vardır.

Bu yüzden Memcache kullanırken, daha iyi bir yaklaşım (önbellekle önbellekleri bağımsız olarak yıkayamazsınız) slow_backend,.

Bu durumda, kaldırmanızı <slow_backend>database</slow_backend>ve değiştirmenizi öneririz :

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

Bu, 2. önbellek düzeyini keser / devre dışı bırakır (ve etiket depolamayı önler), ancak yine de Memcache'in performansına izin verir.

Hangisi kullanılır

Tek bir sunucu dağıtımı varsa - her şey için sadece APC kullanmanın bir zararı yoktur.

Dağıtılmış bir kurulum ise - o zaman hızlı arka uç olarak Memcache'i kullanmanız gerekir (böylece tüm makineler ortak mağazaya erişebilir).

Daha fazla ilgili ise, hosting sağlayıcınız size doğru kullanım için ayarlayamazsa, kesinlikle yanlış ev sahibi ile olmasıdır.


Atıflar: sonassi.com , php.net , repoforge.org


Bu hileyi kullanarak slow_backend_cache'yi devre dışı bırakmaya çalıştığımda slow_backend must implement the Zend_Cache_Backend_ExtendedInterface interfaceMage 1.7.0.2'ye giriyorum
Aaron Pollock

6

Önceki cevaplara oldukça katılıyorum, ancak burada bunu tamamlamak için kısa bir hassasiyet var: Evet, apc hem önbellek depolama motoru hem de PHP bayt kodu optimize edici olarak kullanılabilir. Ancak iki noktanın açıklığa kavuşturulması gerekiyor:

  • Hızlı bir arka uç olarak, APC tarafından verilerin nasıl kaydedilmesi gerektiğini anlamak için kullanılan yapılandırma yönergeleri apc.user_% yönergeleri aracılığıyla yönetilir. Diğerleri yalnızca bayt kodu önbelleği ile ilgilidir (Örn apc.ttl: opcode önbelleği için sona erme süresi, apc.user_ttl: Magento'nuz tarafından önbelleğe kaydedilmiş verilerin depolanma süresi).

  • Hızlı bir arka uç olarak APC, memcached ile tamamen aynı davranışa sahiptir: önbellek etiketlerini yönetmez ve Magento için yapılandırılmış bir yavaş arka uç gerektirir (veya varsayılan olarak yavaş arka uç dosyasını kullanır).

Deneyimlerime göre, yoğun trafiğe sahip web sitelerinde, yalnızca bayt kodu optimize edici olarak apc kullanıyorsanız, apc.shm_size yapılandırma değerinde 96 ile 256Mo arasında bir süreye ihtiyacınız vardır. Ayrıca apc.num_files_hint değerini 1000'den 15000'e yükseltin: varsayılan olarak apc önbellek bayt kodu önbelleği yalnızca 1000 dosya ve Magento varsayılan olarak yaklaşık ~ 20.000 PHP ve PHTML dosyası içerir ( find . -type f -name "*.php" -o -name "*.phtml" | wc -l). Bu değeri kaynak kodunuzla özelleştirin.

APC kullanıyorsanız veya hızlı arka uç olarak memcached kullanıyorsanız, gerekli bellek hakkında bazı ipuçları vermek zordur: bu gerçekten örneğinize uygulanan önbellek politikasına bağlıdır.

Şimdilik, önbellek yapılandırmanız şöyle çalışıyor:

  • her içerik hem memcached'de hem de dosyada saklanır
  • Yavaş arka uçtan önce her zaman hızlı arka uç istenir
  • hızlı arka uçta hiçbir şey bulunmazsa, magento yavaş arka uçta arar

Neden bu iki seviye yönetimi? memcached ve diğer hızlı arka uçlar bellek depolarıdır. Bu, verilerin bozulabileceği veya kaybolabileceği anlamına gelir.

Bu yapılandırma performansını nasıl artırabilirsiniz?

İkinci yazıyı devre dışı bırakma muhtemelen en etkili seçeneklerden biridir. Bu, bahsettiğiniz dördüncü makalede açıklanmaktadır. Ancak, slow_backend_store_data kaynak kodunda değişiklik yapmadan kullanamazsınız. Bağlamınızda, aşağıdaki nedenlerle bu özelleştirmeyi yapmanızı önermiyorum: önbellekte depolanan verileriniz hiçbir zaman denetlenmez. Verileri bellekte depolayacak, performans kazanacaksınız, ancak belki de ziyaretçilerinize geçersiz bir içerik göndereceksiniz. Bu nedenle, bellek erişimine (daha iyi performans için), yazma denetimine ve slow_backend_store_data önbelleğe almayı devre dışı bırakma yeteneğine sahip olmanızı sağlayan bir çözüm bulmanız gerekir. Bu bağlama aşağıdaki yollarla ulaşabilirsiniz:

  • memcached sunucusunu bir redis sunucusuyla değiştirin (redis, bir dosya sistemi tarafından yapıldığı gibi okuma ve yazma işlemlerini kontrol edebilir) ve apc'yi bayt kodu optimize edici olarak kullanmaya devam eder

  • * slow_backend_store_data seçeneğini kullanabildiğinizden emin olun * ya kaynak kodunuzu özelleştirerek ya da bir veritabanı yavaş arka ucuna geçerek (evet veritabanı sunucunuzun yükünü artırır, ancak önbellek politikanız iyi tanımlanmışsa, bir sorun)

  • * slow_backend_store_data seçeneğini devre dışı bırak seçeneği * : bu yapılandırmada artık gerekli değildir, redis tarafından yapılan okuma ve yazma kontrolüne sahipsiniz.


2

Buna ek bir not olarak, APC'yi Magento ile kullanırken (opcode önbellekleme için - geleneksel Magento sayfası ve blok önbellekleme için Redis'i kullandığımız), o zaman stat ayarının üretimde 0 olduğundan emin olmak önemlidir (ancak 1 geliştirme):

apc.stat = 0

Apc.stat ayarı, değiştirilip değiştirilmediğini belirlemek için her istekte bir komut dosyasının kontrol edilip edilmeyeceğini belirlemek için kullanılır ( http://www.php.net/manual/en/apc.configuration.php#ini.apc.stat ) ve böylece bunu bir üretim ortamında 0 olarak ayarlamak, APC'nin her istekte bu kontrolü yapmamasının performans avantajını getirecektir.

Apc.stat değeri 0 olarak ayarlandığında, dosya değişikliklerini (yani dağıtım sonrası) almak için web sunucusu işleminizi yeniden başlatmanız gerekeceğini, ancak bunun yine de dağıtım sonrası stratejinizin bir parçası olması gerektiğini belirtmek gerekir.


1

Arka ucu önemli ölçüde hızlandırmak için yaptığımız en iyi şey REDIS'i bir önbellek işleyici olarak kurmaktır . Şimdi Magento 1.8 ve sonraki sürümlerde de desteklenmektedir.

Hiçbir şey karşılaştırıyor ... şimdi tıklayın clickerdy ​​tıklayın

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

Ayrıca, redis bellek sunucusuna oturum eklemek için Redis Oturum uzantısı eklemeyi de düşünebilirsiniz ...

İyi şanslar!


0

Bu local.xml dosyasından Magento son girişi alır ve Memcache kullanır. APC ve Memcache'nin Magento ile nasıl çalışabileceği arasında bir karışıklık olduğunu düşünüyorum.

İlk olarak, APC'nin 2 kullanımı vardır:

  • opcode önbellekleme - php dosyalarınızı opcode'a derleyin, betiğin çalıştırılmasını kabaca% 25 daha hızlı yapın
  • anahtar / değer depolama - Magento tarafından önbellek sistemi olarak kullanılabilir.

Memcache ise sadece bir anahtar / değer deposudur. Memcache'nin en büyük avantajı, istemci-sunucu modunda çalışabilmesidir, bu nedenle birden fazla ön uç sunucusu aynı önbelleği kullanabilir, bu da aynı web sitesini sunan birden fazla sunucunuz varsa bir zorunluluktur.

En yaygın kurulum, opcode önbelleğe almak için APC'yi yüklemek (böylece ~% 25 daha hızlı komut dosyası yürütme elde etmek) ve Memcache'i önbellek sunucusu olarak kullanmaktır. APC'yi önbellek sistemi olarak da kullandım ve teoride Memcache'den biraz daha hızlı olsa da, farkı söyleyemezsiniz.


Bunu okursam: En yaygın kurulum, opcode önbelleğe almak için APC'yi yüklemek (böylece ~% 25 daha hızlı komut dosyası yürütme elde edersiniz) ve Memcache'i önbellek sunucusu olarak kullanmaktır. Öyleyse ikisini birlikte nasıl kullanabiliriz? Şöyle
snh_nl

Her ikisini birlikte kullanmak için, APC ile hiçbir şey beyan etmek zorunda değilsiniz.
Ben Lessani - Sonassi

Kod her şey olurdu? <cache> <backend> memcached </backend> ve ilk bölümü dışarıda bırakın
snh_nl

Ek olarak. Benim için arka uç hızı her zaman toplam hız için bir ölçü olmuştur (FPC vb burada uygulanmadığı için) ...
snh_nl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.