Définitions: ressources = collecte d'enregistrements de base de données, régénération = traitement de ces dossiers et produire le html correspondantComment mettre en cache des pages en utilisant des tâches d'arrière-plan?
flux actuel:
- Recevoir la demande du client
- Vérifier pour la ressource dans le cache
- Si non dans le cache ou le cache expiré, régénérer
- Résultat
Le problème est que l'étape de régénération peut bloquer un processus de serveur unique pendant 10-15 secondes. Si deux utilisateurs demandent la même ressource, un couple de processus peut régénérer la même ressource simultanément, chacun prenant 10 à 15 secondes.
Ne serait-il pas préférable d'avoir le signal de frontend processus d'arrière-plan en disant "Hey, régénérer cette ressource pour moi".
Mais que montrerait-il à l'utilisateur? "Reconstruire" n'est pas acceptable. Toutes les ressources devraient être en cache à l'avance. Cela pourrait être un problème car la base de données serait presque dupliquée sur le système de fichiers (trop gros pour tenir dans la mémoire). Y a-t-il un moyen d'éviter cela? Pas idéal, mais il semble que la seule issue.
Mais il y a encore un problème. Comment empêcher les deux mêmes processus de demander la régénération d'une ressource en même temps? Le processus d'arrière-plan pourrait être la régénération de la ressource lorsqu'un frontend demande la régénération de la même ressource. J'utilise PHP et le Zend Framework juste au cas où quelqu'un voudrait offrir une solution spécifique à une plate-forme. Mais ce n'est pas important, je pense que ce problème s'applique à n'importe quel langage/cadre.
Merci!
Le cache html est-il spécifique à l'utilisateur ou identique pour tous les utilisateurs? Quels sont les critères d'expiration d'un cache? Peut-être que si vous fournissez quelques détails, il serait plus facile de suggérer quelque chose dans votre cas particulier, car il est difficile de trouver une solution générique ici. – serg