W aplikacjach webowych opartych na Spring Boot pakiet spring-boot zawiera wbudowany serwer WWW, w tym tomcat, jetty, undertow, oraz netty.
Wprowadzenie do powszechnych kontenerów internetowych
Kocur
Tomcat jest obecnie włączony do projektu Apache, a oficjalny link toLogowanie do linku jest widoczne. Tomcat to popularny serwer Java, więc jest bardzo stabilny i dojrzały, a społeczność jest aktywna i bogata w dokumentację oraz zasoby. Tomcat obsługuje protokoły Http, Http/2, AJP, WebSocket oraz obsługuje Servlet 6.0
Molo
Jetty to serwer udostępniony przez Eclipse, oficjalny link toLogowanie do linku jest widoczne. Jest lżejszy niż Tomcat i posiada własne wsparcie asynchroniczne. Jetty obsługuje protokoły Http, Http/2, Http/3, AJP, WebSocket oraz obsługuje Servlet 6.0
Netty
Netty to czasowo-sterowany asynchroniczny framework sieciowy, szeroko stosowany w wysokowydajnych aplikacjach webowych, zwłaszcza w aplikacjach serwerowych, które obsługują dużą liczbę jednoczesnych połączeń, oficjalny link toLogowanie do linku jest widoczne. Netty obsługuje niemal wszystkie protokoły, w tym SSL/TLS, HTTP, HTTP/2, HTTP/3, WebSockets, DNS, SPDY, SMTP itd
Cofająca
Undertow to serwer udostępniony przez JBoos, oficjalny adres toLogowanie do linku jest widoczne. Undertow charakteryzuje się lekkością, wysoką wydajnością i lokalnym zużywaniem zasobów, a jednocześnie obsługuje aplikacje wbudowane i mikroserwisy. Undertow obsługuje protokoły Http, Http/2, WebSocket oraz Servlet 4.0
Apache Tomcat
Apache Tomcat to szeroko stosowany serwer WWW i kontener serwletowy. Jest to domyślny wybór dla tradycyjnych aplikacji Spring Boot ze względu na jego odporność, łatwość obsługi oraz kompatybilność z API Servlet.
Kluczowe cechy:
Oparte na Servletach: Tomcat jest zbudowany wokół API Servlet, co czyni go idealnym dla tradycyjnych aplikacji Spring MVC. Blokowanie I/O: Tomcat działa na modelu jednego wątku na żądanie, co oznacza, że każde żądanie przychodzące jest obsługiwane przez osobny wątek. Łatwa konfiguracja: Tomcat można łatwo skonfigurować i skonfigurować za pomocą Spring Boot, co czyni go idealnym dla szerokiego zakresu aplikacji webowych.
Architektura wewnętrzna
Łączniki: Zarządzaj połączeniami sieciowymi, akceptuj i przetwarzaj żądania HTTP. Kontener: Odpowiada za zarządzanie cyklem życia serwletów, w tym ładowanie, inicjalizację i wywołanie. Model wątków: Tomcat wykorzystuje pule wątków, gdzie każde żądanie jest obsługiwane przez osobny wątek w puli. Model ten jest prosty, ale może powodować problemy ze skalowalnością przy dużym obciążeniu z powodu rywalizacji wątków i narzutu pamięci.
Przykładowy scenariusz: Obsługa żądań równoległych
Przyjrzyjmy się scenariuszowi, w którym pięć równoległych żądań dociera do serwera Tomcat:
Jeden wątek na każde żądanie: Tomcat przypisuje osobny wątek do każdego z pięciu żądań ze swojej puli wątków. Blokowanie I/O: Każdy wątek przetwarza swoje żądania synchronicznie, blokując ewentualne operacje I/O, takie jak wywołania bazy danych.
Zarządzanie zasobami: Jeśli pula wątków zawiera wystarczającą liczbę wolnych wątków, wszystkie pięć żądań jest przetwarzanych jednocześnie. Jeśli nie, inne żądania będą czekać w kolejce, aż wątek będzie dostępny.
Zasługa:
Proste i łatwe do zrozumienia. Idealne dla tradycyjnych aplikacji webowych. Dojrzała, stabilna i z szerokim wsparciem społeczności.
Niedociągnięcie:
Ograniczona skalowalność przy dużym obciążeniu z powodu narzutu wątków. Większe zużycie pamięci na jedno żądanie.
Netty
Netty to wysokowydajny, asynchroniczny, zdarzeniowo-sterowany framework aplikacji webowych. Jest to domyślny framework dla Spring WebFlux, który został zaprojektowany do responsywnego programowania.
Kluczowe cechy:
Napędzane zdarzeniami: Netty wykorzystuje architekturę opartą na zdarzeniach, co czyni ją odpowiednią do efektywnej obsługi dużej liczby jednoczesnych połączeń. Nieblokujące wejścia/wyjścia: Netty wykorzystuje nieblokujące wejścia/wyjścia, co pozwala obsługiwać wiele połączeń przy mniejszej liczbie wątków. Skalowalność: Zaprojektowana z myślą o wysokiej równoczeżności, niskim opóźnieniu i wysokiej przepustowości.
Architektura wewnętrzna
Pętla zdarzeń: Podstawowym elementem Netty jest pętla zdarzeń, która zarządza operacjami I/O asynchronicznie. Grupa pętli zdarzeń zawiera jedną lub więcej pętli zdarzeń. Kanał: Reprezentuje połączenie, takie jak przychodzące żądanie HTTP, i jest powiązany z pętlą zdarzeń. Model wątków: Netty używa niewielkiej liczby wątków do obsługi dużej liczby połączeń. Każda pętla zdarzeń działa w jednym wątku i obsługuje wiele kanałów, co sprawia, że jest wysoce skalowalna.
Przykładowy scenariusz: Obsługa żądań równoległych
Rozważmy sytuację, w której pięć równoległych żądań dociera do serwera Netty:
Model zdarzeniowy: Netty dystrybuuje pięć żądań w swojej pętli zdarzeń. Nieblokujące wejście/wyjście: Operacja nie blokuje wątku pętli zdarzeń. Zamiast tego operacje I/O są obsługiwane asynchronicznie, co pozwala temu samemu wątkowi efektywnie zarządzać wieloma połączeniami.
Skalowalność: Dzięki nieblokującej naturze Netty może obsługiwać dużą liczbę połączeń przy stosunkowo niewielkiej liczbie wątków.
Zasługa:
Bardzo wydajne do zadań wymagających intensywnego wejścia i wyjścia. Lepsza skalowalność i wydajność przy dużych współbieżnościach. Idealne do programowania reaktywnego i nowoczesnych aplikacji webowych.
Niedociągnięcie:
Jest bardziej skomplikowany do zrozumienia i skonfigurowania. W porównaniu do tradycyjnych aplikacji opartych na serletach, wymagany jest inny model programowania (reaktywny).
konkluzja
Netty i Tomcat obsługują różne obszary w dziedzinie frameworków serwerowych. Netty to wysoce elastyczny framework zaprojektowany do niestandardowych protokołów sieciowych i scenariuszy wysokiej wydajności; Tomcat jest sprawdzonym wyborem dla aplikacji internetowych w Javie, które spełniają standardy Java EE i Jakarta EE. Wybór między nimi zależy od konkretnych potrzeb projektu, czy to budowania serwera WWW z niestandardowymi protokołami, czy tradycyjnej aplikacji webowej.
Odniesienie:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne. |