Je tente de mettre en cache une page qui exécute un tableau de bord affichant des informations extraites d'une base de données Salesforce via des API avec PHP, sur un serveur Apache.Cache page dynamique avec Varnish
La dynamique est le suivant,
clients-> apache/php/sqlqueries-> Salesforce
Le tableau de bord se compose dans les tableaux qui Charger à nouveau les pages PHP contenant l'objet que les requêtes Salesforce.
function refreshtable1() {
$('#table1').load('/tables/table1.php', function() {
setTimeout(refreshtable1, 60000);
});
}
Pour que les requêtes à cela arrive, le table1.php comprend un objet de requête et d'un module d'extension API Salesforce qui vous connecter à Salesforce sur chaque reload et les requêtes. Le login renvoie un identifiant de session qui est placé dans la session et réutilisé jusqu'à son expiration.
Maintenant, il ya 30 utilisateurs, 5 tables de 30 colonnes chacune, une pour chaque utilisateur qui affiche des informations afin de pouvoir les partager.
2 tables sont rafraîchies toutes les 30 minutes et 3 toutes les minutes.
Si vous faites les numéros qui pourraient aller jusqu'à 1 million de requêtes tous les jours que ces gars continuent à laisser leurs navigateurs. Il y a un gestionnaire de session qui tue la session après un certain temps, mais s'il rafraichit la chose avant de rentrer à la maison, il dure encore 9 heures.
L'administrateur Salesforce ne m'aime pas beaucoup à ce stade. Donc, j'essaie de mettre une sorte de système ou de cache à vide. Aussi pour éviter d'avoir un db local où je copie tout et la lecture des requêtes à remplir sont 3 par minute. C'est pourquoi j'ai décidé de donner une chance au cache Varnish. Le problème est que je vois qu'il ne fournit pas le contenu des tables aux clients depuis le cache, il semble que la partie HTML soit restituée mais le contenu de la table continue d'être extrait du serveur backend sur lequel le site du tableau de bord tourne.
~# varnishstat -1 | grep "cache_hit \|cache_miss \|cache_hitpass"
MAIN.cache_hit 44 0.00 Cache hits
MAIN.cache_hitpass 0 0.00 Cache hits for pass.
MAIN.cache_miss 16436 0.59 Cache misses
Je ne sais pas si c'est encore possible, donc j'apprécierais tout conseil.
C'est le Varnish conf,
sub vcl_recv {
if (!(req.http.host == "test.local")) {
unset req.http.Cookie;
}
}
Je suis juste essayer essentiellement de mettre en cache tous les cookies pour garder 'PHPSESSID'. J'ai également essayé de mettre en cache POST et GET juste au cas où mais cela n'a pas vraiment fait l'affaire non plus.
if (!(req.method ~ "GET") && !(req.method ~ "POST")) {
return (pass);
}
Toutes les idées sur la façon d'obtenir Varnish pour travailler sur ce scénario ou sur la façon de réduire l'interrogation avec une autre méthode?
Cheers.
Résolvez le problème à la source. Mettre en cache les réponses de Salesforce par exemple. avec redis ou memcache. S'il vous plaît lire https://stackoverflow.com/questions/4273734/how-to-make-varnish-ignore-not-delete-cookies si vous voulez continuer avec Varnish, mais cela peut avoir des conséquences assez désagréables. –
n'ont pas accès au backend et les administrateurs de salesforce ne le feront pas, c'est le problème, donc il faut trouver une solution intermédiaire ou frontale – eLGusto
Ensuite, vous n'avez pas de chance. Si vous devez conserver PHPSESSID afin que les réponses ne soient pas partagées entre les utilisateurs, il n'y a rien à mettre en cache. Même si vous mettez en cache les réponses par utilisateur, cela annule l'objectif d'actualisation des tables à la première place puisque vous allez renvoyer des données obsolètes. Vous pouvez obtenir la même chose en réduisant le taux de rafraîchissement en javascript. –