J'ai un service web exécuté en PHP-MYSQL. Le script consiste à extraire des données d'autres sites Web tels que wikipedia, google, etc. Le temps moyen d'exécution d'un script est de 5 secondes (actuellement en cours d'exécution sur un serveur). Maintenant, on m'a demandé de mettre à l'échelle le système pour gérer 60 demandes/seconde. Lequel de l'approche dois-je suivre. -Split la fonctionnalité entre les serveurs (je crée 1 serveur pour extraire des données de wikipedia, un autre pour aller chercher google etc et un serveur principal.) -Split charge entre les serveurs (je crée un serveur principal qui round robin la demande entièrement à son enfant Quel est le sujet du partage de la base de données MYSQL entre les serveurs enfants ici?)équilibrage de charge en php
Répondre
Je ne suis pas sûr de ce que vous gagneriez vraiment en partageant la fonctionnalité entre les serveurs (option # 1). Vous pouvez utiliser mod_proxy_balancer d'Apache pour accomplir votre seconde option. Il a quelques algorithmes différents pour déterminer quel serveur serait le plus susceptible de gérer la requête.
http://httpd.apache.org/docs/2.1/mod/mod_proxy_balancer.html
Apache/PHP doit être capable de gérer plusieurs requêtes simultanément par lui-même. Vous devez juste vous assurer que vous avez assez de mémoire et configurer Apache correctement.
Votre script n'est pas un serveur il agit en tant que client lorsqu'il effectue des demandes à d'autres sites. Le reste du temps est simplement un composant de votre serveur. Oui, exécuter plusieurs clients (les instances de votre script - vous n'avez pas besoin de plus de matériel) simultanément sera beaucoup plus rapide que d'exécuter séquentiellement, mais si vous avez besoin d'extraire les données de manière synchrone avec la requête entrante à votre script, alors la coordination des résultats des instances séparées sera difficile - vous pourriez plutôt jeter un oeil aux fonctions curl_multi * qui vous permettent de charger plusieurs requêtes et de les exécuter simultanément à partir d'un seul thread PHP. Alternativement, si vous savez à l'avance quelle sera la demande entrante pour votre service web, alors vous devriez penser à implémenter la planification et la mise en cache des extractions de façon à ce qu'elles soient déjà disponibles lorsque la requête arrive.
Le temps d'exécution n'est pas lié aux demandes par seconde; obtenir des chiffres réels avant de faire quoi que ce soit. –
que devrais-je considérer alors? –
il n'est pas clair comment le 5sec time-to-grab-data-from-source est lié au 60req/sec. est-ce que cela représente 60 utilisateurs simultanés demandant des sources différentes? Si oui, alors vous attendez-vous toujours le même temps de saisie de 5 secondes par demande? sinon, ça ne va pas aller plus vite. le goulot d'étranglement est la source. – stillstanding