PHP oturumları dağıtılmış bir sistem genelinde büyütmek zor mısınız?

5 Cevap php

İşte biz Java ve Perl hemen hemen her şeyi, ama ben PHP ve oturumları kullanarak bir özelliği dışında inşa etmek istedim. Bazı peeps birçok sunucularına dağıtılan oluyor çünkü o, bizim sistemde PHP oturumları yapmak için denemek için kötü bir fikir olduğunu düşündüm. Belirli sorunun ne olurdu?

5 Cevap

Özel soru, sorun ne olurdu cevabı, varsayılan PHP dosya sisteminde dosyaları kendi oturumları saklar gerçeği yatıyor. Lütfen oturum verileri her zaman mevcut olacaktır, çünkü isteklerini veren, tek bir Web sunucusu için, bu bir sorun değildir. Ama istekleri, iki yük dengeli webserverların ne hizmet olsaydı?

Kendi dosya sistemi üzerinde oturum dosyası oluşturur isteği ile ilk web sunucusu vurduğunuzu düşünün. Ardından, bir sonraki isteği ikinci webserver vurur. İkinci webserver tabii oturum dosyası görmezsiniz. Kullanıcı, bir web sitesinde oturum olabilir, ve sonra aniden dışarı yapmalısınız.

Bu PHP özgü bir sorun değildir, ve çok yaygındır. Çözüm bazı ortak alanda oturum verilerini depolamak için. Bunun için en yaygın yöntem, tüm web sunucuları veya memcached gibi paylaşılan bazı hafıza önbellek sunucusu için erişilebilir bir veri tabanında ya oturum verilerini depolamak için.

Ayrıca işleyicisi bir kurtarış özel oturumu kullanabilirsiniz:

http://www.php.net/manual/en/function.session-set-save-handler.php

Ben hiç denemedim, ama onunla kendi okuma / kaydetme işlevleri tanımlamak, böylece herhangi bir uzantıları yüklemek için gerek kalmadan bir veritabanı veya paylaşılan NFS backend uygulayabilirsiniz.

Ayrıca @ Eran Galperin tarafından önerilen Msession, ben daha önce bahsedilen bir alternatif olarak çok ilginç görünüyor.

(Ayrıca oturum kümeleme olarak da bilinir) birkaç sunucu arasında oturumların ısrar web uygulamaları ölçekleme için ortak bir sorundur, ve PHP özgü değildir. PHP birkaç tür Zend Platform (ticari uygulama sunucusu) olarak işlemek için çözümler, ve Msession (uzatma) sunuyor.

Oldukça muğlak bir soru, ama ben sorun cevapları belirtilen daha büyük olduğunu söyleyebilirim. Tabii çok, nasıl yükleme ve çerezleri tasarruf geçersiz kılabilirsiniz, ancak bunun da bir bedeli var. Örneğin, aşağıdaki senaryoları / soruları dikkate almak gerekir:

  • Eğer başka bir ana bilgisayarda çerezleri koyarak yapıyorsanız, nasıl bu çerezlerin hızını etkileyecek? Tabii ki / yapmak okur kaç yazar bağlıdır.
  • Are you doing this to increase speed or to have failover? The answer will definitely lead to different solutions:
    • Eğer ağ bağlantısı iner çünkü web sunucusu (ler) oturum mağaza erişemiyorsan nasıl idare edecek, yerine çalışma için yapıyorsun? Ne oturum mağaza aşağı giderse? Muhtemelen (tüm oturumlar belleğe sığabilecek varsa) ekstra yüksek kullanılabilirlik için web sunucusu olarak aynı makine üzerinde ki dağıtılan oturumu mağaza çalışan, usta-master replikasyon çeşit kullanarak bu çözmek zorunda kalacak. Riak veya master-master replikasyon için benzer bir görünüm var.
    • Eğer sadece hız için bu yapıyorsun, ben sadece istemci IP adresi tabanlı yük dengeleme yapmak için apache, nginx veya (hızlı) HAProxy kullanmak istiyorsunuz. Bu şekilde bir dağıtılan oturumu mağazası kurma ile uğraşmak zorunda değilsiniz. Tabii, PHP-örneklerinden biri aşağı giderse kullanıcılar kendi çerezlerini kaybedecektir, ama belki bu bir sorun değil. Bu size kalmış.

kolay memcached veya yeniden dağıtılmış olduğunu.

here is how to do it in redis - we are using it at the moment: http://redis4you.com/articles.php?id=001&name=Redis+as+session+handler+in+PHP