Анализ модели процесса в архитектуре LNMP

Redis Архитектура MySQL PHP

предисловие

Если мы работаем по архитектуре LNMP уже 2-3 года, то на этом этапе у нас должно быть базовое понимание принципов работы наших часто используемых технологических стеков. С одной стороны, вы можете изучить идеи дизайна этих превосходных программ, с другой стороны, вы можете заложить прочную основу для анализа узких мест системы и ее оптимизации. Сегодня мы рассмотрим модель процесса php-fpm/nginx/redis/mysql.

Модель процесса php-fpm

php-fpm использует многопроцессорную модель master-worker, а во-вторых, он обеспечивает лучший метод управления процессами, чем php-cgi. Примерная схема модели процесса php-fpm выглядит следующим образом:

Основные задачи мастера основного процесса:

  • Сокет прослушивания (TCP/IP или доменный сокет Unix)
  • Управление дочерними процессами

Мастер управляет процессом с помощью следующих сигналов:

SIGINT/SIGTERM 退出信号

SIGQUIT 优雅退出信号

SIGUSR1 重新加载日志文件信号

SIGUSR2 平滑重启信号

SIGCHLD 回收子进程资源信号(wait/waitpid防止异常退出的子进程变成僵尸进程,僵尸进程会占用pid等内核资源)

Основные задачи рабочего рабочего процесса:

  • принять запрос
  • Выполнить определенный php-скрипт

Многопроцессная (однопоточная) модель параллелизма

Процессная модель nginx

Точно так же nginx также принимает многопроцессную модель master-worker.Диаграмма модели процесса выглядит следующим образом:

Но главное отличие от php-fpm:

  1. Главный процесс не отвечает за прослушивание портов.
  2. Сам рабочий процесс прослушивает порт (несколько процессов будут иметь шокирующий групповой эффект, nginx использует блокировки взаимного исключения, чтобы только один процесс одновременно ходил на порт прослушивания)

Мастер управляет процессом с помощью следующих сигналов:

SIGINT/SIGTERM 退出信号

SIGQUIT 优雅退出信号

SIGHUP 平滑重启信号

SIGUSR1 重新加载日志文件信号

SIGUSR2 平滑升级信号

SIGWINCH 优雅退出某个worker进程信号

Многопроцессорная (один поток) и многоканальная модель мультиплексирования ввода-вывода

Модель процесса Redis

Redis использует модель с одним процессом, как показано на следующем рисунке:

Однако Redis необходимо обеспечить постоянство. Обычно существует два способа сохранения: RDB (запись моментального снимка)/AOF (команда записи).Процесс сохранения redis разветвит дочерний процесс для завершения, цель состоит в том, чтобы не блокировать основной рабочий процесс. . Как показано ниже:

Модель параллелизма с одним процессом (один поток) и множественным мультиплексированием ввода-вывода

Модель процесса MySQL

На самом деле, для mysql по-прежнему неуместно говорить о модели процессов, MySQL в основном использует многопоточную архитектуру.

Многопоточная модель параллелизма

Суммировать

Многопроцессорность php-fpm, в соответствии с идеей дизайна языка php"Простой". Изоляция ресурсов между процессами простая и несложная, наоборот, при большом трафике производительность будет не очень хорошей.

Nginx имеет несколько процессов, воркер слушает порт, с одной стороны, мастер может сосредоточиться на управлении процессами, с другой — повышает производительность сервиса.прочность, если работник кладет трубку, другие работники могут продолжать обрабатывать запросы, во-вторых, использовать компьютермногоядерныйПреимущества.

Одиночный процесс Redis, использующий мультиплексирование ввода-вывода, достаточно хорош, Redis в основном является операцией с памятью, не использует многопоточность, избегает многихконкурировать, что упрощает сложность системы. Во-вторых, Redis не требует сложных вычислительных сценариев, и достаточно одного ядра.

Многопоточность MySQL, согласно моему нынешнему пониманию, узкое место производительности наиболее часто используемых движков MySQL заключается вДисковый ввод-вывод, технологии многопоточности достаточно для удовлетворения требований параллелизма.

думать

Исходя из вышеизложенного, в различных конструкциях систем используются конструкции, отвечающие их собственным потребностям в соответствии со сценариями их применения. Например, простота php, высокая доступность и производительность веб-сервера nginx, высокопроизводительный nosql у redis, большое количество дисковых операций у mysql.

Многопроцессорность, многопоточность, сопрограммы, мультиплексирование ввода/вывода (выбор/опрос/опрос) и другие технические средства, используемые этими системами, помогают нам оптимизировать направление нашей системы.Эти превосходные системы являются нашими дизайнерскими идеями. предоставляет хороший пример для улучшения параллелизма и решения проблем с сетевым вводом-выводом и дисковым вводом-выводом. Это то, что нам нужно понять и переварить сейчас и в будущем.

Наконец, если с приведенным выше содержанием что-то не так, вы можете исправить это вовремя, большое спасибо~

приложение

Общий сигнал linux и таблица цифрового отображения:

Сигнал Цифровой (ЛИНУКС) имея в виду
SIGKILL 9 force kill
SIGINT 2 interrupt
SIGQUIT 3 quit graceful
SIGTERM 15 terminate
SIGHUP 1 hang up
SIGUSR1 10 user defined
SIGUSR2 12 user defined