Kümelenmiş bir ortamda Önbellekleme

5 Cevap php

Uygulama kodu sizin verileri önbelleğe genellikle, birçok nedenden dolayı iyi bir fikirdir. Biz ColdFusion,. NET ve PHP içerir bizim paylaşılan bir ortamda sessiz bir süre için bu yapıyor varlık var. Bizim organizasyon diğer birçok geliştirme grupları ile bu ortamı paylaşmak Ancak, çünkü o zaman (ya da bizim müşteriler) takdir ölçüde daha kesinti yoktur.

Bu nedenle, web yöneticileri, yeni bir ortam sağlamak için hareket ediyor. Bu ortamda onlar mevcut Dev ve Prod ortamları arasında bir QA seviyesini ekliyoruz. Ayrıca, çalışma süresini artırmak için, onlar QA ve Prod düzeyinde hem de makineleri kümelendiği.

Bu, birçok nedenden dolayı hepsi harika. Ben bir sorun bakın bir alan önbelleğe alma ile. Önbellek, iki (veya daha fazla düğüm sayısına bağlı olarak) takımları olacak. Tahmin edebileceğiniz gibi, bu aşağıdaki olası sorunu oluşturur. Cache düğüm A aynıdır ve B. Kullanıcı 1 güncellemeler veri ve böylece önbellek düğüm A. Kullanıcı 2 güncellenen verileri sorgulamak için geliyor ama düğüm B ve bu nedenle eski veri var olsun.

Bu işlemek için nasıl en iyi yöntemler onların mı?

Benim kod yapabilirsiniz değişikliği herhangi bir tür var mı?

Uygulanabilir sunucu ayarları var mı?

5 Cevap

Içerik önbelleğe alma için temel iki yaklaşım 1) merkezileşme ve 2) replikasyon.

Her çeşitli şekillerde ve karmaşıklık çeşitli düzeylerde için uygulanabilir.

Eğer web sunucuları sadece küçük bir grup bahsediyoruz, o zaman basit bir merkezileşme kurulum istediğiniz şeydir. Ben ortamı başına bir memcached sunucu tavsiye ederim (ki PHP supports). Yani model, hem düğümler A ve B yeni bir düğümden önbelleğe alınan verileri kullanmak olacaktır: C düğümüne

Çoğaltma daha ölçeklenebilir bir çözümdür, ama aynı zamanda önemli ölçüde daha karmaşık uygulamaya bulunuyor. Ama ben bu konuda endişelenmenize gerek şüpheliyim (facebook, youtube, wikipedia düşünüyorum) bu yolu gitmek vast trafik hacmi vurmak gerekir.

Kümelenmiş ColdFusion örneği ile ColdFusion Multiserver yapılandırma kullanırken, kümede Oturum çoğaltma kullanabilirsiniz, ancak önbelleğe alınan veriler sürekli tefrika ve kümedeki diğer sunuculara sıralıyor olduğundan idareli kullanmak. Sen (CFWDDX) karmaşık verileri serialize olabilir ve bir veritabanında depolamak, sonra nerede kaydı bulmak için çoğaltmak için oturum kapsamında birincil anahtarı saklamak, ve belki önbelleğe alınan verileri gösteren bir bayrak için diğer sunucuları neden olacağı değiştirildi veritabanından kendi önbelleği yenilemek.

Eğer ColdFusion 9 çalıştırıyorsanız, siz başlık altında ehcache uygulayan yeni yerleşik önbelleğe kullanabilirsiniz. Kümelenmiş bir ortamda, bu (XML literaly sadece birkaç satır) RMI kullanan bir çoğaltılmış küme önbellek kurmak çok kolay. Burada ColdFusion 9 önbelleğe alma benim dizi görmek:

http://www.brooks-bilson.com/blogs/rob/index.cfm/Caching

Kümelenmiş önbellek kurma hakkında yazılan henüz bitmiş değil, ancak doğrudan benimle irtibata geçerseniz, ben size daha spesifik talimatlar ile birlikte ehcache.xml dosyası için ihtiyaç duyacağınız yapılandırma sağlayabilir.

Veritabanı depolama için karmaşık veri wddxing bir nokta yukarıdaki Peter tarafından önerilen bu merkezileşme bir araçtır olduğunu. Sunucular, değiştirilmişse gösteren bir referans veri anahtarı ve bayrağı çoğaltma olacaktır. Sonra değişikliği üzerine diğer sunucular değiştirilmiş verileri sorgulamak ve değiştirmek bayrağı tekrar kuruldu kadar önbelleğe olacaktır. Her sunucu sadece bir kez değişim başına veritabanını sorgulamak istiyorsunuz, ve veri merkezi ve sadece bellekte tutulur değil.

Veri çok karmaşık değilse, o zaman Session Çoğaltma hiç bir veritabanı ile ilgili olmadan istediğinizi gerçekleştirebilirsiniz. (Tüm diğer üyelerin veri çoğaltmak olarak replikasyon miktarı katlanarak artacak çünkü) performansı küme sunucuların sayısıyla ters orantılıdır ve veri miktarı çoğaltıldı.

Eğer coldfusion kolayca ve doğrudan önbelleğe alma yapmak için memcached kullanmak sağlayacak java memcached istemci bir cf uygulama yoktur.

http://memcached.riaforge.org/

Ben webserver'lerin aynı küme üzerinde çalıştırmak zorunda bile, tek bir önbellek veri elemanları için yer ve küme fazlalık parası alacağı, memcached lehine çok güçlü bir oy olur.