Рубрики
Uncategorized

Разберитесь в режиме работы swool и ускорьте применение laravel

Автор оригинала: David Wong.

Во-первых, Swoole Swoole переопределяет PHP как расширение PHP, которое позволяет PHP выполнять асинхронно, как и node, и использовать сокет, предоставляя ряд асинхронных функций ввода-вывода, управляемых событиями и параллельных структур данных для PHP. Swoole4 поддерживает полный режим совместного программирования, который позволяет реализовывать асинхронные программы с полностью синхронизированным кодом. PHP-коду не нужно добавлять никаких дополнительных ключевых слов, и нижний уровень автоматически планирует процесс для достижения асинхронного ввода-вывода. Почти все школы , которые могут реализовать nodejs, могут быть реализованы, и производительность выше, чем у nodejs. В конце концов, узел js-это один поток, который не может в полной мере повысить производительность процессора, а Вулф-многопоточный, который может в полной мере повысить производительность процессора. В чем разница между эффективной разработкой swool и традиционной веб-разработкой? В дополнение к традиционному режиму синхронной разработки lamp/LNMP, что такое

Два. Традиционный режим веб-разработки Способ веб-разработки PHP-это архитектура lamp/LNMP, а именно Linux, nginx, MySQL и PHP. Здесь, например, nginx примерно структурирован следующим образом:

Когда запрос поступает, веб-сервер передает запрос в php-fpm, который представляет собой службу fastcgi с архитектурой пула процессов и встроенным интерпретатором PHP. FPM отвечает за интерпретацию и выполнение PHP-файлов для генерации ответов и, наконец, за их возврат на веб-сервер для представления интерфейсу. Многие бизнес-логики реализованы в файлах PHP, включая доступ к MySQL и NoSQL, вызов сторонних приложений и т.д. Сотрудничество между PHP FPM и nginx прошло достаточно хорошо. Однако, поскольку PHP FPM сам по себе является моделью процесса синхронной блокировки, все ресурсы (включая ряд объектов, созданных в результате инициализации фреймворка) освобождаются после завершения запроса, что приводит к большому количеству ресурсов процессора, потребляемых процессом PHP “на холостом ходу” (создание < — > уничтожение < — > Создание), что приводит к ограниченной пропускной способности одной машины.

Каждый процесс обработки запроса означает, что синтаксический анализ файлов PHP, настройка среды и другие ненужные операции, отнимающие много времени, обработка процесса PHP уничтожается, что не позволяет использовать пул соединений и другие технологии в программах PHP для достижения оптимизации производительности.

Три. Режим работы Swool Для решения проблемы традиционной архитектуры swool решает вышеуказанную проблему с помощью расширения PHP. Мы узнали о модели процесса свула.

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

Кроме того, к преимуществам относятся:

Полная асинхронность без блокировки, низкое потребление ресурсов и высокая эффективность выполнения программ

Программа анализирует и загружает PHP-файлы только один раз, чтобы избежать повторной загрузки каждого запроса

Резидент процесса делает возможной передачу информации между пулом соединений и запросом

Четыре. Почему вы хотите запустить laravel на swool? Когда запускается фреймворк laravel, ему необходимо загрузить много файлов. Кроме того, хорошо известная экологическая среда хороша, поэтому в процессе разработки мы обнаружим, что было построено много колес, что делает дисковый ввод-вывод при одноразовом запуске laravel чрезвычайно высоким (то есть ему требуется загрузить много файлов) Жизненный цикл laravel должен выполняться каждый раз, когда делается запрос. Потому что среда, созданная одним запросом, уничтожается сразу после выполнения запроса. Другими словами, в традиционном жизненном цикле PHP тратится много времени на создание и уничтожение ресурсов для выполнения скрипта. Представьте, сколько файлов нужно загружать в каждый запрос в такой среде, как laravel, которая также тратит много операций ввода-вывода.

Итак, что, если мы используем swool для сборки сервера уровня приложений, и все файлы сценариев могут быть сохранены в памяти после однократной загрузки? Вот почему нам нужно попытаться запустить laravel на swool. Swool может обеспечить высокую производительность, в то время как laravel может обеспечить элегантную структуру кода. Какое идеальное сочетание этих двух!

Пять. Используйте swool для повышения производительности laravel В существующих колесах я чувствую, что следующие два очень хороши, и я могу выбрать сам

  • swooletw/ларавель-свул
  • гарвин/ларавул

