предисловие
Если мы работаем по архитектуре 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:
- Главный процесс не отвечает за прослушивание портов.
- Сам рабочий процесс прослушивает порт (несколько процессов будут иметь шокирующий групповой эффект, 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 |