V webových aplikacích založených na Spring Boot obsahuje balíček spring-boot vestavěný webový server, včetně tomcat, jetty, undertow, a Netty.
Úvod do běžných webových kontejnerů
Kocour
Tomcat je v současnosti součástí projektu Apache a oficiální odkaz jePřihlášení k hypertextovému odkazu je viditelné. Tomcat je běžný Java webový server, takže je velmi stabilní a vyspělý, komunita je aktivní a bohatá na dokumentaci a zdroje. Tomcat podporuje protokoly Http, Http/2, AJP, WebSocket a Servlet 6.0
Molo
Jetty je server poskytovaný společností Eclipse, oficiální odkaz jePřihlášení k hypertextovému odkazu je viditelné. Je lehčí než Tomcat a má vlastní asynchronní podporu. Jetty podporuje protokoly Http, Http/2, Http/3, AJP, WebSocket a podporuje Servlet 6.0
Netty
Netty je časově řízený asynchronní síťový framework, který se široce používá ve vysoce výkonných webových aplikacích, zejména v serverových aplikacích, které zpracovávají velké množství souběžných připojení, oficiální odkaz jePřihlášení k hypertextovému odkazu je viditelné. Netty podporuje téměř všechny protokoly, včetně SSL/TLS, HTTP, HTTP/2, HTTP/3, WebSockets, DNS, SPDY, SMTP a dalších
Podtón
Undertow je server poskytovaný JBoosem, oficiální adresa jePřihlášení k hypertextovému odkazu je viditelné. Undertow se vyznačuje nízkou hmotností, vysokým výkonem a spotřebou lokálních zdrojů, přičemž podporuje vestavěné aplikace a mikroservisy. Undertow podporuje protokoly Http, Http/2, WebSocket a Servlet 4.0
Apache Tomcat
Apache Tomcat je široce používaný webový server a servletový kontejner. Je výchozí volbou pro tradiční Spring Boot aplikace díky své robustnosti, snadnému používání a kompatibilitě se Servlet API.
Klíčové vlastnosti:
Založeno na Servletech: Tomcat je postaven na Servlet API, což ho činí ideálním pro tradiční aplikace Spring MVC. Blokování vstupů/výstupů: Tomcat funguje na modelu jednoho vlákna na požadavek, což znamená, že každý příchozí požadavek je zpracováván samostatným vláknem. Jednoduchá konfigurace: Tomcat lze snadno nastavit a konfigurovat pomocí Spring Boot, což z něj činí ideální pro širokou škálu webových aplikací.
Vnitřní architektura
Konektory: Spravují síťová připojení, přijímají a zpracovávají HTTP požadavky. Kontejner: Zodpovědný za správu životního cyklu servletů, včetně načítání, inicializace a vyvolání. Model vláken: Tomcat používá pooly vláken, kde každý požadavek zpracovává samostatné vlákno v poolu. Tento model je jednoduchý, ale může způsobovat problémy se škálovatelností při vysoké zátěži kvůli sporu vláken a paměťové zátěži.
Příklad scénáře: Zpracování paralelních požadavků
Uvažujme scénář, kdy na server Tomcat dorazí pět paralelních požadavků:
Jedno vlákno na požadavek: Tomcat přiřadí každému z pěti požadavků ze svého vlákna samostatné vlákno. Blokování vstupů/výstupů: Každé vlákno zpracovává své požadavky synchronně a blokuje, pokud jsou vyžadovány nějaké I/O operace, například volání databáze.
Správa zdrojů: Pokud má pool vláken dostatek volných vláken, všech pět požadavků je zpracováváno současně. Pokud ne, ostatní požadavky budou čekat ve frontě, dokud nebude vlákno k dispozici.
Zásluha:
Jednoduché a snadno pochopitelné. Ideální pro tradiční webové aplikace. Vyspělá, stabilní a s rozsáhlou podporou komunity.
Nedostatek:
Omezená škálovatelnost při vysoké zátěži kvůli režii vláken. Vyšší spotřeba paměti na jeden požadavek.
Netty
Netty je vysoce výkonný, asynchronní webový aplikační framework řízený událostmi. Je to výchozí framework pro Spring WebFlux, který je navržen pro responzivní programování.
Klíčové vlastnosti:
Řízené událostmi: Netty používá architekturu řízenou událostmi, což jej činí vhodnou pro efektivní zpracování velkého objemu současných připojení. Neblokující vstupy/výstupy: Netty využívá neblokující vstupy/výstupy, což mu umožňuje zpracovat mnoho spojení s menším počtem vláken. Škálovatelnost: Navrženo pro aplikace s vysokou současností, nízkou latencí a vysokou propustností.
Vnitřní architektura
Event Loop: Základní složkou Netty je event loop, který asynchronně řídí I/O operace. Skupina událostí obsahuje jednu nebo více událostních smyček. Kanál: Představuje spojení, například příchozí HTTP požadavek, a je spojen s událostí ve smyčce. Model vláken: Netty používá malý počet vláken pro zpracování velkého počtu připojení. Každá událost smyčka běží v jednom vlákně a zpracovává více kanálů, což ji činí vysoce škálovatelnou.
Příklad scénáře: Zpracování paralelních požadavků
Uvažujme scénář, kdy na server Netty dorazí pět paralelních požadavků:
Model řízený událostmi: Netty distribuuje pět požadavků ve své událostové smyčce. Neblokující I/O: Operace neblokuje vlákno událostní smyčky. Místo toho jsou I/O operace zpracovávány asynchronně, což umožňuje stejnému vláknu efektivně spravovat více spojení.
Škálovatelnost: Díky své neblokující povaze dokáže Netty zvládnout velké množství spojení s relativně malým počtem vláken.
Zásluha:
Vysoce efektivní pro úkoly náročné na I/O. Lepší škálovatelnost a výkon při vysoké souběžnosti. Ideální pro reaktivní programování a moderní webové aplikace.
Nedostatek:
Je složitější ji pochopit a nastavit. Ve srovnání s tradičními servletovými aplikacemi je vyžadován jiný programovací model (reaktivní).
závěr
Netty a Tomcat se věnují různým oblastem serverových frameworků. Netty je vysoce flexibilní základní framework navržený pro vlastní síťové protokoly a vysoce výkonné scénáře; Tomcat je osvědčenou volbou pro Java webové aplikace, které splňují standardy Java EE a Jakarta EE. Volba mezi těmito dvěma závisí na konkrétních potřebách projektu, ať už jde o stavbu webového serveru s vlastními protokoly, nebo tradiční webové aplikace.
Odkaz:
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné.
Přihlášení k hypertextovému odkazu je viditelné. |