web-dev-qa-db-fra.com

Comment fonctionnent les mises à jour automatiques?

J'ai reçu un courriel ce matin indiquant que mon site Wordpress avait été automatiquement mis à jour avec la dernière version. Je connaissais cette fonctionnalité, mais je me suis toujours demandé comment elle fonctionnait.

PHP n'est pas un processus permanent: il ne s'exécute que sur demande. Donc, autant que je sache, Wordpress ne peut se mettre à jour que lorsque quelqu'un charge une page Web. Mais le processus de mise à jour n’est pas instantané et un utilisateur visitant le site aurait donc un chargement de page très lent.

Existe-t-il une astuce différente pour les mises à jour automatiques? J'ai cherché partout mais je n'ai trouvé aucune explication.

28
DisgruntledGoat

PHP n'est pas un processus permanent: il ne s'exécute que sur demande. Donc, autant que je sache, Wordpress ne peut se mettre à jour que lorsque quelqu'un charge une page Web. Mais le processus de mise à jour n’est pas instantané et un utilisateur visitant le site aurait donc un chargement de page très lent.

Existe-t-il une astuce différente pour les mises à jour automatiques? J'ai cherché partout mais je n'ai trouvé aucune explication.

Le système que vous recherchez ici s'appelle "WP Cron". C'est un système de traitement en arrière-plan dans WordPress qui permet aux événements de se produire en dehors du traitement normal. Ils ont toujours besoin d'un déclencheur pour les lancer, mais ils n'interfèrent pas avec le chargement de pages en raison du processus d'arrière-plan.

Alors oui, quelqu'un doit charger votre page. Dans le fichier default-filters.php, vous trouverez cette ligne de code:

add_action( 'init', 'wp_cron' );

Ainsi, à chaque chargement de page, la fonction wp_cron s'exécute. Cette fonction est terminée dans wp-includes/cron.php et vérifie les événements planifiés dans la base de données. S'il y a des processus à exécuter en arrière-plan, il appelle la fonction spawn_cron.

Spawn cron a deux méthodes de fonctionnement possibles, mais la première et la plus courante consiste à appeler la fonction wp_remote_post pour établir une connexion avec lui-même, à l’URL de wp-cron.php. En faisant cette requête HTTP supplémentaire, il lance un autre processus PHP pour effectuer tout le travail réel. La demande qu'il fait ici est non bloquante, avec un délai d'attente de 0,01 seconde. Donc, cela ne donne aucun résultat ici. Le but de la demande est simplement de démarrer un nouveau processus en arrière-plan. Une fois que cela est fait, il revient simplement, de sorte que l'utilisateur qui visualise n'a jamais de retard.

Le processus wp-cron.php définit le travail réel, la mise à jour et tout le reste. Beaucoup de processus dans WordPress sont gérés par le système cron. Après publication, traitement des pings, vérifications des mises à jour programmées, tout ce qui doit se produire en dehors du flux normal peut être planifié puis exécuté selon les besoins.

Mais oui, un succès normal sur le site doit effectivement arriver pour lancer le processus. Et non, WordPress.org ne contacte pas directement votre site pour lancer des actions, votre site doit recevoir une certaine forme de trafic pour le démarrer. Toute forme de trafic fera l'affaire.

14
Otto

En fait, la mise à jour automatique est poussée de wp.org. Le processus de mise à jour est toujours exécuté sur votre site, mais en arrière-plan via wp-cron.

Quand une nouvelle mise à jour mineure est publiée, les utilisateurs de WordPress commencent à déployer la mise à jour. Le processus de mise à jour proprement dit est démarré après que votre site ait vérifié wp.org pour les mises à jour, une mise à jour est théoriquement disponible et votre site est choisi par hasard pour être mis à jour.


(Merci @otto pour avoir signalé ma mauvaise formulation :))


Comme chaque site vérifie avec wp.org les nouvelles versions (généralement deux fois par jour en utilisant wp-cron), le serveur de rollouts sait combien de sites nécessitent une mise à jour.

Ensuite, le déploiement commence lentement. Un site sur 128 est mis à jour automatiquement. Cette situation est surveillée et si le taux de réussite n'indique aucun problème lors du déploiement, la mise à jour automatique est générée sur un plus grand nombre de sites (généralement, l'étape suivante est 1 sur 64 et continue d'augmenter de la sorte) jusqu'à ce que toutes les mises à jour automatiques soient fournies.

Cela permet aux développeurs d’arrêter le déploiement en cas de problème, mais le taux de réussite de la dernière mise à jour de 3.8 à 3.8.1 a été de 100%.

Les sites sélectionnés par le 1 out of 128 sont en réalité aléatoires. Pas vraiment, mais si vous voulez savoir, cela fonctionne comme ceci:

L'URL du site nécessitant une mise à jour est hachée à l'aide de MD5. En utilisant uniquement les trois premiers caractères de ce hachage et en le convertissant en base10, il en résulte 4096 possibilités. La mise à jour a démarré pour les sites dont le nombre calculé est compris entre 0 et 31 (4096/32 = 128).

D'accord, je suppose que c'est assez aléatoire après tout;)

Dans mon cas, comme je gère beaucoup de sites WordPress, les mises à jour ont pris une journée - était assez drôle à voir quand toutes les pages ont été mises à jour.

Juste au cas où vous vous demandiez: D

btw, ici est un article sur make.wordpress.org décrivant le processus, comme il est arrivé.

17
fischi

En termes très généraux, lorsqu'un utilisateur visite le site, wordpress vérifie l'expiration de la minuterie et si une expiration est détectée une autre une requête/est envoyée au serveur pour "exécuter" les actions associées à l'événement ayant expiré. C'est pourquoi l'utilisateur ne ressent aucun retard notable dans le chargement de la page, car le serveur exécute l'action réelle (mise à niveau dans ce cas) dans un processus séparé.

Cela fonctionne mais le timing n'est pas très précis. Plus le trafic de votre site est important, plus il sera précis.

Les personnes qui souhaitent obtenir de meilleures performances et une synchronisation plus précise peuvent bloquer le "processus" interne de cron que Wordpress possède et utiliser le processus cron du système d'exploitation pour déclencher la vérification des minuteries.

1
Mark Kaplun