предисловие
Nginx
Являетсябесплатно,открытый источник,высокая производительностьизHTTP
сервер иобратный прокси,а такжеIMAP
/ POP3
прокси-сервер.Nginx
Известен своей высокой производительностью, стабильностью, широкими возможностями, простой настройкой и низким потреблением ресурсов.Nginx
ЯвляетсяWeb
сервер, также может использоваться какобратный прокси,балансировщик нагрузкииHTTP
тайник.
Используется многими известными веб-сайтамиNginx
,как:Netflix
,GitHub
,SoundCloud
,MaxCDN
Ждать.
текст
1. Общая архитектура Nginx
1.1.Основной процесс
Nginx
При запуске два типапроцесс*,одиносновной процесс(master
),Один(windows
версия на данный момент только одна) илинесколько рабочих процессов(worker
).основной процессНе обрабатывает сетевые запросы, в основном отвечает заПланирование рабочих процессов, что показано на рисунке3
пункт:загрузить конфигурацию,запустить рабочий процессиНепрерывное обновление. так,Nginx
После запуска, глядя на список процессов операционной системы, мы можем увидетьпо меньшей мере, два Nginx
процесс.
1.2. Рабочий процесс
Фактический серверобрабатывать сетевые запросыиоткликдарабочий процесс(worker
), в классеunix
система,Nginx
можно настроитьнесколько worker
, и каждыйworker
процессможно обрабатывать одновременнотысячиизсетевой запрос.
1.3 Модульная конструкция
Nginx
изworker
процесс, в том числеосновнойифункциональный модуль,основной модульотвечает за поддержаниецикл выполнения(run-loop
), который выполняет обработку сетевых запросовдругой этапфункции модуля, такие как:сетевое чтение и запись,память чтение и запись,Передача контента,вне фильтра,а такжеОтправить запрос на вышестоящий серверЖдать. и его кодМодульная конструкция, что также позволяет намфункциональный модульвести себя надлежащим образомвыберитеиИсправлять, который компилируется, чтобы иметьконкретная функциясервер.
1.4 Модель, управляемая событиями
на основеАсинхронный и неблокирующийизмодель, управляемая событиями, можно так сказатьNginx
быть полученнымВысокий параллелизм,высокая производительностьключевой фактор, но и выиграл отLinux
,Solaris
и классBSD
и т.д. в ядре операционной системыуведомление о событиииI/O
Повышение производительностииспользовать, напримерkqueue
,epoll
иevent ports
.
1.5 Дизайн прокси
Агент дизайн, можно так сказатьNginx
Углубленный дизайн, будь то дляHTTP
или дляFastCGI
,Memcache
,Redis
и другие сетевые запросы или ответы, в основном с использованиемпрокси-механизм. так,Nginx
Рожденный для высокой производительностипрокси-сервер.
2. Модульная конструкция Nginx
Высокая модульностьДизайнNginx
архитектурный фундамент.Nginx
Сервер разбит нанесколько модулей, каждый модуль представляет собойфункциональный модуль, отвечает только за свои функции, и строго следует между модулями«Высокая сплоченность, низкая связанность»правила.
2.1. Основные модули
основной модульдаNginx
Сервер работает нормальносущественныймодуль, обеспечивающийрегистрация ошибок,Разбор файла конфигурации,механизм управления событиями,Управление процессоми другие основные функции.
2.2 стандартный модуль HTTP
стандартныйHTTP
модуль обеспечиваетHTTP
Функции, связанные с разбором протокола, такие как:конфигурация порта,Настройки кодирования веб-страницы,HTTP
Настройки заголовка ответаи Т. Д.
2.3. Дополнительный HTTP-модуль
по желаниюHTTP
Модуль в основном используется длярасширятьстандартныйHTTP
Особенности, которые делаютNginx
Может обрабатывать некоторые специальные услуги, такие как:Flash
мультимедийная передача, разборGeoIP
просить,сжатие сетевой передачи,Протокол безопасности SSL
поддержка и т. д.
2.4 Модуль почтовой службы
Модуль почтового сервисаВ первую очередь для поддержкиNginx
изпочтовая служба, в том числеPOP3
протокол,IMAP
соглашение иSMTP
Поддержка протокола.
2.5. Сторонние модули
сторонние модулизаключается в расширенииNginx
Серверное приложение, полные функции, определенные разработчиком, такие как:Json
служба поддержки,Lua
поддержка и т. д.
3. Обработка запросов Nginx
Nginx
Являетсявысокая производительностьизWeb
сервер, способный одновременно обрабатыватьмного одновременных запросов.它结合многопроцессный механизмиАсинхронный механизм, асинхронный механизм используетАсинхронный неблокирующий метод, а потом я познакомлю васNginx
измногопоточный механизмиАсинхронный неблокирующий механизм.
3.1. Многопроцессный механизм
Всякий раз, когда сервер получает клиента, оносновной процесс сервера(master process
) генерируетдочерний процесс(worker process
) out, чтобы установить соединение с клиентом для взаимодействия, пока соединение не будет отключено, дочерний процесс завершится.
использоватьпроцессВыгодаКаждый процесс независим друг от друга,Нет необходимости запирать, что снижает влияние использования блокировок на производительность, снижает сложность программирования и снижает затраты на разработку. Во-вторых, используя независимые процессы, можно сделатьпроцессы не влияют друг на друга, если процесс завершается аварийно, другие процессы работают нормально,master
процесс начинается зановоworker
процесс для обеспечения бесперебойного обслуживания, тем самым сводя к минимуму риск.
Недостатком является то, что операционная система генерируетдочерний процесснеобходимо провестикопия памятиждать операции, вресурсивремяБудут некоторые накладные расходы. когда естьмного запросов, приведет кПроизводительность системы падает.
3.2. Асинхронный механизм безблокирования
каждыйрабочий процессиспользоватьАсинхронный неблокирующий метод, может справитьсянесколько клиентских запросов.
когдарабочий процессПосле получения заявки клиента звонитеIO
сделать обработку, и если результат не доступен сразу, перейти кобрабатывать другие запросы(т.е.неблокирующий);иклиенттакже в этот периодНе нужно ждать ответа, может перейти к другим вещам (т.е.асинхронный).
когдаIO
При возврате об этом будет сообщенорабочий процесс; процесс временно уведомленвешатьтекущая транзакция вОтвечать на запросы клиентов.
4. Модель Nginx, управляемая событиями
существуетNginx
изАсинхронный неблокирующий механизмсередина,рабочий процессвызовIO
После переходим к обработке других запросов, когдаIO
После того, как вызов будет возвращен, он будетУведомлениеДолженрабочий процесс. Для таких системных вызовов в основном используютNginx
серверамодель, управляемая событиямиреализовать.
Как показано на фиг.Nginx
измодель, управляемая событиямиЗависит отсборщик событий,отправитель событияиобработчик событияОн состоит из трех основных блоков.
-
Сборщик событий: отвечает за сбор
worker
различные процессыIO
просить; -
Передатчик событий: Ответственный
IO
События отправляются наобработчик события; -
Обработчик событий: отвечает за различные событияОтзывчивая работа.
отправитель событияПоместите каждый запрос вСписок ожидаемых событий, используя неблокирующийI/O
способ позвонитьобработчик событиядля обработки запроса. Его обработка называется«Метод мультиплексирования ввода-вывода», общие включают следующие три:select
Модель,poll
Модель,epoll
Модель.
5. Модель обработки процессов Nginx
Nginx
использование сервераmaster/worker
Многопроцессный режим. Процесс многопоточного запуска и выполнения выглядит следующим образом:
-
основная программа
Master process
После запуска черезfor
цикл доперениматьиОбработка внешних сигналов; -
основной процесспройти через
fork()
генерация функцийworker
дочерний процесс, каждыйдочерний процессвыполнитьfor
ПетляNginx
серверприем событийииметь дело с.
Общая рекомендацияworker
количество процессовиCPU
количество ядерПоследовательный, такой, что нетмного дочерних процессовСоздавайте и управляйте задачами, избегайте межпроцессного взаимодействияконкурировать CPU
ресурсипереключатель процессас расходы. иNginx
для лучшего использованияМногоядерная функция,при условииCPU
родствопараметры привязки, мы можем установить определенныйПроцесс привязан к определенному ядру, так что это не будет, потому чтопереключение процессаприноситьCache
неудачи.
Для каждого запроса существует один и только одинрабочий процессиметь дело с этим. Во-первых, каждыйworker
процесс изmaster
процессfork
приходи. существуетmaster
В процессе сначала определите потребностиlisten
изsocket(listenfd)
После этого, то тогдаfork
многократныйworker
процесс.
всеworker
процессlistenfd
Будет вновое соединениестановится, когда он приходитудобочитаемый, чтобы гарантировать, что только один процесс обрабатывает соединение, всеworker
процесс регистрируетсяlistenfd
прочитать событиевпередвоспользоваться accept_mutex
, схватитьМьютексЭтот процессрегистр listenfd
прочитать событие,существуетпрочитать событиевызыватьaccept
Примите подключение.
когдаworker
процесс вaccept
После этого соединения запуститезапрос на чтение,Разобрать запрос,обработать запросПосле создания данных, а затемвернуться к клиенту, и наконецОтключить, такой полный запрос такой. Мы видим, что запрос полностьюworker
процесс и только в одномworker
Обрабатывается в процессе.
существуетNginx
Во время работы сервера,основной процессирабочий процессНеобходимо взаимодействие процессов. взаимодействие зависит отSocket
осуществленныйтрубопроводреализовать.
5.1 Основной процесс взаимодействует с рабочими процессами
Этот трубопровод отличается от обычного трубопровода тем, чтоосновной процесснаправлениерабочий процессизОдносторонний трубопровод, содержащий сообщения, выдаваемые главным процессом рабочим процессам.инструкция,рабочий процесс ID
ждать; в то же времяосновной процессчерез внешний мирСигнальная связь; каждыйдочерний процессимеютполучить сигнали возможность обработки соответствующих событий.
5.2 Взаимодействие рабочих процессов с рабочими процессами
Это взаимодействие сосновной процесс - рабочий процессВзаимодействие в основном такое же, но пройдетосновной процесссделано косвенно.рабочий процессмеждуИзолированный, поэтому, когда рабочий процессW1
Рабочий процессW2
При подаче команды сначала найдитеW2
изпроцесс ID
, затем напишите правильную инструкцию, чтобы указать наW2
изряд.W2
Примите соответствующие меры при получении сигнала.
резюме
Благодаря этой статье мыNginx
сервераОбщая структураиметь общее понимание. включая егоМодульная конструкция,мультипрогрессиАсинхронный неблокирующийметод обработки запроса,модель, управляемая событиямиЖдать.通过这些理论知识,才能更好地领悟Nginx
дизайнерское мышление. для нас, чтобы учитьсяNginx
Это очень помогает.
Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack
Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.