2016-03-31 19 views
6

Ich habe nicht eine Tonne Erfahrung mit Heroku, und noch weniger mit Phoenix, so kann dies eine dumme Frage sein ... aber wollen sicherstellen, dass ich eine gute Wahl auf Hosting machen :)Scaling Phoenix auf Heroku

Von dem, was ich verstehe, ist die Art, wie Sie Phoenix skalieren, einen anderen Server hinzuzufügen, einen anderen Knoten zu starten und sie zu verbinden, dann BEAM/OTP arbeiten magic, um den Arbeitslastausgleich zu handhaben. Auf heroku können Dynos nicht wirklich über ein lokales Netzwerk miteinander kommunizieren, was nach meinem Verständnis etwas ist, das BEAM zum Clustering benötigt. Das Hinzufügen von Dynos führt also zu einem "traditionelleren" Skalierungsmodell, bei dem ein externer Load Balancer Verbindungen zwischen nicht verbundenen Knoten ausgleicht, wobei die Datenbank den gemeinsamen Status hat.

Meine Frage hier ist, wie groß der Einfluss wird dies haben? Ist es eher ein Problem, wenn Sie ein ernsthaftes Last/Skalen-Niveau erreichen, oder wird es bedeuten, dass Sie viel mehr Geld für die Infrastruktur ausgeben müssen?

Antwort

7

Sie werden die beste Leistung auf einem Host bekommen, die Clustering unterstützt, aber Phoenix hat genau ein PubSub Adaptersystem für Einsätze wie Heroku: https://github.com/phoenixframework/phoenix_pubsub

Einer Zeile Konfigurationsänderung und mix.exs deps Eintrag und Sie‘ ll haben multinode kanäle auf heroku über unseren Redis adapter.

+0

- In Phoenix 1.2 gibt es einen PG2-Adapter für PubSub standardmäßig eingestellt; Gibt es einen Grund, Redis über den aktuellen Standard auf Heroku zu verwenden? Vielen Dank! – Svilen

2

Das ist eine sehr offene Frage, also bin ich sicher, dass meine Antwort nicht umfassend sein wird.

In Ihrer Situation ist die wichtigste Frage: werde ich Phoenix Kanäle verwenden?

Wenn Sie einfach altes HTTP verwenden, kann es meist zustandslos sein. Es gibt viele Methoden, um statusbehaftete Verbindungen wie das Speichern von Sitzungen in Cookies zu simulieren. Am Ende des Tages spielt es keine Rolle, ob Ihre Backend-Server miteinander verbunden sind, weil jeder von ihnen unabhängige Berechnungen durchführt. Ihr Load Balancer kann einen beliebigen Server zufällig auswählen und er wird immer funktionieren. Diese coole Funktion von http ermöglicht es, dieses Protokoll so gut zu skalieren. Sie können definitiv Heroku in diesem Szenario verwenden, und es wird großartig funktionieren.

Wenn Sie Phoenix-Kanäle verwenden, werden die Dinge kompliziert. Sie möchten immer noch Verbindungen mit einem der Server herstellen können, aber Sie werden wahrscheinlich Nachrichten an andere Benutzer in Echtzeit senden und sie können mit anderen Servern verbunden werden. Phoenix löst dieses Problem für Sie, indem Sie mit BEAM clustern und dies wird schwierig für Heroku sein. Oder sogar unmöglich.

Zusammenfassend: Es ist keine Frage von kleinem Maßstab/großem Maßstab. Es ist eine Frage von Features. Skalierung von Kanälen erfordert Clustering, Skalierung einfach alte HTTP wird nicht.

+0

Es ist keine große Kosten Instanziierung einer Phoenix App für jeden Prüfstand (was ist bassicaly was passiert)? Selbst für ein einfach nur altes HTTP? –

+0

Es ist kein großer Preis. Wenn Sie ähnliche Phoenix- und Rails-Anwendungen vergleichen, sollte Phoenix einen geringeren Speicher- und CPU-Speicherbedarf haben. Also, wenn Ihnen die Ressourcen auf einem Dyno ausgehen, drehen Sie einfach einen anderen. – tkowal

+0

Ich denke, das ist auch eine mildernde Sache, mit https://github.com/phoenixframework/phoenix_pubsub_redis danke für die tolle Antwort auf eine nicht so große Frage :) –