2013-07-01 16 views
7

Stworzyłem moją pierwszą aplikację Play. Która z metod jest najbardziej odpowiednia dla produkcji? Czy powinienem skopiować cały projekt na serwer produkcyjny i uruchomić uruchamianie gry? czy powinienem zrobić wojnę z mojej aplikacji i wdrożyć w tomcat/jboss? Który sposób jest najbardziej zalecany? Zmieszanie z nim w porównaniu do zachowania typu szyn. Zauważ, że ma to być duża aplikacja danych, a także może później załadować żądania serwerów. Zastanawiamy się także nad skalowalnością, dostępnością i aspektami wydajności. Ta aplikacja zostanie wdrożona w chmurze.Rozgrywka gry 2.1 wdrożenia aplikacji

Dzięki.

Odpowiedz

20

Jak stwierdzili inni, użycie polecenia dist jest najłatwiejszym sposobem na wdrożenie gry Play dla jednorazowej aplikacji. Jednak, aby opracować, mam tu jakieś inne opcje i moje doświadczenie z nimi

  • Kiedy mam aplikację, która zaktualizować często, zwykle zainstalować Juz na serwerze i wykonywać aktualizacje przez Git. Robiąc to, po każdej aktualizacji, po prostu uruchamiam play stop (w celu zatrzymania działającego serwera), czasami uruchamiam play clean, aby wyczyścić wszystkie potencjalnie uszkodzone biblioteki lub pliki binarne, a następnie uruchomię play stage, aby upewnić się, że są spełnione wszystkie wymagania wstępne i wykonać kompilację oraz następnie wreszcie play start, aby uruchomić serwer dla zaktualizowanej aplikacji. Wydaje się, że jest dużo, ale można go łatwo zautomatyzować za pomocą skryptu szybkiego basha.

  • Inną metodą jest wdrożenie gry Play za frontowym serwerem WWW, takim jak Apache, Nginx itp. Jest to przydatne, jeśli chcesz przeprowadzić równoważenie obciążenia, ale nie jest to wymagane, ponieważ Play jest dołączany do jego własny serwer. Dokumenty: http://www.playframework.com/documentation/2.1.1/HTTPServer

  • Tworzenie archiwum WAR za pomocą wtyczki play2war to kolejna metoda wdrażania, ale nie polecałbym go, chyba że przekazuje się go komuś, kto ma już dużą infrastrukturę zbudowaną na wspomnianych kontenerach serwletów (jak wiele dużych firm). Używanie kontenerów serwletów dodaje poziom złożoności, który Play ma usunąć z natury (stąd zintegrowany serwer). Nie ma zauważalnych wzrostów wydajności, o których wiem, że używam tej metody w stosunku do dwóch wcześniej opisanych.

  • Oczywiście zawsze jest play dist, który tworzy pakiet dla ciebie, który przesyłasz na swój serwer i uruchamiasz tam stamtąd play start. Jest to prawdopodobnie najłatwiejsza opcja. Dokumenty: http://www.playframework.com/documentation/2.1.1/ProductionDist

kątem wydajności i skalowalności, serwer Netty w Play będzie działać odpowiednio do bardzo wyjątkowa dla czego wymagać.Oto renomowany link pokazujący Netty z najszybszą wydajnością wszystkich frameworków i "dostępną" aplikacją Play, która pojawia się gdzieś pośrodku pola, ale znacznie wyprzedza Rails/Django pod względem wydajności: http://www.techempower.com/blog/2013/04/05/frameworks-round-2/.

Nie zapominaj, że zawsze możesz zmienić architekturę wdrożenia na późniejszym etapie, tak aby działała za serwerem frontonu, jak opisano powyżej, jeśli potrzebujesz więcej równoważenia obciążenia i dostępności. To drobna zmiana w Play. Nadal nie polecam opcji wdrażania WAR, chyba że, jak już powiedziałem, masz już dużą zainstalowaną bazę kontenerów serwletów, z których ktoś zmusza Cię do obsługi aplikacji.

Skalowalność i wydajność mają również wiele wspólnego z innymi czynnikami, takimi jak wykorzystanie pamięci podręcznej, konfiguracja bazy danych, wykorzystanie współbieżności (w której gra się dobrze) i jakość sprzętu lub chmury Platforma. Na przykład Instagram i Pinterest codziennie obsługują miliony ludzi na stosie Python/Django, który ma mierną wydajność ze wszystkich popularnych testów porównawczych. Łagodzą to z dużą ilością pamięci podręcznych i wysokowydajnymi bazami danych (co zwykle jest wąskim gardłem w dużych aplikacjach).

Ryzykując udzielenie tej odpowiedzi zbyt długo, dodam jeszcze jedną rzecz. Ja też byłem przyzwyczajony do nadmiernej wydajności i skalowalności, myśląc, że potrzebuję najpotężniejszego stosu i konfiguracji, aby uruchamiać moje aplikacje. To już nie jest tak, chyba że mówisz jak Google czy Facebook, gdzie każdy algorytm musi być precyzyjnie dostrojony, ponieważ będzie bombardowany miliard razy dziennie. Zasoby sprzętowe (lub chmury) są tanie, ale czas programisty/sysadmin nie jest. Powinieneś rozważyć łatwość użytkowania i łatwość konserwacji w celu wdrożenia aplikacji w porównaniu z nieprzetworzonymi porównaniami wydajności, mimo że w przypadku Play najskuteczniejsza konfiguracja wdrożenia jest prawdopodobnie również najłatwiejszą opcją.

+1

Dzięki, bardzo szczegółowa odpowiedź ... :) Tak przy okazji, używam MongoDB do korzystania z tej aplikacji. – popcoder

+1

Dzięki! Ponadto MongoDB jest świetny, ale tak jak w przypadku każdej bazy danych, wciąż ma swoje ograniczenia w wydajności. Niektóre typy zapytań trwają dłużej niż relacyjna baza danych, ale skalowanie w celu skalowania jest o wiele łatwiejsze. Zależy od tego, jak uporządkowane/nieustrukturyzowane są Twoje dane. Wszystko jest kompromisem w technologii :-) –

4

Nie musisz używać konsoli Play do uruchamiania aplikacji, zużywa ona trochę zasobów, a jej głównym celem jest szybkie uruchomienie na etapie rozwoju.

Najlepszą opcją jest użycie dist command zgodnie z opisem w dokumencie. Dzięki temu nie musisz instalować Play na maszynie docelowej, ponieważ dist tworzy gotową do użycia autonomiczną aplikację zawierającą wszystkie wymagane elementy (również wbudowany serwer, dzięki czemu nie musisz jej instalować z WAR w dowolnym pojemniku).

Jeśli planujesz używać chmury, powinieneś także sprawdzić oferty, np. od Heroku, lub CloudBees, który pozwala wdrożyć aplikację po prostu ... przesyłając zmiany za pośrednictwem repozytorium git, co jest bardzo wygodne, sprawdź documentation's home, przewiń w dół do linków: Wdrażanie do ... po więcej szczegółów.

Powiązane problemy