2013-07-01 13 views
7

Ich habe meine erste Play-Anwendung erstellt. Welches ist die am besten geeignete Einsatzmethode für die Produktion? Soll ich das gesamte Projekt auf den Produktionsserver kopieren und Play-Start ausführen? Oder sollte ich meine Anwendung austragen und in tomcat/jboss einsetzen? Welcher ist der empfohlene Weg? Mit ihm im Vergleich zu seiner Schiene Verhalten zu verwechseln. Beachten Sie, dass dies eine Big-Data-Anwendung sein soll und auch Server-geladene Anfragen später. Wir denken also auch an Skalierbarkeit, Verfügbarkeit, Performance-Aspekte. Diese Anwendung wird in einer Cloud bereitgestellt.Play framework 2.1 application deployment

Danke.

Antwort

20

Wie andere angegeben haben, ist die Verwendung des Befehls dist der einfachste Weg, Play für eine einmalige Anwendung bereitzustellen. Um jedoch zu erarbeiten, ich habe hier einige andere Optionen und meine Erfahrungen mit ihnen:

  • Wenn ich eine App, die ich häufig aktualisieren, ich in der Regel spielen auf dem Server installieren und ausführen Updates über Git. Nach jedem Update starte ich einfach play stop (um den laufenden Server zu stoppen), manchmal führe ich dann play clean aus, um eventuell beschädigte Bibliotheken oder Binärdateien zu löschen, dann führe ich play stage aus, um sicherzustellen, dass alle Voraussetzungen vorhanden sind und die Kompilierung durchgeführt werden muss dann schließlich play start, um den Server für die aktualisierte App auszuführen. Es scheint eine Menge zu sein, aber es ist einfach mit einem schnellen Bash-Skript zu automatisieren.

  • Eine andere Methode ist die Bereitstellung von Play hinter einem Front-End-Webserver wie Apache, Nginx usw. Dies ist vor allem nützlich, wenn Sie eine Art Load-Balancing durchführen möchten, aber nicht erforderlich, da Play im Lieferumfang enthalten ist eigener Server. Docs: http://www.playframework.com/documentation/2.1.1/HTTPServer

    Das Erstellen eines WAR-Archivs mithilfe des Play2war-Plugins ist eine weitere Möglichkeit, aber ich würde es nicht empfehlen, es sei denn, Sie geben es jemandem, der bereits eine große Infrastruktur auf diesen Servlet-Containern erstellt hat. wie viele große Unternehmen). Die Verwendung eines Servlet-Containers fügt einen Komplexitätsgrad hinzu, den Play von Natur aus entfernen sollte (daher der integrierte Server). Es gibt keine bemerkenswerten Leistungssteigerungen, von denen ich weiß, dass sie diese Methode gegenüber den beiden zuvor beschriebenen verwenden.

  • Natürlich gibt es immer die play dist, die das Paket für Sie erstellt, die Sie auf Ihren Server hochladen und play start von dort ausführen. Dies ist wahrscheinlich die einfachste Option. Docs: http://www.playframework.com/documentation/2.1.1/ProductionDist

Für Leistung und Skalierbarkeit wird der Netty Server in Play außergewöhnlichen sehr angemessen funktioniert für das, was Sie benötigen.Hier ist ein seriöser Link, der Netty mit der schnellsten Leistung aller Frameworks und einer "Stock" Play App zeigt, die irgendwo in der Mitte des Feldes ankommt, aber in Bezug auf die Leistung weit vor Rails/Django: http://www.techempower.com/blog/2013/04/05/frameworks-round-2/.

Vergessen Sie nicht, dass Sie Ihre Bereitstellungsarchitektur jederzeit ändern können, um wie oben beschrieben hinter einem Front-End-Server zu arbeiten, wenn Sie mehr Lastverteilung und Verfügbarkeit benötigen. Das ist eine geringfügige Änderung bei Play. Ich würde die WAR-Bereitstellungsoption immer noch nicht empfehlen, es sei denn, Sie haben, wie bereits erwähnt, bereits eine große installierte Basis von Servlet-Containern, die Sie zwingt, Ihre App zu bedienen.

Skalierbarkeit und Leistung hat auch viel mehr mit anderen Faktoren zu tun, wie beispielsweise der Verwendung von Caching, der Datenbankkonfiguration, der Verwendung von Nebenläufigkeit (wozu Play gut ist) und der Qualität der zugrunde liegenden Hardware oder Cloud Plattform. Zum Beispiel beliefern Instagram und Pinterest täglich Millionen von Menschen auf einem Python/Django-Stack, der bei allen gängigen Benchmarks eine mittelmäßige Leistung aufweist. Sie mildern dies mit viel Caching und leistungsstarken Datenbanken (was in großen Anwendungen meist der Flaschenhals ist).

Auf die Gefahr, diese Antwort zu lang zu machen, werde ich nur eine letzte Sache hinzufügen. Ich habe mich auch über die Leistung und Skalierbarkeit Gedanken gemacht, weil ich dachte, dass ich den leistungsfähigsten Stack und die Konfiguration benötige, um meine Apps auszuführen. Das ist nicht mehr der Fall, es sei denn, Sie sprechen wie Google oder Facebook Skala, wo jeder Algorithmus fein abgestimmt werden muss, da es eine Milliarde Mal täglich bombardiert wird. Hardware- (oder Cloud-) Ressourcen sind billig, Entwickler/Systemadministrator jedoch nicht. Sie sollten die einfache Verwendung und Wartbarkeit für die Bereitstellung Ihrer App im Vergleich zu rohen Leistungsvergleichen in Betracht ziehen, auch wenn im Fall von Play die Konfiguration mit der besten Leistung wahrscheinlich die einfachste Option ist.

+1

Danke, sehr detaillierte Antwort ... :) Übrigens, ich benutze MongoDB, um mit dieser Anwendung zu gehen. – popcoder

+1

Danke! Auch MongoDB ist großartig, aber wie bei jeder Datenbank hat es immer noch seine Leistungseinschränkungen. Bestimmte Arten von Abfragen dauern länger als eine relationale Datenbank, aber das Sharding für die Skalierbarkeit ist so viel einfacher. Hängt davon ab, wie strukturiert/unstrukturiert Ihre Daten sind. Alles ist ein Kompromiss in der Technologie :-) –

4

Sie müssen die Play-Konsole nicht zum Ausführen einer Anwendung verwenden, sie verbraucht einige Ressourcen und ihr Hauptziel ist ein schneller Start während der Entwicklungsphase.

Die beste Option ist die Verwendung von dist command wie im Dokument beschrieben. Daher müssen Sie Play nicht einmal auf dem Zielcomputer installieren, da dist eine eigenständige Anwendung erstellt, die alle erforderlichen Elemente enthält (auch ein eingebauter Server, sodass Sie sie nicht mit WAR bereitstellen müssen) in irgendeinem Behälter).

Wenn Sie planen, eine Cloud zu verwenden, sollten Sie auch Angebote überprüfen, dh. von Heroku, oder CloudBees, die es Ihnen erlaubt, Ihre Anwendung nur durch ... Push-Änderungen über Git-Repository, die sehr bequeme Art und Weise ist, überprüfen Sie die documentation's home, scrollen Sie nach unten: Bereitstellung für ... für weitere Details.