Swoole peut être considéré comme une épée tranchante pour PHP. Il repousse les limites de PHP et permet. de nombreux PHPers ont vu l’aube de la haute concurrence. Utiliser Swoole pour améliorer les performances de Laravel est un investissement très rentable. De cette façon, vous pouvez non seulement obtenir les hautes performances de Swoole, mais également prendre en compte la haute efficacité de Laravel, en tirant le meilleur parti des deux mondes. Shadowfax est un tel package d'extension. Il est simple et facile à utiliser et peut aider les développeurs à migrer rapidement les applications Laravel pour les exécuter sur Swoole.
Tout d'abord, jetons un coup d'œil aux performances de l'application Laravel exécutée avec Shadowfax :
J'ai utilisé wrk
comme outil de référence cette fois, basé sur la dernière version de Laravel 7, mais je l'ai supprimé du middleware lié à la session. Étant donné que Laravel active les sessions par défaut et que le pilote de session est un fichier, si vous exécutez un test dans ce cas, un fichier de session sera créé pour chaque requête, les résultats n'auront donc aucun sens. (Les applications qui recherchent des performances ne doivent pas utiliser de fichier comme pilote de session)
Environnement 1 :
- Matériel : 1 processeur, 4 cœurs, 16 Go de mémoire
- MacOS 10.15.3
- PHP 7.3.12 (opcache activé)
- Swoole 4.4.13
- Shadowfax 2 (20 processus de travail)
Cet environnement est mon Macbook Pro personnel, qui offre de meilleures performances. J'ai utilisé wrk pour démarrer 4 threads et effectué un test de stress avec une simultanéité de 200 :
wrk -t4 -c200 http://127.0.0.1:1215/
Le résultat était 12430 rps :
Running 10s test @ http://127.0.0.1:1215/ 4 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 26.44ms 31.44ms 212.73ms 84.28% Req/Sec 3.13k 839.99 6.07k 65.75% 124418 requests in 10.01s, 312.06MB read Socket errors: connect 0, read 54, write 0, timeout 0 Requests/sec: 12430.20 Transfer/sec: 31.18MB
Environnement 2 :
- Matériel : 2 processeurs, 2 cœurs, 4 Go de mémoire
- CentOS 7.5.1804
- PHP 7.3.16 (opcache activé)
- Swoole 4.4.17
- Shadowfax 2 (10 processus de travail)
Cet environnement est une instance de serveur cloud virtuel d'un certain cloud, avec une configuration générale. J'ai utilisé wrk pour démarrer 2 threads et effectué un test de stress avec une simultanéité de 100 :
wrk -c100 http://127.0.0.1:1215/
Le résultat était 4001 rps :
Running 10s test @ http://127.0.0.1:1215/ 2 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 25.06ms 12.11ms 85.92ms 60.94% Req/Sec 4.02k 41.46 4.08k 79.79% 40321 requests in 10.08s, 101.13MB read Requests/sec: 4001.76 Transfer/sec: 10.04MB
Les performances sont-elles plutôt bonnes ? Par rapport au PHP-FPM traditionnel, il a été grandement amélioré.
Installation et utilisation
L'installation de Shadowfax est très simple et ne nécessite que deux étapes :
La première étape consiste à utiliser Composer pour installer Shadowfax dans votre projet Laravel. Allez sur :
composer require huang-yi/shadowfax
Dans la deuxième étape, utilisez la commande Artisan de Laravel shadowfax:publish
pour publier le fichier de configuration :
php artisan shadowfax:publish
Après exécution, un fichier nommé shadowfax.yml
fichier de configuration, vous devez l'ajuster selon l'environnement. Bien entendu, ce fichier sera automatiquement ajouté à .gitignore
, tout comme le fichier .env
, la configuration peut être différente selon les environnements.
Vous pouvez maintenant démarrer votre service via la commande Shadowfax :
php shadowfax start
Si c'est la configuration par défaut, vous pouvez accéder à votre application via http://127.0.0.1:1215
. Bien sûr, c'est juste pour une utilisation simple. Plus d'informations peuvent être trouvées sur la page d'accueil du projet Shadowfax.
Pourquoi choisir Shadowfax
Bien sûr, certains amis se demanderont, il existe déjà des projets open source similaires sur Github, pourquoi devons-nous réinventer la roue. En fait, ce n'est pas le cas. Dès 2016, j'ai commencé à essayer d'intégrer Swoole et Laravel, et j'ai également open source deux projets liés. Actuellement, swooletw/laravel-swoole avec le plus grand nombre d'étoiles à cet égard est un. fork de huang-yi/ que j'ai publié plus tôt. Mais je n’ai pas fait la promotion de mon projet car je savais très bien que les projets précédents avaient plus ou moins de problèmes et ne pouvaient pas bien supporter les coroutines, et les coroutines se trouvent être l’arme la plus puissante de Swoole, alors All a abandonné.
Maintenant, Shadowfax peut bien prendre en charge les coroutines, et vous pouvez activer en toute sécurité la fonctionnalité de coroutine de Swoole. De plus, Shadowfax résout également le problème de connexion à la base de données dans l'environnement coroutine. Lorsque vous activez la coroutine en un clic de Swoole, Shadowfax créera automatiquement un pool de connexion pour votre connexion à la base de données. Le plus important est que tout cela est insensible au niveau du code de votre application. Vous pouvez toujours écrire du code métier comme d'habitude sans aucune charge mentale, car Shadowfax ne vous oblige pas à apporter de modifications à la façon dont vous écrivez du code.
La dernière chose que je veux expliquer est que Shadowfax ne donne pas délibérément à Laravel la possibilité d'utiliser Swoole. Son objectif principal est : Améliorer Laravel au minimum sans détruire l'expérience de développement de Laravel. performances . Je ne recommande pas non plus aux développeurs d'utiliser une interface de Swoole dans Laravel, car Laravel lui-même est un framework qui s'exécute en mode PHP traditionnel et n'est pas convivial pour Swoole. Si vous n'êtes pas un développeur Swoole expérimenté, il est facile de l'utiliser. pendant le processus d'utilisation. Quelque chose s'est mal passé. Si votre application Laravel n'utilise aucune interface Swoole, cela signifie que votre programme peut également s'exécuter en mode PHP-FPM. Une fois qu'il y a un problème avec le programme exécuté sur Swoole, nous pouvons immédiatement revenir en mode PHP-FPM. peut assurer la disponibilité du programme.