2010-01-18 10 views
6

W jaki sposób digg lub inne sesje użytkowników sklepu internetowego o dużym natężeniu ruchu? Do czego służą do przechowywania sesji użytkowników? System plików, DB (który?), Memcache lub oba?Jak strony digg (lub inne witryny o dużym obciążeniu) przechowują sesje użytkownika?

Wyobraźmy sobie prostą sytuację. Zalogowany użytkownik ustawił flagę "Zapamiętaj mnie" podczas logowania. Ustawiliśmy plik cookie sesji z datą wygaśnięcia 1 rok. Na przykład utrzymujemy sesję w memcache, ale powinniśmy również zachować zapis tej sesji w DB (w mojej wersji). Tylko użytkownicy z flagą "Zapamiętaj mnie" są zapisani w DB. Czy jest to właściwy sposób przechowywania sesji? Mam na myśli strony o dużym ruchu, oczywiście (z 2 lub więcej serwerami aplikacji, 2 lub więcej bazami danych, serwerami memecache itp.). W małych witrynach przechowywanie sesji metodą domyślną (w systemie plików) jest w porządku.

Próbowałem wyszukać google, ale nie udało mi się znaleźć żadnych informacji na jego temat. Czytałem niektóre rozwiązania z książki "Zaawansowane programowanie PHP", ale główny nacisk został położony na dostosowanie sesji obsługi sesji.

Naprawdę mam nadzieję usłyszeć dobre pomysły lub linki!

Dziękuję.

Odpowiedz

5

Z pewnością używają one memcached lub odpowiedników.

+0

Tak, rozumiem, ale co długotrwałego przechowywania sesji? Co z sytuacją, gdy użytkownik oznaczył pole wyboru "Zapamiętaj mnie"? Oznacza to, że powinienem przechowywać tę sesję nie tylko w memcache (nie mogę przechowywać danych sesji użytkownika w memcache od tygodni) ... ... a może używają innego mechanizmu "zapamiętaj mnie"? Dziękujemy! – Kirzilla

+2

Możesz przechowywać sesje w bazie danych, gdziekolwiek indziej i używać memcached. Nikt nie zabrania ci tego robić. Co się dzieje, to powiedzmy, że kiedy "wrócisz", zostaniesz "zapamiętany" przez wywołanie bazy danych (lub wywołanie casandra linii płaskiej), więc chache będzie tęsknić, ale z następnego żądania pamięć podręczna wykona zadanie. Jeśli jesteś w pełni "zapomniany", obie zwrócą się źle. –

+0

To jest dokładnie to, co chciałem usłyszeć. Dziękujemy! – Kirzilla

6

Oprócz odpowiedzi Alix jest, może być zainteresowany w kasie z tego artykułu:

krótki fragment:

Co skłoniło Memcached sesje sklepu:

Krótko po rollout z Digg V3 nie-zbędny MySQL sesja sklep sprzętu rozbił. Doprowadziło to do awarii Digg . Zawsze planowaliśmy, że w takim przypadku po prostu zmienilibyśmy (banalną) zmianę, aby umieścić sesje w Memcached, a nie MySQL, aby zobaczyć, jak radził sobie .


Więc zanim zostały uderzania db za każdym razem na sesje?

Tak.

MySQL był w pełni zdolny do nadążania za wstawkami i wybiera zrobione, aby poradzić sobie z sesjami. Nasz problem polegał na wyczyszczeniu starych sesji . Skrypt , aby usunąć stare sesje, mimo iż był dość wyrafinowany w swoich próbach , aby nie przeciążyć bazy danych sesji, wciąż miał na nią wpływ.

Zakładamy, że Memcached usunie wygasłych sesji z mniejszym obciążeniem niż MySQL.


Użyliśmy InnoDB dla sesji [przed memcached]. Nie było to blokowanie na poziomie tabeli lub wiersza. Był to poziom rywalizacji na poziomie systemu operacyjnego. Używanie Memcached przed MySQL zmniejszyłoby obciążenie o i pozwoliło skryptowi administracyjnemu wykonać swoją pracę, ale to podkreśla pytanie: dlaczego nawet MySQL za memcached w ogóle? Nie potrzebujemy, a nawet nie chcemy, niestacjonarnych sesji . (Ważna uwaga dla czytelnika: możesz potrzebować lub potrzebujesz nieulotnych sesji ).

"Dlaczego nawet MySQL za memcached w ogóle?" ... "Nie potrzebujemy, a nawet chcemy nieulotnych sesji".

+3

Tak, dziękuję za ten artykuł ... W tej chwili oglądam pokaz slajdów http: // www .slideshare.net/folke/netlog-co-dowiedzieliśmy się-o-skalowalności-wysokiej dostępności-430211 (o architekturze Netlog). Jest tam także kilka slajdów ... – Kirzilla

+1

+1 za link do Digg story – namespaceform

0

Moja realizacja polega na tym, że po kliknięciu użytkownika zapamiętaj mnie, dodaję kolejny plik cookie i przypisuję mu losową wartość.

Sprawdzam od niezalogowanych użytkowników agaist tego pliku cookie. Jeśli istnieje również pasuje do wpisu db, loguję go, otwórz sesję.

przechowywania w memcache powinny być wspaniałe, jeśli nie są w dzielonego hostingu :)

Powiązane problemy