2010-07-07 9 views
12

Budujemy usługę opartą na Netty/NIO i rozważam wdrożenie tej usługi w naszym środowisku produkcyjnym. Nasz standardowy sposób wdrażania usług to WAR, które zostaną wdrożone w Tomcatach.Czy hosting serwera Netty w Tomcat jest możliwy/pożądany?

Gdy zasugerowałem to samo podejście tutaj, otrzymałem krzyki i skargi, że "nie powinno się tego robić", ponieważ zarówno Netty, jak i Tomcat są serwerami i "nie ma sensu hostować jednego serwera w innym" .

Dla mnie ma to sens, ponieważ całkowicie rozwiązuje mój problem z wdrożeniem, a także pozwala uniknąć zapisania innego kodu. Dlaczego jest tak duże "nie nie"?

+0

Czy mógłbyś bardziej szczegółowo opisać swój "problem z wdrożeniem" oraz "uratowałeś mnie przed napisaniem innego kodu"? –

+0

@Romain - Nasi operatorzy mają skrypty, które pobierają WAR i instalują je na różnych serwerach, zatrzymują/uruchamiają je/etc ... Jeśli nie hostuję go w Tomcat, ale raczej jako samodzielny jar, to te skrypty należy dostosować. "Inny kod", o którym mówiłem, to udostępnianie metody usługi za pośrednictwem protokołu HTTP - mamy już kod do tego, za pośrednictwem standardowego serwletu HTTP, który będziemy teraz potrzebować do ponownego wdrożenia. Pytanie brzmi - co jest złego w po prostu hostowaniu go w Tomcat? – ripper234

+0

Co jest nie tak z ponownym rozkładaniem WAR? Zaletą jest to, że masz zunifikowany fragment kodu, który możesz następnie przywrócić, jeśli to konieczne. –

Odpowiedz

16

Dynamiczne wdrażanie WAR, które Tomcat zapewnia, przeznaczone jest dla aplikacji internetowych. Aplikacja Netty, którą próbujesz wdrożyć w Tomcat, nie jest aplikacją WWW, ale tylko oddzielnym serwerem, który tylko współużytkuje pamięć VM. Oznacza to, że Tomcat został ponownie wprowadzony do ogólnego mikrojądra takiego jak OSGi.

Jednak nie sądzę, że to duży problem. Ponieważ Twoja firma używa WAR jako standardowego mechanizmu wdrażania, dobrym pomysłem może być ponowne użycie. Nie musisz nawet pisać o niektórych funkcjach zarządzania, takich jak zdalne wyłączanie, ponieważ Tomcat już je zapewnia. Wszystko, co musisz zrobić, to upewnić się, że wszystkie zasoby są zwalniane, gdy nie zostaną wdrożone.

Niektórzy ludzie mogą nie lubić tego podejścia. Najlepiej byłoby, gdyby istniała wspólna infrastruktura do rozmieszczania i zarządzania dowolną aplikacją (np. Mikrojądrem), gdzie nawet Tomcat jest wdrażany jako moduł, a mikrojądro zarządza WAR bezpośrednio, zamiast tego Tomcat. Ale to długa droga.

+2

Nasz nowy standard firmy to wdrażanie jako wojna, a prawie każda aplikacja korzysta z netty lub Mina dla naszego opatentowanego protokołu. Po prostu trzeba być ostrożnym przy wyłączaniu, ale jak dotąd nie ma dużych problemów. Teraz, jeśli netty może wykonać serwlety do sprężystego mvc, wszystko będzie gotowe. – Jason

1

Nie zaczynaj niczego w Tomcat, jest to bardzo niewygodne, a to ma wiele problemów z bólem. Wystarczy osadzić Tomcat (lub Jetty) wewnątrz aplikacji i uruchomić aplikację jako zwykły proces java.

+0

Użyłem tego podejścia kilka razy w produkcji i działa. Z mavenem i jenkinami jest jeszcze więcej zabawy. – miloxe

7

Ma niesamowity sens. W rzeczywistości uruchamiamy serwer pocztowy Java w Tomcat.

Tomcat ma jakieś ogromne korzyści dla obudowy aplikację:

  1. Skrypty demon już napisany dla ciebie
  2. Tomcat umożliwia instalację ciepłej (o ile nie używasz hibernacji :))
  3. W pewnym momencie może być potrzebny interfejs administratora lub Admin API
  4. Wiele narzędzi do monitorowania Tomcat, co oznacza bezpłatne monitorowanie aplikacji.

Teraz z Netty, Mina lub dowolną technologią sieciową opartą na zdarzeniach nie będzie można korzystać z większości frameworków MVC. W rzeczywistości nie będzie można korzystać z większości frameworków Javy, ponieważ wiele rzeczy polega na wątku na żądanie (transakcje, bezpieczeństwo itp.).