Frage

Ich stelle einen REST-API zusammen und da ich nicht sicher bin, wie es skaliert oder was die Nachfrage nach wird es sein, würde Ich mag Lage seines Limit zu bewerten, wie gut es verwendet als in der Lage zu sein, vorübergehend Anfragen ablehnen, wenn die Box über Kapazität ist oder wenn es irgendeine Art von slashdotted Szenario.

Ich würde auch den Dienst anmutig bringt vorübergehend gerne in der Lage sein (während Kunden Ergebnisse zu geben, die den Haupt-Service an, für ein bisschen offline ist), wenn / falls ich den Dienst skalieren muß durch mehr Kapazität hinzufügen.

Gibt es Best Practices für diese Art der Sache? Die Implementierung ist Rails mit mysql.

War es hilfreich?

Lösung

Das ist alles mit äußeren Webserver erfolgen, die auf die Welt hört (i empfehlen nginx oder lighttpd).

In Bezug auf Frequenzgrenzen ist nginx der Lage zu begrenzen, das heißt 50 req / Minute für jede IP, alle über 503 Seite bekommen, die Sie anpassen können.

über die vorübergehenden erwartet, nach unten in den Schienen Welt wird dies über spezielle maintainance.html Seite getan. Es gibt eine Art von Automatisierung, die oder Symlinks erstellt, die Datei, wenn Schienen-app-Server gehen. Ich würde empfehlen, nicht auf Datei Präsenz verlassen, sondern auf die tatsächliche Verfügbarkeit von App-Server.

Aber wirklich sind Sie in der Lage, Dienste zu starten / stoppen, ohne irgendwelche Verbindungen überhaupt zu verlieren. D. h Sie können auf verschiedenen UNIX-Socket / IP-Port und haben Balancer (nginx / lighty / haproxy) verwenden, die neue Instanz zu separate Instanz von App-Server ausführen. Dann schließen Sie alte Instanz nach unten und alle Clients mit nur neuen serviert. Keine Verbindung verloren. Natürlich ist dieses Szenario nicht immer möglich ist, hängt von der Art der Änderung eingeführt Sie in der neuen Version.

haproxy ist ein Balancer-einzige Lösung. Es kann sehr effizient Anfragen an App-Server in der Farm balancieren.

Für ganz großen Dienst, den Sie am Ende-up mit so etwas wie:

  • api.domain Lösung auf Round-Robin-N Balancern
  • werden jeder Ausgleich Proxies Anfragen an M webservers für statischen und P app-Server für dynamische Inhalte. Oh gut Ihr REST-API hat keine statischen Dateien, nicht wahr?

Für ganz kleinen Service (unter 2K rps) alle Ausgleich innerhalb eines bis zwei webservers durchgeführt wird.

Andere Tipps

Gute Antworten bereits - wenn Sie den Limiter nicht selbst implementieren wollen, gibt es auch Lösungen wie 3scale ( http: / /www.3scale.net ), die tut Ratenbegrenzung, Analytik etc. für die APIs. Es funktioniert ein Plugin (siehe hier für die Rubin api Plugin ), die in die 3scale Architektur hakt. Sie können auch über Lack verwenden und Lack wirken als Rate-Limiting-Proxy haben.

Ich würde empfehlen, die Geschwindigkeitsgrenzen außerhalb der Anwendung der Umsetzung, da sonst der hohe Verkehr immer noch die Wirkung des Tötens Ihrer Anwendung hat. Eine gute Lösung ist es als Teil Ihres Apache-Proxy zu implementieren, mit so etwas wie mod_evasive

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