2013-07-14 11 views
6

Zbudowałem warstwę wykrywania usług na Zookeeperze w celu znalezienia usług Thrift w rozproszonym środowisku. Szukam najlepszego sposobu na uruchomienie tych usług w środowisku produkcyjnym.Wdrażanie i serwowanie usługi oszczędzania

Obecnie odbywa się to poprzez pakowanie wojny, która zostanie wdrożona na serwerze Tomcat. Podczas tworzenia serwletu tworzony jest Spring ApplicationContext, który tworzy wewnątrz Tomcata TThreadPoolServer.

nie podoba mi się to na kilka powodów:

  • To sprawia Tomcat rodzaj bezużyteczne, a on czuje się jak hack, aby ułatwić łatwe wdrażanie
  • Unika łączenia Tomcat wątek i wszystko logiki, że włożono w zastanawianie się, że najlepszym sposobem dystrybucji żądań

W procesie próbując znaleźć najlepszą strategię do obsługi tego, mam wymyślić kilka alternatyw:

  • usługi Uruchomienie Thrift jako samodzielny JAR (nie lubię tego, głównie dlatego, że teraz trzeba na nowo z logiką, że twórcy aplikacji kontenerów poświęca wiele czasu wypracowanie
  • Host zapobiegliwości przez HTTP, dzięki wykorzystaniu basen Tomcat wątek i logika dla zgłoszeń serwisowych (niepewni o tym jednego powodu do - choć niewielkich - Wyniki trafienie spowoduje to powstanie)
  • użyć innego typu kontenera aplikacji do organizacji tych usług

Czy ktoś ma sugestie dotyczące sposobu, w jaki mogły wcześniej obsługiwać serwery rozproszone. Czy lepiej jest używać HTTP w Tomcat?

+1

To pytanie nie jest poza tematem: nie chodzi o scenariusz wdrożenia istniejącego serwera, ale o architekturę nowo opracowanej usługi, z uwzględnieniem programowania. – Wildfire

Odpowiedz

6

Próbowałem używać Tomcat jako hosta dla serwera Thrift i okazało się, że nie przynosi on żadnej dodatkowej wartości: wszystkie funkcje kontenera serwletu (routing żądania, itp.) Nie są konieczne w tym scenariuszu. Z drugiej strony, Tomcat dodaje złożoność i ruchome części (to znaczy, że sprawia trudności w rozwiązywaniu problemów PermGenu).

Korzystanie z funkcji Thrift over HTTP powoduje znaczny wpływ na wydajność, szczególnie w scenariuszach o dużym obciążeniu z wieloma połączeniami klientów.

Więc skończyłem z samodzielnymi usługami Thrift działającymi pod nadzorem Daemon (http://supervisord.org/). Dzięki temu zarządzanie rozproszonym wdrożeniem jest naprawdę wygodne. Kiedy trzeba ujawnić Thrift API przez HTTP (na przykład dla klientów JS), używamy cienkiego asynchronicznego proxy zaimplementowanego w vert.x (http://vertx.io/).

+0

Czy pakujesz swoje zależności w swoim słoiku? Jak radzisz sobie z rzeczywistym wdrożeniem? Teraz używam web interfejsu Tomcat do przesyłania WAR, co jest bardzo wygodne. –

+0

@ColinMorelli: Nie pakujemy zależności w pojedynczy słoik. Zamiast tego tworzymy dystrybucję składającą się ze słoika aplikacji i zestawu zależności. Używamy skryptu fabric, który dystrybuuje dystrybucję do serwerów za pośrednictwem rsync. To naprawdę oszczędza czas przy wdrażaniu słoja aplikacji ~ 500kb z ~ 50mb rzadko zmieniających się bibliotek na 20 hostach. Wdrożenie WAR jest wygodne dla małych wdrożeń, ale nie skaluje się do dużych. – Wildfire

+0

Świetnie, brzmi dobrze dla mnie. W chwili obecnej moja lista zależności jest stosunkowo niewielka. Prawdopodobnie po prostu skończę budować pakiet JAR, aby uprościć rzeczy, aż stanie się zbyt duży.Poza tym, utrzymam to z Supervisord. Dzięki! –

Powiązane problemy