Play Framework 2.1 Anwendungsbereitstellung

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 wurde für die Bereitstellung in einer Cloud entwickelt.

Danke.

    
popcoder 01.07.2013, 18:34
quelle

2 Antworten

20

Wie bereits erwähnt, ist die Verwendung von dist der einfachste Weg, Play für eine einmalige Anwendung bereitzustellen. Allerdings habe ich hier einige andere Optionen und meine Erfahrung mit ihnen:

  • Wenn ich eine App habe, die ich häufig aktualisiere, installiere ich Play normalerweise auf dem Server und führe Aktualisierungen über Git durch. Nach jedem Update starte ich einfach play stop (um den laufenden Server anzuhalten), manchmal führe ich play clean aus, um eventuell beschädigte Bibliotheken oder Binärdateien zu entfernen, dann führe ich play stage aus, um sicherzustellen, dass alle Voraussetzungen vorhanden sind und zum Kompilieren und 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 weitere Methode ist die Bereitstellung von Play hinter einem Front-End-Webserver wie Apache, Nginx usw. Dies ist vor allem dann nützlich, wenn Sie einen Lastenausgleich durchführen möchten, der jedoch nicht erforderlich ist, da Play mitgeliefert wird ein eigener Server. Dokumente: Ссылка

  • Das Erstellen eines WAR-Archivs mithilfe des Play2war-Plugins ist eine andere Möglichkeit zur Bereitstellung, aber ich würde es nicht empfehlen, es sei denn, Sie geben es jemandem, der bereits eine große Infrastruktur auf diesen Servlet-Containern aufbaut (so viele) große Unternehmen tun). 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 Leistungsgewinne, von denen ich weiß, dass sie diese Methode gegenüber den beiden zuvor beschriebenen verwenden.

  • Natürlich gibt es immer das play dist , das das Paket für Sie erstellt, das Sie auf Ihren Server hochladen und von dort play start ausführen. Dies ist wahrscheinlich die einfachste Option. Dokumente: Ссылка

Aus Gründen der Leistung und Skalierbarkeit funktioniert der Netty-Server in Play sehr gut bis außergewöhnlich für das, was Sie benötigen. Hier ist ein seriöser Link, der Netty mit der schnellsten Performance aller Frameworks und einer "Stock" Play App zeigt, die irgendwo in der Mitte des Feldes ankommt, aber Rails / Django in Sachen Leistung weit voraus ist: Ссылка .

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, wie gesagt, Sie haben bereits eine große installierte Basis von Servlet-Containern, die Sie zwingt, Ihre App zu bedienen.

Skalierbarkeit und Leistung haben auch viel mehr mit anderen Faktoren zu tun, wie z. B. 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 hin, diese Antwort zu lange zu machen, füge ich nur eine letzte Sache hinzu. 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, obwohl im Fall von Play die Konfiguration mit der besten Leistung wahrscheinlich die einfachste Option ist.

    
Mike Hawkins 01.07.2013, 23:13
quelle
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 des Befehls dist 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 einen integrierten Server, sodass Sie sie nicht bereitstellen müssen) mit WAR in einem Container).

Wenn Sie planen, eine Cloud zu verwenden, sollten Sie auch Angebote prüfen, z. von Heroku, oder CloudBees, die es Ihnen erlaubt, Ihre Anwendung einfach durch ... Push-Änderungen über Git-Repository, die sehr bequeme Art und Weise ist, zu überprüfen, überprüfen Sie die home der Dokumentation, scrollen Sie nach unten zu den Links: Bereitstellen für ... für weitere Details.

    
biesior 01.07.2013 19:27
quelle