Arka plan işleri kullanarak sayfaları önbelleğe nasıl?

4 Cevap php

Tanımlar: Kaynak = veritabanı kayıtlarının toplanması, yenilenmesi = bu kayıtları işleme ve çıkış gelen html

Akım:

  • Istemci isteği almak
  • Önbellek kaynak için kontrol edin
  • Önbellek veya önbellek süresi dolmamış olması halinde, yeniden
  • Dönüş sonuç

Sorun rejenerasyon aşaması 10-15 saniye boyunca tek bir sunucu işlemini kravat olabilir. Kullanıcıların bir çift aynı kaynak talep ederseniz, her 10-15 saniyede alarak, aynı anda aynı kaynak rejenere süreçlerin birkaç neden olabilir.

Bu önuç sinyalini "Hey, benim için bu kaynağı yeniden" diyerek bazı arka plan süreci olması preferrable olmaz.

Ama sonra ne kullanıcıya göstermek istiyorsunuz? "Yeniden" kabul edilebilir değildir. Tüm kaynaklar vaktinden önbellek olması gerekir. Veritabanı neredeyse (belleğe sığmayacak kadar büyük) dosya sistemi üzerinde çoğaltılamaz olacağı gibi bu bir sorun olabilir. Bunu önlemek için bir yolu var mı? İdeal değil, ama dışarı tek yol gibi görünüyor.

Ama sonra bir daha sorun var. Nasıl aynı zamanda, bir kaynak rejenerasyonunu talep aynı iki süreç tutmak için? Bir ön aynı kaynağın rejenerasyonu için sorduğunda arka plan işlemi kaynak yenileyici olabilir.

Ben sadece birinin bir platforma özgü çözüm sunmak istiyor durumda PHP ve Zend Framework kullanıyorum. Olsa önemli değil - Ben bu sorun herhangi bir dil / çerçeve için de geçerlidir düşünüyorum.

Teşekkürler!

4 Cevap

Ile Varnish Bir yanıt zamanında geri gelmezse bayat, önbelleğe alınmış içeriği görüntülemek için proaktif önbellek sayfası içeriği ve kullanım lütuf olabilir.

Ödemesiz Enable (end'deki nesneyi retriving ise vernik bayat (ama önbelleklenebilecek) nesneleri hizmet vermektedir)

Sen bayat içeriği ve ne kadar bayat kabul edilecek bir şey alır hizmet etmek ne kadar süre için en iyi ayarları belirlemek için aramalar çimdik gerekebilir, ama sizin için çalışması gerekir. Varnish performance wiki sayfasında daha fazla.

Ben webserver düzeyinde önbelleğe ziyade uygulama tavsiye

Bu durumda bilgi kullanılmadan önce ön oluşturulabilir - Ben her durumda, temelleri aynıdır, farklı şeylerin bir çift için son zamanlarda sadece bu yapmış.

A PHP job is run regularly (maybe from CRON) which generates information into Memcached, which is then used potentially hundreds of times till it's rebuilt again.

Onlar iyi tanımlanmış süreler (60 dakika veya 1 dakika olması) için önbelleğe rağmen, bundan daha sık rejenere edilir. Bir şey yanlış giderse sürece sona önce yeni bir sürümü önbelleğe nedenle, onlar, memcache hiçbir zaman sona erecek. Onları asla sona için tabii ki, sadece düzenlemek olabilir.

Ben de bir kuyrukta aracılığıyla benzer şeyler yaptık - Eğer 'BeanstalkD' ile ilgili Yanıtım önceki soruları görebilirsiniz.

Birkaç sorunları tanımlamak, belki bazı genel fikirler yararlı olacaktır.

Bir sorun oluşturulan içerik böylece sadece toplam içeriğinin bir alt kümesini önbelleğe tamamen saklamak için çok büyük olduğunu, ihtiyacınız olacak: benzersiz belirlenmesi için oluşturulabilir, her içerik nesneyi, bir yöntemin belirlenmesi için bir yöntem eğer bir içerik nesnesi önbellek zaten, arka plan rejenerasyon belirtmek için bayat verileri önbellekte işaretleme için bir politika çalıştırın ve gereken verileri önbellekte süresi dolan ve değiştirilmesi için bir politika. Nesneleri dolan ve bayat nesneleri işaretleme için politika içerik nesneleri arka rejenerasyonu için önceliğini tanımlamak için kullanılması gereken ise sonuçta benzersiz içerik tanımlama basit tutmak performansı ile yardımcı olmalıdır. Bunlar özellikle de nadir bir sorun değil bu ihtiyacı karşılamak için yapılmış bir yazılım paketi kullanmak için, diğer yandan daha etkili olabilir, mevcut önbelleğe alma düzeni basit güncellemeler olabilir.

Başka bir sorun içeriğini yeniden oluşturması işi çoğaltmak istemiyorum olmasıdır. Eğer farklı yetenekleri ile çoklu paralel nesil motorları varsa bu bir şey o kadar da kötü olmayabilir ve her bir görev sıraya ve ilk jeneratör işi tamamlandığında diğer tüm kuyruklar görev kaldırmak için iyi olabilir. Birden fazla arka plan yenilenmesi görevi istemeden iş çoğaltma olmadan aktif olabilir, böylece bir yenilenme devam ederken nesne durumunu izleme düşünün. Bir kez daha, bu mevcut önbellek sistemi içine supplanted veya özel zula yazılım paketi tarafından ele alınabilir.

Üçüncü bir sorun, bir istemci önbelleğe ve rejenere edilmesi gereklidir verileri istediğinde ne ile ilgilidir. Veri tamamen rejenere edilmesi gerekiyorsa size önbelleğe tahmini önalımı içerik nesneleri için bir politika tespit edebilecek uzun içerik üretim süreleri ile yardımcı tamamlamak için, rejenerasyon için müşteri beklemek yapma sıkışmış ancak içerik nesneleri arasındaki ilişkileri tanımlamak için bir yöntem gerektirir olacak . Talep edilen içerik gerçekten kullanılabilir kadar müşteriye bir "yenileyici" sayfasını hizmet etmek istiyorum olsun müşterinizin beklentilerine bağlıdır. İçerik yenilenmesi 10-15 saniye arasında geliştirilmiş olamaz eğer sıkıştırılmış veri arşivleri ile çok düzeyli önbelleklerini düşünün.

Olgun bir web önbellekleme yazılım paketinin iyi yararlanarak olasılıkla bütün bu konular ele alınacaktır. Nick Gerakines ihtiyaçlarınıza uygundur görünmektedir Vernik bahsetti.