Я выбрал первый вариант для тестирования, чтобы использовать composer для установки:

composer require swooletw/laravel-swoole

Если вы используете laravel, добавьте

SwooleTW\Http\LaravelServiceProvider::class,

Если вы используете lumen, добавьте следующий код для начальной загрузки/app.php

$app->register(SwooleTW\Http\LumenServiceProvider::class);


Экспортируйте файл конфигурации в каталог конфигурации

php artisan vendor:publish --provider="SwooleTW\Http\HttpServiceProvider"

Тогда вы можете перейти в config/swool? Http.php для настройки информации

'server' => [
        'host' = > env ('swoole_http_host ','0.0.0.0'), // listen to any IP
        'port' => env('SWOOLE_HTTP_PORT', '1215'),
        'options' => [
            'pid_file' => env('SWOOLE_HTTP_PID_FILE', base_path('storage/logs/swoole_http.pid')),
            'log_file' => env('SWOOLE_HTTP_LOG_FILE', base_path('storage/logs/swoole_http.log')),
            'daemonize' = > env ('swoole ﹣ http ﹣ daemonize ', 1), // 1 - the program will run as a daemons in the background
        ],
],

Свул? Http.php также предоставляет множество поставщиков конфигурации,

'providers' => [
    // App\Providers\AuthServiceProvider::class,
]

Поскольку эти поставщики будут сохранены в памяти после использования swool в качестве HTTP, поставщики, которых вы хотите повторно зарегистрировать и перезапустить, настроены здесь. Теперь вы можете запустить HTTP-службу swool, выполнив следующую команду.

$ php artisan swoole:http start

Затем вы можете увидеть следующую информацию:

Starting swoole http server...
Swoole http server started: 

Теперь вы можете получить доступ к приложению laravel, посетив http://127.0.0.1:1215. Будьте осторожны : это расширение не поддерживает горячий запуск, поэтому каждый раз, когда происходит обновление кода, вам необходимо перезапускать службу PHP artican swoole: http restart

6. Проверка производительности с использованием инструмента Apache AB test

ab -n 1000 -c 10 http://127.0.0.1:1215/

Описание параметра: – N 1000 запросов – C 10 одновременных

Рисунок 1: использование swool в качестве сервера приложений и Рисунок 2: Сервер Apache На виртуальной машине, конфигурация компьютера также плохая, а производительность не полностью развита. Вы можете видеть, что Apache не выдерживает давления, когда он выполняет только 197 запросов. Служба HTTP swool завершает проверку давления, и производительность полностью переходит на сервер Apache.

Семь. Использование агента nginx

Swool также упомянул на официальном сайте, что поддержка swool ﹣ http ﹣ сервера для протокола HTTP не завершена, и рекомендуется использовать его только в качестве сервера приложений. И добавьте nginx в качестве агента в интерфейсе. Затем нам нужно настроить сервер в nginx.conf:

server {
    listen 80;
    server_name your.domain.com;
    root /path/to/laravel/public;
    index index.php;

    location = /index.php {
        # Ensure that there is no such file named "not_exists"
        # in your "public" directory.
        try_files /not_exists @swoole;
    }

    location / {
        try_files $uri $uri/ @swoole;
    }

    location @swoole {
        set $suffix "";

        if ($uri = /index.php) {
            set $suffix "/";
        }

        proxy_set_header Host $host;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # IF https
        # proxy_set_header HTTPS "on";

        proxy_pass http://127.0.0.1:1215$suffix;
    }
}

Для настройки, пожалуйста, обратитесь к конфигурации nginx/Apache в офисе документации swool. Пока все готово. Вы можете посетить свой веб-сайт, как обычно.

Восемь. Недостатки использования swool и традиционной разработки PHP В этой статье в основном рассматривается использование swool в качестве сервера ответов laravel. Наконец, обсуждаются недостатки использования swool и традиционной разработки PHP. 1. Это сложнее. Это требует от разработчиков более четкого понимания режима работы с несколькими процессами 2. Более подвержен утечкам памяти. При работе с глобальными переменными и статическими переменными вы должны быть осторожны. Переменные, которые не будут очищены GC, будут существовать на протяжении всего жизненного цикла. Если они не обрабатываются правильно, легко использовать всю память. В PHP FPM память будет полностью освобождена после выполнения PHP-кода.

Ссылка на ссылку: используйте swool для замены nginx в качестве HTTP-сервера в laravel и используйте swool для ускорения вашего приложения laravel