MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Lastenausgleich in mehreren AWS-Instanzen

Dies wird bei weitem keine vollständige Antwort sein, es gibt zu viele Details und ich könnte einen ganzen Aufsatz über diese Frage schreiben, wie es viele andere könnten, aber da ich nicht so viel Zeit übrig habe, werde ich einige Kommentare hinzufügen über das, was ich sehe.

Replikat-Sets sind nicht darauf ausgelegt, so zu funktionieren. Wenn Sie das Gleichgewicht laden möchten, suchen Sie möglicherweise nach Sharding, mit dem Sie dies tun können.

Die Replikation dient dem automatischen Failover.

Da Ihre Mitglieder, um auf dem Laufenden zu bleiben, genauso viele Ops erhalten wie die primäre, scheint dies nicht allzu hilfreich zu sein.

Anstatt einen Server mit vielen Verbindungen in der Warteschlange zu haben, haben Sie viele Verbindungen auf vielen Servern, die nach veralteten Daten warten, da die Mitgliederkonsistenz im Gegensatz zu ACID-Technologien letztendlich und nicht sofort ist, jedoch sind sie nur ungefähr 32 ms lang letztendlich konsistent bedeutet, dass sie nicht genug nacheilen, um einen angemessenen Durchsatz zu erzielen, wenn die Primärseite geladen ist.

Da Lesevorgänge gleichzeitig SIND, erhalten Sie die gleiche Geschwindigkeit, egal ob Sie von der primären oder sekundären lesen. Ich nehme an, Sie könnten einen Slave verzögern, um eine Pause von OPs zu erstellen, aber das würde im Gegenzug massiv veraltete Daten zurückbringen.

Ganz zu schweigen davon, dass MongoDB kein Multi-Master ist, da Sie nur auf einen Knoten gleichzeitig schreiben können, macht slaveOK nicht mehr die nützlichste Einstellung der Welt, und ich habe zahlreiche Male gesehen, wo 10gen selbst Ihnen empfiehlt, Sharding über dieser Einstellung zu verwenden.

Dies würde Ihre eigene Codierung erfordern. An diesem Punkt sollten Sie vielleicht in Erwägung ziehen, tatsächlich eine Datenbank zu verwenden, die http://en.wikipedia unterstützt .org/wiki/Multi-master_replication

Dies liegt daran, dass die Geschwindigkeit, nach der Sie suchen, höchstwahrscheinlich tatsächlich in Schreibvorgängen und nicht in Lesevorgängen liegt, wie ich oben besprochen habe.

Dies ist der empfohlene Weg, aber Sie haben den Vorbehalt damit gefunden. Dies ist leider etwas, das ungelöst bleibt, das die Multi-Master-Replikation lösen soll, aber die Multi-Master-Replikation fügt Europa selbst ein eigenes Schiff von Pestratten hinzu, und ich würde Ihnen dringend empfehlen, ernsthafte Nachforschungen anzustellen, bevor Sie darüber nachdenken, ob MongoDB kann Ihre Anforderungen derzeit nicht erfüllen.

Möglicherweise machen Sie sich wirklich um nichts Sorgen, da die fsync-Warteschlange so konzipiert ist, dass sie den IO-Engpass bewältigt, der Ihre Schreibvorgänge verlangsamt, wie dies in SQL der Fall wäre, und Lesevorgänge gleichzeitig erfolgen Anzahl OPs.

Tatsächlich gibt es hier eine verlinkte Frage von einem 10gen-Mitarbeiter, die sehr gut zu lesen ist:https:/ /stackoverflow.com/a/17459488/383478 und es zeigt, wie viel Durchsatz MongoDB unter Last erreichen kann.

Es wird bald mit dem neuen Sperren auf Dokumentebene wachsen, das sich bereits im Entwicklungszweig befindet.