В уеб приложенията, базирани на Spring Boot, пакетът spring-boot включва вграден уеб сървър, включително tomcat, jetty, undertow и netty.
Въведение в често срещаните уеб контейнери
Tomcat
Tomcat в момента е включен в проекта Apache, а официалната връзка еВходът към хиперлинк е видим. Tomcat е основен Java уеб сървър, така че е много стабилен и зрял, а общността е активна и богата на документация и ресурси. Tomcat поддържа протоколи Http, Http/2, AJP, WebSocket и поддържа Servlet 6.0
Кей
Jetty е сървър, предоставен от Eclipse, официалният линк еВходът към хиперлинк е видим. Той е по-лек от Tomcat и има собствена асинхронна поддръжка. Jetty поддържа протоколи Http, Http/2, Http/3, AJP, WebSocket и поддържа Servlet 6.0
Нетти
Netty е времева асинхронна мрежова рамка, която се използва широко в високопроизводителни уеб приложения, особено сървърни приложения, които обработват голям брой едновременни връзки; официалната връзка еВходът към хиперлинк е видим. Netty поддържа почти всички протоколи, включително SSL/TLS, HTTP, HTTP/2, HTTP/3, WebSockets, DNS, SPDY, SMTP и др
Ъндъртул
Undertow е сървър, предоставен от JBoos, официалният адрес еВходът към хиперлинк е видим. Undertow се характеризира с лекота, висока производителност и локално потребление на ресурси, като същевременно поддържа вградени приложения и микроуслуги. Undertow поддържа Http, Http/2, WebSocket протоколи и Servlet 4.0
Апачи Томкат
Apache Tomcat е широко използван уеб сървър и контейнер със сервлет. Това е стандартният избор за традиционните приложения Spring Boot поради своята устойчивост, лесна употреба и съвместимост с Servlet API.
Ключови характеристики:
Базиран на Servlets: Tomcat е изграден около Servlet API, което го прави идеален за традиционни Spring MVC приложения. Блокиране на вход/изход: Tomcat работи по модел с една нишка на заявка, което означава, че всяка входяща заявка се обработва от отделна нишка. Лесна конфигурация: Tomcat може лесно да се настрои и конфигурира с Spring Boot, което го прави идеален за широк спектър от уеб приложения.
Вътрешна архитектура
Конектори: Управление на мрежовите връзки, приемане и обработка на HTTP заявки. Контейнер: Отговаря за управлението на жизнения цикъл на сервлетите, включително зареждане, инициализация и извикване. Модел на нишки: Tomcat използва пулове от нишки, където всяка заявка се обработва от отделна нишка в пула. Този модел е прост, но може да причини проблеми с мащабируемостта при високо натоварване поради конкуренция на нишки и натоварване на паметта.
Примерен сценарий: Обработка на паралелни заявки
Нека разгледаме сценарий, в който пет паралелни заявки пристигат на сървъра на Tomcat:
Една нишка за всяка заявка: Tomcat присвоява отделна нишка на всяка от петте заявки от своя пул от нишки. Блокиране на I/O: Всяка нишка обработва своите заявки синхронно, блокирайки, ако са необходими операции за въвеждане/изход, като например извиквания на база данни.
Управление на ресурси: Ако пулът от нишки има достатъчно свободни нишки, всички пет заявки се обработват едновременно. Ако не, други заявки ще чакат в опашката, докато се появи нишка.
Заслуга:
Просто и лесно за разбиране. Идеален за традиционни уеб приложения. Зрял, стабилен и с обширна подкрепа от общността.
Недостатък:
Ограничена мащабируемост при високо натоварване поради натоварване на нишките. По-висока консумация на памет на заявка.
Нетти
Netty е високопроизводителна, асинхронна, събитийно ориентирана уеб приложение. Това е стандартната рамка за Spring WebFlux, който е предназначен за адаптивно програмиране.
Ключови характеристики:
Event-Driven: Netty използва архитектура, управлявана от събития, което я прави подходяща за ефективна обработка на голям обем едновременни връзки. Неблокиращи I/O: Netty използва неблокиращи I/O, което му позволява да обработва много връзки с по-малко нишки. Мащабируемост: Проектирана за приложения с висока паралелност, ниска латентност и висока пропускателна способност.
Вътрешна архитектура
Event Loop: Основният компонент на Netty е event loop, който управлява I/O операциите асинхронно. Група от цикъл на събития съдържа един или повече цикъла на събития. Канал: Представлява връзка, като входяща HTTP заявка, и е свързан с цикъл на събития. Модел на нишки: Netty използва малък брой нишки, за да обработва голям брой връзки. Всеки цикъл на събитието работи в една нишка и обработва множество канали, което го прави изключително мащабируем.
Примерен сценарий: Обработка на паралелни заявки
Разгледайте сценарий, в който пет паралелни заявки пристигат на сървъра на Netty:
Модел, управляван от събития: Netty разпределя пет заявки в своя event loop. Неблокиращ I/O: Операцията не блокира нишката на event loop. Вместо това, операциите за въвеждане/изход се извършват асинхронно, което позволява на една и съща нишка ефективно да управлява множество връзки.
Мащабируемост: Поради своята неблокираща природа, Netty може да обработва голям брой връзки с относително малък брой нишки.
Заслуга:
Много ефективен за задачи, изискващи интензивни I/O. Превъзходна мащабируемост и производителност при висока паралелност. Идеален за реактивно програмиране и съвременни уеб приложения.
Недостатък:
По-сложно е да се разбере и конфигурира. В сравнение с традиционните приложения, базирани на сервлет, е необходим различен програмен модел (реактивен).
извод
Netty и Tomcat обслужват различни области в областта на сървърните рамки. Netty е изключително гъвкава основна рамка, предназначена за персонализирани мрежови протоколи и сценарии с висока производителност; Tomcat е доказан избор за Java уеб приложения, които отговарят на стандартите Java EE и Jakarta EE. Изборът между двете зависи от конкретните нужди на проекта – дали става дума за изграждане на уеб сървър с персонализирани протоколи или за традиционно уеб приложение.
Препратка:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Входът към хиперлинк е видим. |