Plusieurs serveurs memcached question
hypothétiquement - si j'ai plusieurs serveurs memcached comme ceci:
//PHP
$MEMCACHE_SERVERS = array(
"10.1.1.1", //web1
"10.1.1.2", //web2
"10.1.1.3", //web3
);
$memcache = new Memcache();
foreach($MEMCACHE_SERVERS as $server){
$memcache->addServer ( $server );
}
Et puis j'ai mis les données comme ceci:
$huge_data_for_frong_page = 'some data blah blah blah';
$memcache->set("huge_data_for_frong_page", $huge_data_for_frong_page);
Puis-je récupérer les données comme ceci:
$huge_data_for_frong_page = $memcache->get("huge_data_for_frong_page");
Quand je voudrais récupérer ces données à partir de serveurs memcached - comment php client memcached savoir quel serveur à la requête de ces données? Ou est memcached client va interroger tous les serveurs memcached?
- Cette question n'est pas exactement la même chose, mais ma réponse il devrait répondre à votre question ainsi.
- merci...savez-vous si le client memcached soldes écrire automatiquement les demandes? ou faut-il aller pour la première serveur jusqu'à ce qu'il se remplit et puis à la seconde jusqu'à la deuxième on remplit et le troisième, etc.
- Autant que je me souvienne, il y a plusieurs stratégies de hachage pour memcache, mais la valeur par défaut est stable algorithme de hachage. Cela signifie qu'une même clé (en supposant que le serveur de configuration reste stable), toujours sur le même serveur. Cela signifie également que le hachage utilisé détermine le serveur obtiendrez une clé donnée, de sorte que la charge doit être équilibrée.
- Merci de demander ce. Donc dans l'ensemble, il semble que plus de lecture/écriture à travers l'objectif et non d'un licenciement? Je suis à la recherche pour la redondance et au moins confirme ce que je pensais.
Vous devez vous connecter pour publier un commentaire.
Eh bien, vous pourriez écrire des livres à ce sujet, mais la baseic principe est qu'il existe différentes approches.
Le plus commun et senseful approche pour la mise en cache est la fragmentation. Ce qui signifie que les données sont sotred sur un seul serveur et une méthode est utilisée pour déterminer le serveur qui c'est. De sorte qu'il peut être récupérée à partir de ce très serveur et un seul serveur est impliqué.
De toute évidence, cela fonctionne bien dans la clé/valeur des environnements de memcached.
Une pratique courante est de prendre un cryptographiques majeures de hachage de la clé. Calculer cette empreinte MOD le nombre de serveurs et le résultat est le serveur vous permettra de stocker et de récupérer les données.
Cette procédure produit plus ou moins égale de la charge.
Comment sa fait exactement dans memcached je ne sais pas mais une sorte de hachage pour vous.
Mais méfiez-vous que ce teqnique n'est pas très disponible. Donc, si un serveur tombe en panne, les entrées sont partis. Donc, manifestement, vous ne pouvez l'utiliser que pour la mise en cache.
Autres teqniques, où, par exemple, la haute disponibilité des ressources est nécessaire, que de temps à calculer et sont automatiaclly réchauffé, il int fond, impliquent la réplication.
La forme la plus commune dans la mise en cache des environnements est maître de réplication du maître de dernière horodatage sur la résolution de conflits. Qui bascically signifie que chaque serveur reçoit les données de everyserver qui n'est pas encore sur le serveur local (ce qui est fait à l'aide de la réplication des journaux et des octets de compensations). Si il y a un conflit, la version la plus récente est utilisée (le léger décalage de temps entre les serveurs est ignoré).
Mais dans d'autres environnements où parce que examply que très peu d'écrits, mais beaucoup est lu il y a souvent une cascade où un seul ou de quelques serveurs maîtres sont impliqués, et le reste est juste de la pure lire la réplication.
Mais ces configurations sont très rares, car la fragmentation, comme describeda bove offre la meilleure performance et à la mise en cache des environnements de perte de données est principalement tolérable. si son aussi par défaut pour memcached.
il y a quelques jours je cherchais une solution pour optimiser la mise à l'échelle de nos serveurs memcached et trouvé cette réponse. À partir d'expériences nous a fait, le descritte solution à générer un hash et le MOD du nombre de serveurs pour trouver le serveur cible, n'est-ce pas le meilleur.
Si vous allez jusqu'à - ou à la baisse le nombre de vos serveurs, il pourrait résultat dans le même scénario lorsque le vidage du cache. La plupart des hachages obtenir un autre serveur et donc il n'y aura pas un résultat hors du cache pour la première demande.
La meilleure solution à utiliser pour de tels scénarios est conforme hachage. Grâce à la cohérence de hachage, chaque serveur est fixe hashrange. Donc, si vous maintenant - ou de réduire le nombre de serveurs, seuls les hachages dans ce hashrange va être commuté à un autre serveur. Tous les autres hachages reste à il serveurs et seule une petite partie sera régénérée.
Pour PHP il y a une bibliothèque appelée "flexihash" qui ne l'uniforme de hachage pour vous.
Dans notre Blog, vous pouvez trouver un exemple de comment l'utiliser avec votre propre cache-client. L'article est en allemand, mais le code source doit être selfexplained.