Uygun bir önbellek mekanizması seçilmesi

1 Cevap php

Benim kurulum:

  • 4 websunucu
  • Statik içerik sunucusu (NFS mount)
  • 2 db sunucuları
  • 2 "do magic" sunucular
  • Ek bir 8 makineleri çok amaçlı belirlenir.

Onlar biraz normalize şekilde kullanılabilir böylece üç önbelleğe alma mekanizmaları için bir sarıcı yazıyorum: Dosya Sistemi, Memcached ve APC. Ben kullanıma yönelik örnekler (ve ne aslında her önbellek koymak için) ile gelip çalışıyorum.

File System

Biz üretmek ve daha sonra statik hizmet içeriği Kolları. RSS Bu, tüm statik sunucuya önbelleğe .. vs eski rapor verileri, kullanıcı belirli sayfaları, beslenir.

Memcached

PHP oturum verileri, MySQL sorgu sonuçları, bizim sistemleri arasında mevcut olması gereken genel şeyler. Biz sunucu havuzunda dahil edilebilir 8 makineleri vardır.

APC

Hiçbir fikrim yok. İki "do sihirli" sunucular herhangi bir dağıtılmış sisteminin parçası değildir, bu yüzden onlar oradan APC ve iş sorgu sonuçlarını önbelleğe nitelikte olduğu görülmektedir. Geçmiş, ben bir şey düşünemiyorum.

Query Caching

Bizim SQL kullanımı, sorgu önbelleğe alma reduces performansı doğası göz önüne alındığında. Ben bu devre ettik.

Genel olarak, hangi tür verileri nerede saklanmalıdır? Bu kurulum bile mantıklı mı?

Bir dağıtık sistemde bir APC veri önbellek (Ben birini düşünemiyorum) için herhangi bir kullanımı var mı?

Ben bu işler daha kolay ya da daha verimli kılacak eksik bir şey var mı?

Düzenleme: Ben Pascal nihayet, ne dediğini anladım. Bunu ben sadece APC ne olursa olsun benim yapılandırma / bir kısmını hareketli olması ve hala diskten dosyanın geri kalanını yükleme olacağını kafamın içinde sıkışmış vardı. Başka bir öneriniz?

1 Cevap

Bazı projeler için önbelleğe alma mekanizmasından aynı tür kullanıyorum; ve biz önbelleğe alma sistemleri gibi APC + memcached kullanıyor.

Bu önbelleğe alma veri geldiğinde APC ve memcached arasında iki / üç temel fark vardır:

  • Sadece yerel olduğu gibi APC erişim, biraz daha hızlı (something like 5 times faster than memcached, if I remember correctly) olduğunu - dahil hiçbir ağ yani.
  • Using APC, your cache is duplicated on each server ; using memcached, there is no duplication accross servers
    • hangi memcached tüm sunucular verilerin aynı sürümüne sahip olmasını sağlar anlamına gelir; APC saklanan veriler her sunucuda farklı olabilir iken


We generally use :

  • APC for data that has to be accessed very often, is quick to generate, and :
    • sık sık değiştirilmez ya
    • tüm sunucularda aynı değilse ya da farketmez
  • memcached for data that takes more time to generate, and/or is less used.
    • Veya modifikasyonlar görünür anında olması gereken için veri için (i.e. when there is a write to the DB, the cached entry is regenerated too)

Örneğin, biz olabilir:

  • Use APC to store configuration variables :
    • Sık sık değiştirin etmeyin
    • Çok sık erişilen
    • Küçük
  • Use memcached for content of articles (for a CMS application, for example) :
    • Bu, küçük ve onları bir sürü yalnız tek bir sunucu üzerinde var daha daha fazla bellek gerekebilir anlamına gelir, orada değil
    • Üretmek için ağır / Oldukça sert


A couple of sidenotes :

  • Birkaç sunucuları NFS aracılığıyla paylaşılan aynı dosyaya yazmaya çalışırsanız NFS (as far as I remember) hiçbir kilitleme mecanism olduğu gibi, sorunlar olabilir
  • APC evet, önbellek verileri için kullanılan olabilir - ama bunu kullanmak için en önemli nedeni (can save a large amount of CPU on the PHP servers) opcode önbelleğe alma özelliği var olduğunu
  • Memcached Girişler boyutu sınırlıdır: Eğer 1M daha büyük bir kaydı giremezsiniz (I've sometimes run into that problem -- rarely, but it's not good when it happens ^^ )