Hangi PHP (opcode) önbelleğini kullanmalısınız ve neden?


44

APC, XCache, Memcache, eAccelerator vb. Gibi bazı PHP (opcode) önbelleklerini duymaya devam ediyorum.

Ama nasıl birini seçeceğimi bilemedim. Hangi önbellekleme sisteminin sağlaması beklenen performans yararından başka, hangi faktörlerin endişe kaynağı olması gerektiği.

Sence neden X önbellek sisteminin Y'den daha iyi olduğunu söyleyeceksiniz? Göreceli performans kazancı hakkında daha az endişeleniyorum. Herhangi iki sistem arasındaki küçük farklar daha az önemlidir.

Soruma genel bir cevap mümkün değilse, işte birkaç işaretçi. Mediatemple (root erişimi olan) özel VPS kullanıyorum. RAM 512 MB (fiziksel) + 400 MB (takas) WordPress ve kuzenleri WordPress-MU ve BuddyPress hakkında endişeliyim. Kodlarımızın / sitelerimizin% 90'ı WordPress ailesine girmektedir.

Bazı yardımlarınız için şimdiden teşekkür ederiz.

Yanıtlar:


33

Listelenen ürünler farklı amaçlara hizmet eder.

OPCode önbellekleri

Bu Vikipedi listesinde görüldüğü gibi çok sayıda PHP Hızlandırıcı (OPCaches) vardır . Açık kaynaklı ürünlerde olduğu gibi hepsi de oldukça benzer. XCache, lighttp PHP hızlandırıcısıdır ve bu HTTPd'yi çalıştırırken varsayılan seçimdir. Apache ile de iyi çalışıyor, ancak APC sosyal olarak biraz daha "diğerleri ile iyi oynuyor" gibi görünüyor, resmi olarak PHP'nin bir parçası olarak destekleniyor ve resmi PHP dağıtımı ile adım adım yayınlanıyor.

Yavaşlayan gelişmesi ve PHP sürümlerine karşı gecikmesi ve benzer performansla APC'nin sunduğu resmi kutsanmış statü nedeniyle eAccelerator'ı kullanmamdan vazgeçtim.

Bu ürünler tipik olarak düşer; kod değişikliği anında performans artışı yok. Büyük kod tabanlarıyla (Drupal, Wordpress), yanıt süresini ve bellek kullanımını azaltırken performans 3 kat daha iyi olabilir .

Veri Önbelleğe Alma

Memcache biraz farklı bir üründür - Bir olarak düşünmek olabilir hafif anahtar değer sisteminin edilebilir birden fazla sunucuya ölçekli . Yazılım, Memcache'i destekleyecek şekilde geliştirilmelidir ve bazı sorunları diğerlerinden daha iyi çözer. Web sitenizde gerçek zamanlı hisse senedi değerlerinin bir listesi varsa, web sitenizde görüntülenen geçerli değerin yerleşik listesini tutmak için Memcache kullanabilirsiniz. Kısa süreli tekrar kullanım için oturum verilerini depolamak için kullanabilirsiniz. Tam sayfa önbellekleri veya MySQL'in yerine başka şeyler için kullanmazsınız.

Ayrıca Wordpress'in performansını büyük ölçüde artırabilen WP-Super-Cache gibi Wordpress eklentileri de vardır (Infact, WP-Super-Cache pek çok durumda statik HTML tabanlı sitelere rakip olabilir)

Özetle - "ayarla ve unut, iyi desteklenmiş bir ürün" istiyorsanız APC'yi şiddetle tavsiye ederim.


Bu cevap Meta üzerinde tartışılmaktadır: meta.stackexchange.com/questions/15474/…
Brad Gilbert

[4]: http://Düzeltmek için " " doldurun .
Brad Gilbert

Bir ton teşekkürler SirStan! Cevabınız sadece sorunumu çözmedi aynı zamanda önbellek dünyası hakkında daha fazla bilgi edinmeme yardımcı oldu. Sadece sana bir şey daha sormak istiyorum. Ben zaten wp-supercache kullanıyorum. APC ile birleştirmek iyi bir fikir midir? APC performansı önemli ölçüde artıracak mı? APC ve Wp-SuperCache birlikte çalışacak mı? İkisine de ihtiyacım var mı? Yoksa APC WP-SuperCache'i gereksiz kılar mı?
rahul286

Not: APC hem veri önbelleğe alma hem de op-kod önbelleğe alma işlemini yapar.
lo_fye

2
Bu cevap şimdi çok eski. APC'nin, V. 5.5'ten beri Zend'in optimize edicisi ve opcode önbelleği (şimdi opcache olarak da bilinir) ile değiştirilen gelecekteki PHP sürümleri için güncellenmesi olası değildir. Bununla birlikte, performansta önemli bir fark görmedim ( symcbean.blogspot.co.uk/2013/09/… ) ayrıca opcache'de veri desteğinin olmaması ve bellek geri ödemelerinin eksikliği bazılarının için sayaç yükseltme işleminin verimli olmasına neden olabilir.
symcbean 26:15


