Spring Boot-põhistes veebirakendustes sisaldab spring-boot pakett sisseehitatud veebiserverit, kuhu kuuluvad tomcat, jetty, undertow ja netty.
Sissejuhatus levinud veebikonteineritesse
Tomcat
Tomcat on praegu Apache projektis kaasatud ning ametlik link onHüperlingi sisselogimine on nähtav. Tomcat on peavoolu Java veebiserver, seega väga stabiilne ja küps ning kogukond on aktiivne ja rikas dokumentatsiooni ja ressursside poolest. Tomcat toetab Http, Http/2, AJP, WebSocket protokolle ning toetab Servlet 6.0
Kai
Jetty on Eclipse'i poolt pakutav server, ametlik link onHüperlingi sisselogimine on nähtav. See on kergem kui Tomcat ja omab oma asünkroonne tugi. Jetty toetab Http, Http/2, Http/3, AJP, WebSocket protokolle ning toetab Servlet 6.0
Netty
Netty on ajapõhine asünkroonne võrguraamistik, mida kasutatakse laialdaselt kõrge jõudlusega veebirakendustes, eriti serveripoolsetes rakendustes, mis haldavad suurt hulka samaaegseid ühendusi; ametlik link onHüperlingi sisselogimine on nähtav. Netty toetab peaaegu kõiki protokolle, sealhulgas SSL/TLS, HTTP, HTTP/2, HTTP/3, WebSockets, DNS, SPDY, SMTP jne
Alavoolu
Undertow on JBoosi poolt pakutav server, ametlik aadress onHüperlingi sisselogimine on nähtav. Undertow'd iseloomustab kerge kaal, kõrge jõudlus ja kohaliku ressursikasutuse poolest, toetades samal ajal manusrakendusi ja mikroteenuseid. Undertow toetab Http, Http/2, WebSocket protokolle ning toetab Servlet 4.0
Apache Tomcat
Apache Tomcat on laialdaselt kasutatav veebiserver ja servlet-konteiner. See on traditsiooniliste Spring Boot rakenduste vaikimisi valik tänu oma vastupidavusele, kasutusmugavusele ja ühilduvusele Servlet API-ga.
Peamised omadused:
Servletite põhjal: Tomcat põhineb Servlet API-l, mis teeb selle ideaalseks traditsioonilistele Spring MVC rakendustele. I/O blokeerimine: Tomcat töötab ühe lõime mudelil iga päringu kohta, mis tähendab, et iga saabuv päring käsitletakse eraldi lõime kaudu. Lihtne seadistamine: Tomcati saab hõlpsasti seadistada ja seadistada Spring Bootiga, muutes selle ideaalseks paljude veebirakenduste jaoks.
Sisemine arhitektuur
Ühendused: Võrguühenduste haldamine, HTTP-päringute vastu võtmine ja töötlemine. Konteiner: Vastutab servleti elutsükli haldamise eest, sealhulgas laadimise, initsialiseerimise ja kutsumise eest. Lõimemudel: Tomcat kasutab lõimekogumeid, kus iga päring toimub eraldi lõime kaudu basseinis. See mudel on lihtne, kuid võib suure koormuse korral põhjustada skaleeritavuse probleeme lõimede vaidluse ja mälukoormuse tõttu.
Näide: Paralleelsete päringute käsitlemine
Vaatleme olukorda, kus viis paralleelset päringut jõuavad Tomcati serverisse:
Üks lõim iga päringu kohta: Tomcat määrab igale viiest päringust eraldi lõime. I/O blokeerimine: Iga lõim töötleb oma päringuid sünkroonselt, blokeerides, kui on vaja mingeid I/O operatsioone, näiteks andmebaasi kõnesid.
Ressursihaldus: Kui lõimede basseinis on piisavalt vabu lõimesid, töödeldakse kõik viis päringut samaaegselt. Kui mitte, ootavad teised päringud järjekorras, kuni lõim on saadaval.
Merit:
Lihtne ja lihtne mõista. Ideaalne traditsioonilistele veebirakendustele. Küps, stabiilne ja ulatusliku kogukonna toetusega.
Puudus:
Piiratud skaleeritavus suure koormuse all lõime koormuse tõttu. Suurem mälutarbimine ühe päringu kohta.
Netty
Netty on kõrge jõudlusega, asünkroonne sündmuspõhine veebirakenduste raamistik. See on Spring WebFluxi vaikimisi raamistik, mis on loodud reageerivaks programmeerimiseks.
Peamised omadused:
Sündmuspõhine: Netty kasutab sündmuspõhist arhitektuuri, mis teeb selle sobivaks suure hulga samaaegsete ühenduste tõhusaks haldamiseks. Mitteblokeeriv I/O: Netty kasutab mitteblokeerivat I/O-d, võimaldades hallata palju ühendusi vähemate lõimedega. Skaleeritavus: Loodud kõrge samaaegsuse, madala latentsuse ja suure läbilaskevõimega rakenduste jaoks.
Sisemine arhitektuur
Sündmuste tsükkel: Netty põhikomponent on sündmuste tsükkel, mis haldab I/O operatsioone asünkroonselt. Sündmuste tsükligrupp sisaldab ühte või mitut sündmustsüklit. Kanal: Esindab ühendust, näiteks saabuvat HTTP-päringut, ja on seotud sündmuste tsükliga. Lõimemudel: Netty kasutab väikest arvu lõime, et hallata suurt hulka ühendusi. Iga sündmustsükkel töötab ühes lõimes ja haldab mitut kanalit, muutes selle väga skaleeritavaks.
Näide: Paralleelsete päringute käsitlemine
Võtame näiteks olukorra, kus viis paralleelset päringut jõuavad Netty serverisse:
Sündmuspõhine mudel: Netty jagab oma sündmuste tsüklis viit päringut. Mitteblokeeriv I/O: Operatsioon ei blokeeri sündmuste tsükli lõime. Selle asemel käsitletakse I/O operatsioone asünkroonselt, võimaldades samal lõimel hallata mitut ühendust tõhusalt.
Skaleeritavus: Tänu oma mitteblokeerivale olemusele suudab Netty hallata suurt hulka ühendusi suhteliselt väikese lõimede arvuga.
Merit:
Väga tõhus I/O-intensiivsete ülesannete jaoks. Suurepärane skaleeritavus ja jõudlus kõrge samaaegsuse korral. Ideaalne reaktiivseks programmeerimiseks ja kaasaegseteks veebirakendusteks.
Puudus:
Seda on keerulisem mõista ja seadistada. Võrreldes traditsiooniliste servlet-põhiste rakendustega on vaja teistsugust programmeerimismudelit (reaktiivne).
Järeldus
Netty ja Tomcat teenindavad serveriraamistiku valdkonnas erinevaid valdkondi. Netty on väga paindlik aluseks olev raamistik, mis on loodud kohandatud võrguprotokollide ja kõrge jõudlusega stsenaariumite jaoks; Tomcat on tõestatud valik Java veebirakendustele, mis vastavad Java EE ja Jakarta EE standarditele. Valik nende kahe vahel sõltub projekti konkreetsetest vajadustest, olgu selleks veebiserveri ehitamine kohandatud protokollidega või traditsiooniline veebirakendus.
Viide:
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav. |