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.
Danke, sehr detaillierte Antwort ... :) Übrigens, ich benutze MongoDB, um mit dieser Anwendung zu gehen. – popcoder
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 :-) –