6

APC PHP6 içerisine yerleştirilecektir, bu yüzden mantıklı bir seçim. Kullanıyorum ve performans artışı şaşırtıcı. Opcod dışında bir şeyi önbelleğe almanız gerekiyorsa (yani, db sorgusu sonuçları), bunun için APC'yi de kullanabilirsiniz, ancak APC önbelleklerini birden fazla sunucu arasında paylaşmak mümkün değildir. Yalnızca tek bir sunucuda önbelleklemeniz gerekirse, APC mükemmeldir. Birden fazla sunucuya ölçeklendirmeniz gerekiyorsa ve bunlar arasında bir önbellek paylaşmak istiyorsanız, memcached sizin adamınız.

Yine de yapacağım bir şey, herhangi bir (opcode olmayan) önbellekleme için bir sarmalayıcı sınıfı oluşturmaktır. Bu şekilde, kodunuzu değiştirmeden önbellekleme motorunu değiştirebilirsiniz.


VAY. APC'nin resmi statüsünü bilseydim, uzun vadeye geri dönebilirdim ... :-) Ayrıca, opcode / opcode olmayan önbellek farkları hakkında pek bir şey bilmiyordum. Kişisel bir tercih olarak, önbellekleme env ile uyum sağlamalarına yardımcı olmak için sarmalayıcı sınıfları oluşturma ya da uygulamalarımın kaynağını değiştirme yönünden baş etmek istemiyorum.
rahul286

6
PHP 5.5 beri "resmi" işlem kodu önbellek olarak Zend Opcache entegre, ben onlar PHP 6 için APC geçiş yaparız olası olduğunu düşünüyorum, unutmayın
Matteo Tassinari

1
Bunu düzeltmek için: PHP 5.5 gerçekten Zend Opcache ile birlikte geliyor. PHP 6 olmayacak. Bunun yerine PHP 7 olacak. APC neredeyse (?) Eski kabul edilir.
Jisse Reitsma

6

Sadece bazı şeylerin biraz değiştiğini not etmek ve APC'nin PHP 6 çekirdeğine dahil edilmeyeceği anlaşılıyor.

APC yavaş gelişme gösteriyor ve hiç bir zaman PHP 5.5 uyumlu olmayacak gibi görünüyor. Bu nedenle, PHP'den gelen çocuklar Zend OPCache opcode önbellek uzantısını PHP CORE uzantısı olarak ayarlayacak gibi görünüyor. Http://wiki.php.net/rfc/optimizerplus adresinde daha fazla okuyabilirsiniz .

Önemli not: Zend OPCache, APC gibi kullanıcı veri önbelleğine sahip değildir, bu nedenle kullanıcı veri önbelleğine ihtiyacınız olursa, Memcache ile birlikte kullanabilirsiniz.


1
Ayrıca, dolduğunda tüm önbelleği geçersiz kılar (geçersiz girişler kaldırılmaz) - bu nedenle, bellekten daha fazla kodunuz varsa veya sık konuşlandırıyorsanız, performans artışlarını görmeyi bekleyin.
symcbean

3

En az 5.50 PHP sürümü kullanıyorsanız, OpCache en iyi seçeneğinizdir (PHP / PECL yerel kütüphanesi). İkiliden yüklüyse önceden derlenmiş olarak gelmelidir.

http://php.net/manual/en/book.opcache.php

5.5'ten önce PHP versiyonunu çalıştırıyorsanız, APC (PHP / PECL yerel OpCode önbelleği), en basit seçenek olacaktır;

http://php.net/manual/en/book.apc.php

PHP'nin yerel OpCache işlevselliğini kullanmak, size 3. taraf kütüphanelerini koruma sıkıntısından kurtulmanızı sağlamalıdır.


1
PHP <5.5 kullanıyorsanız, yapmanız gereken ilk şey onu güncellemektir.
Michael Hampton

@ michael-hampton :: Nitekim! Ancak bazı nadir durumlarda, işletim sistemini yükseltmeden PHP'yi güncelleyemezsiniz, bu da yeni bir donanım gereksinimi anlamına gelebilir. Örnek - IBM i-series sunucuları çalıştıran bir şirkette çalışıyorum, sürüm 6sethethings. PHP sürümümüz 5.4.3. IBM, PHP sürümlerinin taşınması için Zend'e güvendiğinden, PHP 5.6, IBM-i OS - 7.1 veya daha yeni bir sürümü (ve daha sonra Zend PHP sunucusunun daha yeni bir sürümünü gerektirir) gerektirir; ... meh.
recurse

0

Memcache anahtar / değer çiftlerini önbelleğe alır, opkodları değil. Opcode önbelleklerden biriyle birlikte kullanabilirsiniz.


Görünüşe göre SirStan'ın cevabı (aşağıda) memcache'in PHP uygulamalarımı değiştirmek için bana ihtiyacı olabilir. Aslında Wordpress kullanıyorum ve temel kodunu değiştirmek iyi bir fikir olmayacak.
rahul286
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.