Nasıl digg (veya diğer yüksek yük kategori web) kullanıcı oturumları depolamak?

3 Cevap php

Nasıl digg veya herhangi bir diğer yüksek trafik web sitesi mağaza kullanıcı oturumları yapar? Onlar kullanıcı oturumları saklamak için ne kullanıyorsunuz? Dosya sistemi, DB (tek?), Memcache ya da her ikisi?

Basit bir durumu hayal edelim. Açmış kullanıcı girişi sırasında "Beni hatırla" bayrağını belirledi. Biz son kullanma tarihi 1 yıl ile bir oturum tanımlama kurdum. Örneğin, memcache oturumu tutuyor, ama biz de (benim sürüm) DB Bu oturumun kaydını tutmalı. "Beni hatırla" bayrağı ile sadece kullanıcıların veritabanında saklanır. Bu oturumları saklamak doğru yolu nedir? I (2 veya daha fazla uygulama sunucuları, 2 veya daha fazla veritabanları, memecache sunucuları vb) elbette yüksek trafikli web sitelerini, demek. Küçük web siteleri (dosya sistemi) varsayılan yoluyla oturumu depolama ok.

Ben google arama çalıştı, ancak bu konuda herhangi bir bilgi bulmak için başarısız oldum. Ben "Gelişmiş PHP programlama" kitabından bazı çözümler okudum, ama asıl vurgu aktif depolama işleyicisi özelleştirme yapıldı.

Gerçekten iyi fikir veya bağlantıları duymak umut!

Teşekkür ederim.

3 Cevap

Onlar kesinlikle memcached veya eşdeğerleri vardır.

Alix'ın cevap ek olarak, bu makalede dışarı çıkış ilginizi çekebilir:

Kısa bir alıntı:

What prompted the Memcached as sessions store:

Shortly after the rollout of Digg v3, the non-redundant MySQL session store hardware crashed. This led to a Digg outage. We had always planned that in such a case we would just roll a (trivial) change to put sessions into Memcached rather than MySQL to see how it fared.


So, before you were hitting the db every time for sessions?

Evet.

MySQL was plenty capable of keeping up with the inserts and selects done to deal with sessions. Our problem was actually with clearing out old sessions. The script to delete old sessions, despite being fairly sophisticated in its attempts to not overload the sessions database, still affected it.

We surmise that Memcached will remove expired sessions with less overhead than MySQL.


We used InnoDB for sessions [before memcached]. It wasn't table- or row-level locking. It was OS-level contention. Using Memcached in front of MySQL would've reduced the load and allowed the admin script to do its work, but that highlights the question: why even have MySQL behind memcached at all? We don't need or even want non-volatile sessions. (Important note to reader: you may need or want non-volatile sessions).

"Neden bile tüm memcached arkasında MySQL var?" ... "We need hatta uçucu olmayan oturumları istemiyorum".

Benim uygulamaya geçiş kullanıcı tıklayın beni hatırlıyorum, başka bir kurabiye koymak ve bunu rastgele bir değer atamak vardır.

Ben o kurabiyenin agaist olmayan açmış kullanıcıların kontrol ediniz. O da var db girişi ile eşleşirse, ben, onları oturum oturum açın.

Eğer bir hosting değilse memcache depolamak harika olmalı :)