I Spring Boot-baserade webbapplikationer inkluderar spring-boot-paketet en inbyggd webbserver, inklusive tomcat, jetty, undertow och netty.
Introduktion till vanliga webbcontainrar
Hankatt
Tomcat ingår för närvarande i Apache-projektet, och den officiella länken ärInloggningen med hyperlänken är synlig. Tomcat är en mainstream Java-webbserver, så den är mycket stabil och mogen, och communityn är aktiv och rik på dokumentation och resurser. Tomcat stöder Http, Http/2, AJP, WebSocket-protokoll och stöder Servlet 6.0
Brygga
Jetty är en server som tillhandahålls av Eclipse, den officiella länken ärInloggningen med hyperlänken är synlig. Den är lättare än Tomcat och har sitt eget asynkrona stöd. Jetty stöder HTTP, Http/2, Http/3, AJP, WebSocket-protokoll och stöder Servlet 6.0
Netty
Netty är ett tidsstyrt asynkront nätverksramverk som används flitigt i högpresterande webbapplikationer, särskilt serverapplikationer som hanterar ett stort antal samtidiga anslutningar, den officiella länken ärInloggningen med hyperlänken är synlig. Netty stöder nästan alla protokoll, inklusive SSL/TLS, HTTP, HTTP/2, HTTP/3, WebSockets, DNS, SPDY, SMTP, etc
Undertow
Undertow är en server som tillhandahålls av JBoos, den officiella adressen ärInloggningen med hyperlänken är synlig. Undertow kännetecknas av sin låga vikt, höga prestanda och lokala resursanvändning, samtidigt som det stödjer inbyggda applikationer och mikrotjänster. Undertow stöder Http, Http/2, WebSocket-protokoll och stöder Servlet 4.0
Apache Tomcat
Apache Tomcat är en mycket använd webbserver och servlet-container. Det är standardvalet för traditionella Spring Boot-applikationer tack vare dess robusthet, användarvänlighet och kompatibilitet med Servlet API.
Nyckelfunktioner:
Baserat på Servlets: Tomcat är byggt kring Servlet API, vilket gör det idealiskt för traditionella Spring MVC-applikationer. Blockering av I/O: Tomcat arbetar med en modell med en tråd per förfrågan, vilket innebär att varje inkommande förfrågan hanteras av en separat tråd. Enkel konfiguration: Tomcat kan enkelt sättas upp och konfigureras med Spring Boot, vilket gör det idealiskt för ett brett utbud av webbapplikationer.
Intern arkitektur
Connectors: Hantera nätverksanslutningar, acceptera och behandla HTTP-förfrågningar. Container: Ansvarig för servlet-livscykelhantering, inklusive laddning, initiering och anrop. Trådmodell: Tomcat använder trådpooler, där varje förfrågan hanteras av en separat tråd i poolen. Denna modell är enkel men kan orsaka skalbarhetsproblem vid hög belastning på grund av trådkonkurrens och minnesöverhead.
Exempelscenario: Hantering av parallella förfrågningar
Låt oss betrakta ett scenario där fem parallella förfrågningar anländer till Tomcat-servern:
En tråd per förfrågan: Tomcat tilldelar en separat tråd till var och en av de fem förfrågningarna från sin trådpool. Blockering av I/O: Varje tråd bearbetar sina förfrågningar synkront och blockerar om några I/O-operationer krävs, såsom databasanrop.
Resurshantering: Om trådpoolen har tillräckligt många lediga trådar behandlas alla fem förfrågningar samtidigt. Om inte, kommer andra förfrågningar att vänta i kön tills en tråd är tillgänglig.
Förtjänst:
Enkelt och lätt att förstå. Idealiskt för traditionella webbapplikationer. Moget, stabilt och med omfattande stöd från samhället.
Brist:
Begränsad skalbarhet under hög belastning på grund av trådöverhead. Högre minnesförbrukning per förfrågan.
Netty
Netty är ett högpresterande, asynkront händelsedrivet webbapplikationsramverk. Det är standardramverket för Spring WebFlux, som är utformat för responsiv programmering.
Nyckelfunktioner:
Händelsedrivet: Netty använder en händelsedriven arkitektur, vilket gör den lämplig för att effektivt hantera en stor volym samtidiga anslutningar. Icke-blockerande I/O: Netty använder icke-blockerande I/O, vilket gör att det kan hantera många anslutningar med färre trådar. Skalbarhet: Designad för applikationer med hög samtidighet, låg latens och hög genomströmning.
Intern arkitektur
Händelseloop: Kärnkomponenten i Netty är händelseloopen, som hanterar I/O-operationer asynkront. En händelseloopgrupp innehåller en eller flera händelseloopar. Kanal: Representerar en anslutning, såsom en inkommande HTTP-förfrågan, och är kopplad till en händelseloop. Trådmodell: Netty använder ett litet antal trådar för att hantera ett stort antal anslutningar. Varje händelseloop körs i en enda tråd och hanterar flera kanaler, vilket gör den mycket skalbar.
Exempelscenario: Hantering av parallella förfrågningar
Tänk dig ett scenario där fem parallella förfrågningar anländer till Netty-servern:
Händelsedriven modell: Netty distribuerar fem förfrågningar i sin händelseloop. Icke-blockerande I/O: Operationen blockerar inte händelselooptråden. Istället hanteras I/O-operationer asynkront, vilket gör att samma tråd effektivt kan hantera flera anslutningar.
Skalbarhet: På grund av sin icke-blockerande natur kan Netty hantera ett stort antal anslutningar med relativt få trådar.
Förtjänst:
Mycket effektivt för I/O-intensiva uppgifter. Överlägsen skalbarhet och prestanda vid hög samtidighet. Idealiskt för reaktiv programmering och moderna webbapplikationer.
Brist:
Det är mer komplext att förstå och konfigurera. Jämfört med traditionella servlet-baserade applikationer krävs en annan programmeringsmodell (reaktiv).
slutsats
Netty och Tomcat betjänar olika områden inom serverramverk. Netty är ett mycket flexibelt underliggande ramverk utformat för anpassade nätverksprotokoll och högpresterande scenarier; Tomcat är ett beprövat val för Java-webbapplikationer som uppfyller Java EE- och Jakarta EE-standarder. Valet mellan de två beror på projektets specifika behov, vare sig det handlar om att bygga en webbserver med anpassade protokoll eller en traditionell webbapplikation.
Hänvisning:
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig.
Inloggningen med hyperlänken är synlig. |