Nous courons une application basée sur le Web MySQL/PHP codé en Laravel. Fondamentalement, nous l'utilisons pour gérer les travaux de service/les ordres de travail dans un atelier de réparation d'ordinateurs. Nous avons près de 2 500 ordres de travail et il est parfois un peu lent, surtout lorsque plusieurs techniciens entrent ou mettent à jour des ordres de travail. Quelles sont les meilleures façons de le rendre plus rapide et de travailler plus efficacement, surtout que nous continuons à ajouter des clients et des ordres de travail. Le serveur fonctionne avec CentOS 6 x64, cPanel, Intel Xeon E3 et 2x Enterprise SATA dans Linux Software RAID1. Merci!Évolutivité de Laravel Web App
Répondre
Je ne sais pas à quelle profondeur une réponse peut aller en spécifiant une solution, mais il beaucoup de meilleures pratiques à suivre. Je suppose que c'est ce que vous recherchez, car vous n'avez pas précisé de goulots d'étranglement particuliers.
Quelques conseils rapides seraient à
- Cache vos requêtes:
Donc, s'il y a une course de requête sur votre application, pour laquelle les données ne sont mis à jour tous les x jours, pourquoi ne pas mettre en cache les pour x jours afin que votre db enregistre d'être frappé inutilement entre les deux? Exemple du docs:
$value = Cache::remember('users', $minutes, function()
{
return DB::table('users')->get();
});
- Faire usage de files d'attente:
Il peut être le cas que les tâches de fond sont en cours d'exécution lorsqu'un utilisateur, par exemple, de l'ordre de travail mis à jour (courriels, appelant autre logique) qui peut prendre un certain temps et oblige cet utilisateur à attendre. Au lieu d'exécuter ces tâches à ce moment-là et de ralentir les choses pour l'utilisateur, vous pouvez les mettre en file d'attente pour les exécuter ultérieurement. Laravel supports de nombreux pilotes de file d'attente différents à cette fin. J'ai personnellement utilisé Beanstalk mais vous pouvez aussi essayer quelque chose comme IronMQ.
Utilisation de base avec Beanstalk: changer /app/config/queue.php pour spécifier votre pilote de file d'attente par défaut et toute configuration, y compris le nom d'une file d'attente:
'default' => 'beanstalkd',
'beanstalkd' => array(
'driver' => 'beanstalkd',
'host' => 'localhost',
'queue' => array('default','SendEmail'),
),
Ensuite, dans votre contrôleur, vous pourriez procédez comme suit pour pousser à cette file d'attente:
Queue::push('SendEmail', array('message' => 'Something...'));
pour votre information, Fideloper a une excellente tutorial à ce sujet.
- Méfiez-vous des n + 1 problème et utiliser le chargement impatient:
Le docs expliquent cette question.
- Envisager de passer à une base de données NoSQL comme MongoDB (dépend entièrement des exigences):
Comme je l'ai mentionné, cela dépend entièrement de votre application et ce que vous faites, mais en utilisant une base de données NoSQL sur MySQL a ses mérites dans certains cas. Vous pouvez utiliser sharding et la réplication pour aider à la mise à l'échelle de votre application avec MongoDB mais bien sûr ne sont pas limités à mongo seul.
Il y a beaucoup d'autres choses que vous pouvez faire, mais avec les conseils ci-dessus, je pense que vous pourriez rendre votre application beaucoup plus rapide et efficace.
Ceci est une excellente réponse. Je vais transmettre cela au développeur. Merci beaucoup! –
Assurez-vous également que vos tables les plus utilisées sont Innodb
et non MyIsam
pour éviter le verrouillage de la table.
Pour la table MyIsam lorsqu'une ligne est insérée ou mise à jour, toutes les autres modifications de cette table sont conservées jusqu'à ce que cette demande soit terminée.
Vous pouvez essayer d'utiliser ce packagist https://packagist.org/packages/enfil/sharding
- 1. WP7 Silverlight App Évolutivité Évolutivité
- 2. Laravel et Angular.JS - Web App Dev
- 3. évolutivité et performance de l'application Web
- 4. Évolutivité des services Web J2EE, comment approcher?
- 5. Évolutivité, performance dans une application web .net
- 6. Laravel - Faire Laravel 5 utiliser app https
- 7. Laravel android App
- 8. Débutant Évolutivité
- 9. Évolutivité MSMQ
- 10. évolutivité websocket
- 11. Évolutivité de Cytoscape.js
- 12. Équilibrage de charge RMI/évolutivité
- 13. Laravel: .htaccess Configuration du dossier en dehors de Laravel App
- 14. Douilles paresseuses - évolutivité?
- 15. Undefined variable app $ dans Laravel
- 16. Installation d'Azure Web App Mcrypt
- 17. Évolutivité et performances dans les applications Web Java
- 18. app Laravel dir manque de chemin générateur
- 19. Évolutivité de la liste SharePoint
- 20. ASP.NET SqlMembership Fournisseur évolutivité
- 21. POO et évolutivité
- 22. Évolutivité Poco SocketReactor
- 23. Évolutivité des Oracle Forms
- 24. site web sécurisé Laravel hébergement
- 25. Évolutivité de l'interrogation duplex avec Silverlight/IIS
- 26. de Windows App ou Web App Local
- 27. App :: environment non trouvé avec Laravel 4.1
- 28. Laravel FatalErrorException sur Google App Engine
- 29. Évolutivité des écritures simultanées dans la banque de données App Engine
- 30. Laravel prises PDOException dans app/Exceptions/Handler.php
Quel est le goulot d'étranglement? –
Merci d'avoir posé cette question. Je suppose que MySQL est le goulot d'étranglement parce que ce serveur gère un tas de compte d'hébergement Web partagé à une charge de 0,13. J'essaie de réduire les disques parce que je pense que c'est le problème. –
Mieux vaut mesurer que supposer, mais vous pouvez essayer un cache en mémoire comme [memcached] (http://laravel.com/docs/cache). SO n'est pas vraiment le bon endroit pour cela, mais les mesures peuvent nous aider à vous diriger vers un site plus pertinent dans le réseau StackExchange. –