Maison  >  Article  >  cadre php  >  Utiliser Swoole pour améliorer les performances de Laravel (Shadowfax)

Utiliser Swoole pour améliorer les performances de Laravel (Shadowfax)

藏色散人
藏色散人avant
2021-05-25 14:45:442798parcourir

Ce qui suit est une introduction à Shadowfax tirée de la colonne du didacticiel laravel : Laissez Laravel porter l'épée de Swoole, j'espère que cela sera utile aux amis dans le besoin !

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.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer