I webapplikasjoner basert på Spring Boot inkluderer spring-boot-pakken en innebygd webserver, inkludert tomcat, jetty, undertow og netty.
Introduksjon til vanlige webcontainere
Hannkatt
Tomcat er for øyeblikket inkludert i Apache-prosjektet, og den offisielle lenken erInnloggingen med hyperkoblingen er synlig. Tomcat er en mainstream Java-webserver, så den er veldig stabil og moden, og fellesskapet er aktivt og rikt på dokumentasjon og ressurser. Tomcat støtter Http, Http/2, AJP, WebSocket-protokoller, og støtter Servlet 6.0
Brygge
Jetty er en server levert av Eclipse, den offisielle lenken erInnloggingen med hyperkoblingen er synlig. Den er lettere enn Tomcat og har sin egen asynkrone støtte. Jetty støtter HTTP, Http/2, Http/3, AJP, WebSocket-protokoller, og støtter Servlet 6.0
Netty
Netty er et tidsdrevet asynkront nettverksrammeverk som er mye brukt i høyytelses webapplikasjoner, spesielt serverapplikasjoner som håndterer et stort antall samtidige tilkoblinger, den offisielle lenken erInnloggingen med hyperkoblingen er synlig. Netty støtter nesten alle protokoller, inkludert SSL/TLS, HTTP, HTTP/2, HTTP/3, WebSockets, DNS, SPDY, SMTP, osv
Undertow
Undertow er en server levert av JBoos, den offisielle adressen erInnloggingen med hyperkoblingen er synlig. Undertow kjennetegnes av sin lettvekt, høye ytelse og lokale ressursforbruk, samtidig som det støtter innebygde applikasjoner og mikrotjenester. Undertow støtter Http, Http/2, WebSocket-protokoller, og støtter Servlet 4.0
Apache Tomcat
Apache Tomcat er en mye brukt webserver og servlet-container. Det er standardvalget for tradisjonelle Spring Boot-applikasjoner på grunn av sin robusthet, brukervennlighet og kompatibilitet med Servlet API.
Nøkkelfunksjoner:
Basert på Servlets: Tomcat er bygget rundt Servlet API, noe som gjør det ideelt for tradisjonelle Spring MVC-applikasjoner. Blokkering av I/O: Tomcat opererer på en modell med én tråd per forespørsel, noe som betyr at hver innkommende forespørsel håndteres av en separat tråd. Enkel konfigurasjon: Tomcat kan enkelt settes opp og konfigureres med Spring Boot, noe som gjør det ideelt for et bredt spekter av webapplikasjoner.
Intern arkitektur
Koblinger: Administrerer nettverksforbindelser, aksepterer og behandler HTTP-forespørsler. Container: Ansvarlig for servlet-livssyklusstyring, inkludert lasting, initialisering og påkalling. Trådmodell: Tomcat bruker trådpooler, hvor hver forespørsel håndteres av en separat tråd i poolen. Denne modellen er enkel, men kan forårsake skalerbarhetsproblemer under høy belastning på grunn av trådkonflikt og minneoverhead.
Eksempelscenario: Håndtering av parallelle forespørsler
La oss se på et scenario der fem parallelle forespørsler ankommer Tomcat-serveren:
Én tråd per forespørsel: Tomcat tildeler en egen tråd til hver av de fem forespørslene fra sin trådpool. Blokkering av I/O: Hver tråd behandler sine forespørsler synkront, og blokkerer hvis noen I/O-operasjoner er nødvendige, som databasekall.
Ressurshåndtering: Hvis trådpoolen har nok ledige tråder, behandles alle fem forespørsler samtidig. Hvis ikke, vil andre forespørsler vente i køen til en tråd er tilgjengelig.
Fortjeneste:
Enkelt og lett å forstå. Ideell for tradisjonelle webapplikasjoner. Moden, stabil og med omfattende støtte fra lokalsamfunnet.
Brist:
Begrenset skalerbarhet under høy belastning på grunn av trådoverhead. Høyere minneforbruk per forespørsel.
Netty
Netty er et høyytelses, asynkront hendelsesdrevet webapplikasjonsrammeverk. Det er standardrammeverket for Spring WebFlux, som er designet for responsiv programmering.
Nøkkelfunksjoner:
Hendelsesdrevet: Netty bruker en hendelsesdrevet arkitektur, noe som gjør den egnet for å håndtere et stort volum av samtidige tilkoblinger effektivt. Ikke-blokkerende I/O: Netty benytter ikke-blokkerende I/O, noe som gjør det mulig å håndtere mange tilkoblinger med færre tråder. Skalerbarhet: Designet for applikasjoner med høy samtidighet, lav forsinkelse og høy gjennomstrømning.
Intern arkitektur
Hendelsessløyfe: Kjernekomponenten i Netty er hendelsesløkken, som håndterer I/O-operasjoner asynkront. En hendelsessløyfgruppe inneholder én eller flere hendelsesløkker. Kanal: Representerer en tilkobling, for eksempel en innkommende HTTP-forespørsel, og er knyttet til en hendelsessløyfe. Trådmodell: Netty bruker et lite antall tråder for å håndtere et stort antall tilkoblinger. Hver hendelsesløkke kjører i én tråd og håndterer flere kanaler, noe som gjør den svært skalerbar.
Eksempelscenario: Håndtering av parallelle forespørsler
Tenk deg et scenario der fem parallelle forespørsler ankommer Netty-serveren:
Hendelsesdrevet modell: Netty distribuerer fem forespørsler i sin hendelsessløyfe. Ikke-blokkerende I/O: Operasjonen blokkerer ikke hendelsesløkketråden. I stedet håndteres I/O-operasjoner asynkront, noe som gjør at samme tråd effektivt kan håndtere flere tilkoblinger.
Skalerbarhet: På grunn av sin ikke-blokkerende natur kan Netty håndtere et stort antall tilkoblinger med relativt få tråder.
Fortjeneste:
Svært effektivt for I/O-intensive oppgaver. Overlegen skalerbarhet og ytelse ved høy samtidighet. Ideell for reaktiv programmering og moderne webapplikasjoner.
Brist:
Det er mer komplekst å forstå og konfigurere. Sammenlignet med tradisjonelle servlet-baserte applikasjoner kreves en annen programmeringsmodell (reaktiv).
konklusjon
Netty og Tomcat dekker ulike områder innen serverrammeverk. Netty er et svært fleksibelt underliggende rammeverk designet for tilpassede nettverksprotokoller og høyytelsesscenarier; Tomcat er et bevist valg for Java-webapplikasjoner som oppfyller Java EE- og Jakarta EE-standarder. Valget mellom de to avhenger av prosjektets spesifikke behov, enten det er å bygge en webserver med tilpassede protokoller eller en tradisjonell webapplikasjon.
Referanse:
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig.
Innloggingen med hyperkoblingen er synlig. |