Дизайн веб -контейнера
Разработка веб -контейнера включает в себя множество технологий на разных уровнях, таких как знание уровня связи, знание уровня языка программы и т. Д., А доступный веб -контейнер является относительно большой системой, и для четкого объяснения этого требуется много времени. Эта статья направлена на то, чтобы представить, как разработать веб -контейнер, обсудить только идеи реализации и не включает в себя слишком много конкретных реализаций. Разбейте его на несколько модулей и компонентов. Каждый компонентный модуль отвечает за различные функции. На следующем рисунке перечислены некоторые основные компоненты и вводят каждый компонент.
Подключиться к приемнику
Основная ответственность состоит в том, чтобы прослушать, есть ли клиентское соединение сокета и получить розетку, а затем передать розетку исполнителю задачи (пул потоков) для выполнения. Непрерывно читайте гнезда с нижней части системы, сделайте как можно меньше обработки, а затем бросайте их в пул резьбы. Зачем подчеркивать необходимость иметь дело как можно меньше? Это связано с проблемами производительности системы, и чрезмерная обработка будет серьезно повлиять на пропускную способность. Поскольку обычно есть только один приемник (один поток отвечает за прием сокетов), он, вероятно, окажет влияние на длину каждого процесса приема. Следовательно, приемник выполняет очень мало и простую работу, поддерживая лишь несколько переменных состояния, операция накопления затвора управления потоком, операция приема Serversocket, устанавливая некоторые свойства полученного гнезда, помещая полученное гнездо в пул резьбов и некоторую обработку исключений. Другая логика, которая занимает много времени для обработки, передается в пул потоков, например, чтение основных данных сокета, анализ пакетов протокола HTTP и реагирование на некоторые операции клиента и т. Д.
Контроллер номера соединения
Для машины общий трафик запросов доступа имеет пиковый период, а сервер имеет физический предел. Чтобы гарантировать, что веб -сервер не вымыт, нам нужно принять некоторые меры для защиты и предотвращения его. Трафик здесь необходимо объяснить немного больше о количестве подключений к сокетам, которое управляет трафиком, управляя количеством подключений сокетов. Одним из эффективных методов является принятие управления потоком, которое похоже на добавление затвора к входу потока. Размер затвора определяет размер потока. Как только максимальный поток достигнут, ворота будут закрыты и останавливаются до получения простального канала. Счетчики могут быть реализованы с использованием Framework JDK AQS.
Фабрика сокета
Различные случаи использования могут потребовать разных уровней безопасности. Например, при транзакциях, связанных с оплатой, информация должна быть зашифрована перед отправкой, что также включает в себя процесс ключевых переговоров, в то время как в других обычных случаях нет необходимости шифровать пакет. Отражение при приложении является проблемой использования HTTP и HTTPS.
Проще говоря, протокол TLS/SSL предоставляет услуги аутентификации для каждого сообщения ① для аутентификации законности идентичности сущности этого сеанса. ② Обеспечение услуг шифрования, и механизм сильного шифрования может гарантировать, что сообщения во время связи не будут расшифрованы. ③ Предоставьте услуги, защищенные от несущих, используйте алгоритм хэша для подписи сообщений и убедитесь, что контент не подделает путем проверки подписей.
Протокол HTTP соответствует розетку, в то время как HTTPS соответствует SSLSocket. Как генерировать гнезда и Sslsockets передается на фабрику сокета.
Определение задачи - задача
Определите задачи, которые должны быть выполнены, и сообщите пулу потоков, какие задачи выполнять. Задача в основном делится на три точки: обработку розетков и реагирование на клиентов, уменьшение счетчика подключения и закрытие розетки. Среди них обработка сокета является наиболее важной и сложной. Он включает в себя чтение базового байтового потока сокета, анализ сообщения запроса протокола HTTP (анализ строки запроса, заголовок запроса, корпуса запроса и другой информации), получение пути на основе анализа линии запроса, чтобы найти ресурсы веб -проекта на соответствующем хосте и сборка ответного сообщения о протоколе HTTP в соответствии с результатами обработки и вывода его клиенту.
Исполнитель задачи
Пул потоков с максимальным и минимальным количеством потоков называется «исполнителем задач», потому что пул потоков можно рассматривать как запуск нескольких потоков для непрерывного обнаружения очереди задач, и после того, как необходимо выполнить задачу, будет выполнено, оно будет выполнено. Максимальное и минимальное количество ограничения потоков, ограничение по времени восстановления резьбы, действие отклонения, выполненное пулом потоков, когда максимальное количество потоков превышает и т. Д.
Чтение сообщения
Используется для чтения пакетов от клиента в базовую операционную систему и обеспечить буферный механизм. Скопируйте сообщение Desbuf.
Вывод сообщения
Используется для написания пакетов, обработанных веб -контейнерами в операционную систему, и обеспечить буферный механизм. Напишите сообщение OutputBuf в операционную систему через буфер.
Входной фильтр
В этом процессе чтения требуется некоторая дополнительная обработка, и эта дополнительная обработка может быть выполнена по -разному в соответствии с различными условиями. Учитывая разъединение и расширение программы, вводятся фильтры. Только после операций фильтрации мы можем достичь DESBUF через слои фильтров. Этот процесс похож на добавление уровней обработки. Соответствующие операции будут выполняться после прохождения через уровни, и, наконец, исходные данные для данных назначения будут завершены.
Выходной фильтр
Он похож на функцию входного фильтра и используется при выходе сообщения.
Постановление сообщения
Обеспечивает возможность проанализировать различные части протокола HTTP.
Запросить генератор
Согласно объектно-ориентированной идее, атрибуты и поля протокола, связанные с запросом в каждом процессе запроса, абстрагируются в объект запроса. Он включает в себя три части: линия запроса, заголовок запроса и тело запроса. Какие значения необходимы во время обработки, можно напрямую получено из объекта запроса. Обеспечивает удобство для внедрения стандартов сервлета.
Генератор ответов
В соответствии с запросом требуется генератор объектов ответа. Он включает в себя три части: ряд ответов, заголовок ответа и тело ответа. Соответствующие значения в результате обработки могут быть напрямую установлены на объект ответа. Обеспечивает удобство для внедрения стандартов сервлета.
Адрес Mapper
Адрес Mapper - это маршрутизатор, который запрашивает и ресурсы. Запрашиваемый доступ намечен в соответствии с пути, чтобы найти ресурс ответа на запросащий клиент.
жизненный цикл
Для дальнейшей модуляции весь контейнер имеет много компонентов, которые могут потребовать разных событий в разные моменты и требовать жизненного цикла для управления всеми компонентами единым образом. Например, стартап, остановка и остановка всех компонентов отделены от единого управления жизненными циклами, что может облегчить управление жизненным циклом этих компонентов. Я надеюсь что -то сделать до и после того, как что -то случится в определенном состоянии? Добавьте слушателя жизненного цикла, чтобы добиться изящно.
JMX Manager
Мониторинг и управление статусом работы системы, производительность сервера, сбор параметров, связанных с сервером, загрузка JVM, номер веб-подключения, пул потоков, пул подключения базы данных, управление кэшем, перезагрузка файлов конфигурации и т. Д. Он также предоставляет решение для управления распределенными системами.
Веб -погрузчик
Webloader используется для загрузки проектов веб -приложений. Веб -контейнер может содержать несколько веб -приложений. Для достижения изоляции между LIB и Сервлетом, для каждого веб-приложения должен использоваться другой загрузчик класса, и эти загрузки класса не являются отношениями с родителями и детьми, чтобы достичь эффекта изоляции класса, то есть LIB веб-приложения не будет использоваться другими веб-приложениями.
Менеджер сессии
Менеджер сессий в основном управляет сессиями, включая: ① Сгенерировать SessionIds. Как правило, файлы cookie или URL не имеют значений JSessionID, и сеанс должен быть восстановлен как SessionID. ② Многие сессии клиента сохраняются на сервере. Для сеансов тайм -аута вы должны регулярно убирать, чтобы убедиться, что память сервера не потрачена впустую. ③ Для некоторых важных сессий их можно сохранить на диск и может быть перезагружена в память для использования при необходимости.
Запустить журнал
Запишите некоторые предупреждения, исключения и ошибки во время выполнения.
Журнал доступа
Журнал доступа, как правило, записывает информацию, связанную с клиентом, включая IP -адрес клиента, время запроса, протокол запроса, метод запроса, номер байта запроса, код ответа, идентификатор сеанса, время обработки и т. Д.
Менеджер безопасности
Веб -проект работает на платформе веб -контейнеров, которая похожа на запуск приложения на платформу. Чтобы встроенная программа работала нормально, платформа должна быть в состоянии работать безопасно и нормально. И чтобы гарантировать, что на платформу не влияют встроенные приложения в наибольшей степени, они в определенной степени достигают влияния изоляции. При запуске файл политики указан -djava.security.manager -djava.security.policy == web.policy, который определяет различные разрешения.
Операция мониторинг и удаленное управление
Предоставляет платформу, которая может отслеживать статус работы веб -контейнеров в режиме реального времени и может управляться удаленно.
Кластер
Обычно существует два типа кластеров: ① кластеры балансировки нагрузки, которые обычно используют определенный алгоритм распределения для равномерного распределения доступа к каждой машине в кластере для обработки. ② Кластеры с высокой доступностью, коммуникация кластера соединяет несколько машин. Этот вид кластера больше фокусируется на обеспечении внешней доступности всего кластера посредством автоматического переключения или передачи трафика после сбоя машины в кластере.
Как правило, веб -запросы являются без сохранения состояния и могут быть напрямую сгруппированы, но сеанс включает в себя государственность и требует использования кластерных коммуникационных технологий для копирования сеансов. Связанные технологии включают многоадресную и одноадресную.
Сервлет двигатель
Двигатель сервлета использует отражение для генерации объектов в сервлете и JSP в веб -приложении и помещает их в пул объектов сервлета, и вызывает соответствующие методы в соответствии с фактической ситуацией. Веб -приложение помещает обработку бизнес -логики в метод Dopost или Dog. Когда веб -контейнер обрабатывает запрос, он будет обрабатывать его в соответствии с логикой обработки, определенной здесь, и клиент ответа будет отвечать.
JSP Компилятор
Согласно спецификации, JSP в конечном итоге составлена в выполнение сервлета, поэтому файл JSP должен быть составлен в соответствии со спецификацией. Компилятор JSP фактически переводит синтаксис JSP и обрабатывает его в соответствии с синтаксисом JSP.
Веб -контейнер в основном содержит функции компонентов, представленных выше. Вы можете создать веб -контейнер, который позволяет вашей Интернете работать через него в соответствии с реализацией каждого компонентного модуля.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!