V webových aplikáciách založených na Spring Boot obsahuje balík spring-boot zabudovaný webový server, vrátane tomcat, jetty, undertow, a Netty.
Úvod do bežných webových kontajnerov
Kocúr
Tomcat je momentálne súčasťou projektu Apache a oficiálny odkaz jePrihlásenie na hypertextový odkaz je viditeľné. Tomcat je hlavný Java webový server, takže je veľmi stabilný a vyspelý, komunita je aktívna a bohatá na dokumentáciu a zdroje. Tomcat podporuje protokoly Http, Http/2, AJP, WebSocket a podporuje Servlet 6.0
Mólo
Jetty je server poskytovaný spoločnosťou Eclipse, oficiálny odkaz jePrihlásenie na hypertextový odkaz je viditeľné. Je ľahší ako Tomcat a má vlastnú asynchrónnu podporu. Jetty podporuje protokoly Http, Http/2, Http/3, AJP, WebSocket a podporuje Servlet 6.0
Netty
Netty je časovo riadený asynchrónny sieťový rámec, ktorý sa široko používa vo vysokovýkonných webových aplikáciách, najmä v serverových aplikáciách, ktoré spracovávajú veľké množstvo súbežných pripojení, oficiálny odkaz jePrihlásenie na hypertextový odkaz je viditeľné. Netty podporuje takmer všetky protokoly, vrátane SSL/TLS, HTTP, HTTP/2, HTTP/3, WebSockets, DNS, SPDY, SMTP a ďalších
Podvodný prúd
Undertow je server poskytovaný spoločnosťou JBoos, oficiálna adresa jePrihlásenie na hypertextový odkaz je viditeľné. Undertow sa vyznačuje nízkou hmotnosťou, vysokým výkonom a lokálnou spotrebou zdrojov, pričom podporuje zabudované aplikácie a mikroslužby. Undertow podporuje protokoly Http, Http/2, WebSocket a podporuje Servlet 4.0
Apache Tomcat
Apache Tomcat je široko používaný webový server a servlet kontajner. Je to predvolená voľba pre tradičné Spring Boot aplikácie vďaka svojej robustnosti, jednoduchosti používania a kompatibilite so Servlet API.
Kľúčové vlastnosti:
Založený na Servletoch: Tomcat je postavený na Servlet API, čo ho robí ideálnym pre tradičné Spring MVC aplikácie. Blokovanie I/O: Tomcat funguje na modeli jedného vlákna na požiadavku, čo znamená, že každá prichádzajúca požiadavka je spracovaná samostatným vláknom. Jednoduchá konfigurácia: Tomcat je možné jednoducho nastaviť a nakonfigurovať pomocou Spring Boot, čo ho robí ideálnym pre širokú škálu webových aplikácií.
Vnútorná architektúra
Konektory: Spravujú sieťové pripojenia, prijímajú a spracovávajú HTTP požiadavky. Kontajner: Zodpovedný za správu životného cyklu servletov, vrátane načítavania, inicializácie a volania. Model vlákien: Tomcat používa vláknové pooly, kde každú požiadavku spracováva samostatné vlákno v poole. Tento model je jednoduchý, ale môže spôsobovať problémy so škálovateľnosťou pri vysokej záťaži kvôli konkurencii vlákien a pamäťovej záťaži.
Príklad scenára: Spracovanie paralelných požiadaviek
Pozrime sa na scenár, kde na server Tomcat prichádza päť paralelných požiadaviek:
Jedno vlákno na požiadavku: Tomcat priradí samostatné vlákno ku každému z piatich požiadaviek zo svojho vláknového poolu. Blokovanie I/O: Každé vlákno spracováva svoje požiadavky synchronne, blokujúc, ak sú potrebné nejaké I/O operácie, napríklad databázové volania.
Správa zdrojov: Ak má pool vlákien dostatok voľných vlákien, všetkých päť požiadaviek sa spracováva súčasne. Ak nie, ostatné požiadavky budú čakať vo fronte, kým nebude vlákno dostupné.
Zásluha:
Jednoduché a ľahko pochopiteľné. Ideálne pre tradičné webové aplikácie. Zrelý, stabilný a s rozsiahlou podporou komunity.
Nedostatok:
Obmedzená škálovateľnosť pri vysokej záťaži kvôli režijnej režii vlákien. Vyššia spotreba pamäte na jednu požiadavku.
Netty
Netty je vysokovýkonný, asynchrónny webový aplikačný framework riadený udalosťami. Je to predvolený framework pre Spring WebFlux, ktorý je navrhnutý pre responzívne programovanie.
Kľúčové vlastnosti:
Riadené udalosťami: Netty používa architektúru riadenú udalosťami, čo ho robí vhodným na efektívne spracovanie veľkého objemu súčasných pripojení. Neblokujúce I/O: Netty využíva neblokujúce I/O, čo mu umožňuje spracovať mnoho spojení s menším počtom vlákien. Škálovateľnosť: Navrhnutá pre aplikácie s vysokou súbežnosťou, nízkou latenciou a vysokou priepustnosťou.
Vnútorná architektúra
Event Loop: Základnou súčasťou Netty je event loop, ktorý spravuje I/O operácie asynchrónne. Skupina udalostí obsahuje jednu alebo viac slučiek udalostí. Kanál: Predstavuje spojenie, napríklad prichádzajúci HTTP požiadavok, a je spojený so slučkou udalostí. Model vlákien: Netty používa malý počet vlákien na spracovanie veľkého počtu pripojení. Každá eventová slučka beží v jednom vlákne a spracováva viacero kanálov, čo ju robí vysoko škálovateľnou.
Príklad scenára: Spracovanie paralelných požiadaviek
Predstavme si scenár, kde na server Netty dorazí päť paralelných požiadaviek:
Model riadený udalosťami: Netty distribuuje päť požiadaviek vo svojom okruhu udalostí. Neblokujúci I/O: Operácia neblokuje vlákno slučky udalostí. Namiesto toho sa I/O operácie vykonávajú asynchrónne, čo umožňuje rovnakému vláknu efektívne spravovať viacero spojení.
Škálovateľnosť: Vďaka svojej neblokujúcej povahe dokáže Netty zvládnuť veľký počet pripojení s relatívne malým počtom vlákien.
Zásluha:
Vysoko efektívne pre úlohy náročné na I/O. Vynikajúca škálovateľnosť a výkon pri vysokej súbežnosti. Ideálne pre reaktívne programovanie a moderné webové aplikácie.
Nedostatok:
Je zložitejšie na pochopenie a konfiguráciu. V porovnaní s tradičnými servletovými aplikáciami je potrebný iný programovací model (reaktívny).
záver
Netty a Tomcat pôsobia v rôznych oblastiach serverových rámcov. Netty je vysoko flexibilný základný rámec navrhnutý pre vlastné sieťové protokoly a vysokovýkonné scenáre; Tomcat je overenou voľbou pre Java webové aplikácie, ktoré spĺňajú štandardy Java EE a Jakarta EE. Voľba medzi týmito dvoma závisí od konkrétnych potrieb projektu, či už ide o stavbu webového servera s vlastnými protokolmi alebo tradičnú webovú aplikáciu.
Referencia:
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné. |