Говоря о дизайне внутренней базовой архитектуры сервера Nginx

задняя часть Архитектура сервер Nginx

предисловие

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 Многопроцессный режим. Процесс многопоточного запуска и выполнения выглядит следующим образом:

  1. основная программа Master processПосле запуска черезforцикл доперениматьиОбработка внешних сигналов;

  2. основной процесспройти через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

零壹技术栈

Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.