2010-01-18 5 views
6

Wie speichert digg oder eine andere stark frequentierte Website Benutzersitzungen? Was verwenden sie zum Speichern der Benutzersitzungen? Dateisystem, DB (welches?), Memcache oder beides?Wie speichern digg (oder andere Websites mit hoher Lastkategorie) Benutzersitzungen?

Stellen wir uns eine einfache Situation vor. Der angemeldete Benutzer hat das Flag "Remember me" während der Anmeldung gesetzt. Wir haben einen Sitzungscookie mit Ablaufdatum 1 Jahr eingerichtet. Zum Beispiel halten wir die Sitzung in Memcache, aber wir sollten diese Sitzung auch in der Datenbank (in meiner Version) speichern. Nur Benutzer mit "Remember me" -Flag werden im DB gespeichert. Ist es eine richtige Art, Sitzungen zu speichern? Ich meine natürlich High-Traffic-Websites (mit 2 oder mehr Anwendungsservern, 2 oder mehr Datenbanken, Memecache-Servern usw.). Bei kleinen Websites ist das Speichern der Sitzung standardmäßig (im Dateisystem) in Ordnung.

Ich habe versucht, Google zu suchen, aber konnte keine Informationen darüber finden. Ich habe einige Lösungen aus "Advanced PHP Programmierung" Buch gelesen, aber Hauptakzent wurde gemacht, Session-Handler Session anpassen.

Wirklich hoffe, gute Ideen oder Links zu hören!

Vielen Dank.

Antwort

5

Sie verwenden mit Sicherheit memcached oder Äquivalente.

+0

Ja, ich verstehe, aber was ist langfristig Sitzung Speichern? Wie sieht es mit der Situation aus, wenn der Benutzer das Kontrollkästchen "Remember me" aktiviert hat? Es bedeutet, dass ich diese Sitzung nicht nur in Memcache speichern sollte (Ich kann die Daten der Benutzersitzung seit Wochen nicht in Memcache aufbewahren) ... ... oder verwenden sie vielleicht einen anderen "Remember Me" -Mechanismus? Vielen Dank! – Kirzilla

+2

Sie können Sitzungen in einer Datenbank oder an einem anderen Ort speichern und darüber Memcached verwenden. Niemand verbietet es dir, es zu tun. Was passiert ist, dass, sagen wir, wenn Sie "zurückkommen", werden Sie durch den Datenbankanruf (oder den Casandra-Anruf) "erinnert", so dass Chaches fehlen wird, aber von der nächsten Anfrage wird der Cache die Aufgabe erledigen. Wenn Sie vollständig "vergessen" sind, werden beide falsch zurückgeben. –

+0

Genau das wollte ich hören. Vielen Dank! – Kirzilla

6

Neben Alix Antwort, können Sie in der Kasse aus diesem Artikel interessieren:

Ein kurzer Auszug:

Was die Memcached als Sitzungen speichern aufgefordert:

Kurz nach der Einführung von Digg v3, die nicht-redundanten MySQL Session-Speicher Hardware abgestürzt. Dies führte zu einem Digg Ausfall. Wir hatten immer geplant, dass in solch ein Fall wir nur eine (triviale) Änderung rollen, um Sitzungen in Memcached anstelle von MySQL zu rollen, um zu sehen, wie es erging.


Also, bevor Sie den DB für Sitzungen jedes Mal wurden schlagen?

Ja.

MySQL war viel in der Lage, mit den Einfügungen zu halten und wählt, um mit Sitzungen fertig zu werden. Unser Problem war eigentlich mit Ausräumen alter Sitzungen. Das Skript zu alten Sitzungen zu löschen, obwohl ziemlich anspruchsvoll in seinen Versuchen , um die Sitzungen Datenbank nicht überlastet, noch betroffen ist.

Wir vermuten, dass Memcached abgelaufene Sitzungen mit weniger Overhead als MySQL entfernen wird.


Wir haben InnoDB für Sitzungen [vor Memcached] verwendet. Es war nicht Sperren auf Tabellen- oder Zeilenebene. Es war Konkurrenz auf Betriebssystemebene. Mit Memcached vor MySQL hätte die Last reduziert und erlaubt dem Admin-Skript , seine Arbeit zu tun, aber das hebt die Frage hervor: warum haben sogar MySQL hinter Memcached überhaupt? Wir brauchen nicht brauchen oder wollen nichtflüchtige Sitzungen. (Wichtiger Hinweis für Leser: Sie benötigen oder wollen nichtflüchtige Sitzungen).

"Warum überhaupt MySQL hinter memcached?" ... "Wir brauchen nicht oder wollen nicht-permanente Sitzungen".

+3

Ja, danke für diesen Artikel ... Momentan schaue ich mir Slideshow http: // www .slideshare.net/folke/netlog-was-wir-gelernt-about-scalability-high-availability-430211 (über Netlog-Architektur). Es gibt auch einige Dias darüber ... – Kirzilla

+1

+1 für Link zu Digg Geschichte – namespaceform

0

Meine Implementation ist, wenn der Benutzer sich an mich erinnert, lege ich einen weiteren Cookie und ordne ihm einen zufälligen Wert zu.

Ich überprüfe von nicht angemeldeten Benutzern diesen Cookie. Wenn es auch Übereinstimmungen mit dem DB-Eintrag gibt, logge ich sie ein, öffne eine Sitzung.

in memcache Speicherung sollte schön sein, wenn Sie nicht in einem gemeinsam genutzten Hosting-:)

Verwandte Themen