Frage

Ich baue eine Anwendung mit mehreren Servern beteiligt. (4 Servern, auf denen jeweils eine Datenbank und einen Webserver. 1 Master-Datenbank und 3 Slaves + ein Load-Balancer)

Es gibt mehrere Ansatz Caching zu aktivieren. Im Moment ist es ziemlich einfach und schon gar nicht effizient. All das Caching auf einem NFS-Partition Anteil zwischen allen Servern. NFS ist der Engpass in der Architektur.

  1. Ich habe mehrere Ideen umsetzen Caching. Es kann auf einem Server ausgeführt werden Ebene (lokales Dateisystem), aber die Problem ist es, einen Cache ungültig zu machen Datei, wenn der Inhalt wurde Update auf allen Server: Es kann sein, erfolgt durch einen kleinen Cache mit Lebensdauer (nicht effizient, weil die Cache wird früher refresh, dass es sollte die meiste Zeit)
  2. sein
  3. Es kann auch von einem Messaging erfolgen Sytem (XMPP beispielsweise), wobei jeweils Server kommunizieren miteinander. Der Server verantwortlich für die Entwertung des Cache sendet eine Anfrage an alle anderen, sie zu lassen wissen, dass der Cache wurde für ungültig erklärt. Die Latenz ist wahrscheinlich größer (mehr Zeit für alle nehmen zu wissen, dass der Cache-Speicher hat für ungültig erklärt), aber meine Anwendung erfordert keine Atom-Cache Ungültigkeits.
  4. dritter Ansatz ist es, eine Wolke zu verwenden System zum Speichern der Cache-Speicher (wie CouchDB), aber ich habe keine Ahnung von der Leistung für diese ein. Ist es schneller als eine SQL-Datenbank verwenden?

ich geplant Zend Framework zu verwenden, aber ich glaube nicht, dass es wirklich relevant ist (außer, dass einige Pakete in anderen Rahmen existieren wahrscheinlich mit XMPP, CouchDB zu behandeln)

Anforderungen: Persistent Cache (wenn ein Server-Neustart sollte der Cache nicht verloren werden, um den Server abschaltet zu vermeiden, während neu zu erstellen, um den Cache)

War es hilfreich?

Lösung 2

Ich glaube, ich eine relativ gute Lösung gefunden.

I Zend_Cache verwenden lokal jede Cache-Datei zu speichern. Ich habe einen kleinen Dämon auf Nanoserver basierend erstellt, die Cache-Dateien lokal zu verwalten. Wenn ein Server erstellen / ändern / löschen lokal eine Cache-Datei, es die gleiche Aktion auf alle Server über den Daemon senden, die die gleiche Aktion zu tun.

Das meine ich das lokale Caching-Dateien und Remote-Aktionen zur gleichen Zeit haben. Wahrscheinlich nicht perfekt, aber soll jetzt funktionieren. CouchDB war zu langsam und NFS ist nicht zuverlässig genug.

Andere Tipps

http://www.danga.com/memcached/

Memcached deckt die meisten Anforderungen Sie Layout - meldungsbasierte Lese, begehen und Entkräftung. Hohe Verfügbarkeit und hohe Geschwindigkeit, aber sehr wenig Atomsicherheit (für die Leistung geopfert).

(Auch Memcached Kräfte Dinge wie YouTube, Wikipedia, Facebook, so finde ich es ziemlich gut etabliert werden kann, dass Organisationen mit der Zeit, Geld und Talent ernsthaft viele verteilte Caching-Optionen abrechnen mit Memcached bewerten zu!)

Edit (als Antwort auf Kommentar) Die Idee eines Cache ist für sie relativ vergänglich zu sein im Vergleich zu Ihrem Sicherungsspeicher. Wenn Sie die Cache-Daten langfristig bestehen bleiben müssen, empfehle ich Blick auf entweder (a) Ihre Datenebene Denormalisierung, um mehr Leistung zu erhalten, oder (b) das Hinzufügen eines Middle-Tier-Datenbankservers, High-Volume-Daten in gerade Tasten- speichert Wert-Paar-Tabellen, oder etwas eng, dass annähert.

In der Verteidigung der als Cache-Speicher Memcached, wenn Sie hohe peformance mit geringen Auswirkungen eines Server Neustart wollen, warum nicht haben nur 4 Memcached-Server? Oder 8? Jeder ‚Neustart‘ würde entsprechend weniger Auswirkungen auf den Datenbankserver haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top