Question

Comment gérez-vous remplacer / ajouter / supprimer des nœuds Memcached dans vos applications de production? Je vais avoir un certain nombre d'applications qui sont clonés et personnalisés en raison de chacun de nos clients ont besoin en cours d'exécution sur un seul et même serveur web, donc je vais suppose qu'il y aura un jour où sera changé certains des nœuds.

Voici comment memcached est peuplée de la normale:

$m = new Memcached();

$servers = array(
    array('mem1.domain.com', 11211, 33),
    array('mem2.domain.com', 11211, 67)
);
$m->addServers($servers);

Mon idée de départ, est de rendre le réseau de serveurs de $ à être alimenté à partir de la base de données, également mis en cache, mais basé sur des fichiers, fait une fois par jour ou quelque chose, avec l'option pour forcer une mise à jour prochaine exécution de la fonction détient l'appel de addServers de $. Cependant, je suppose que cela pourrait ajouter un peu de frais généraux supplémentaires puisque les disques sont le stockage assez lent ...

Que pensez-vous?

Était-ce utile?

La solution

Il est toujours préférable de définir des choses comme ça dans la source. Certes, vous pouvez utiliser parse_ini_file() ou quelque chose comme ça pour lire un fichier de configuration. Vraiment bien, il appartient à la source. Mais si elle est définie dans un fichier INI, il n'y a pas beaucoup de problèmes de sécurité telles que l'injection de code et les goûts, par opposition à la définition de vos entrées en PHP.

Comme il y a quelques applications qui pourraient être en train de lire le même fichier INI, vous pouvez le mettre dans un lieu commun que toutes les applications ont accès à (en utilisant les autorisations de groupe, par exemple). En fait, ce fait est pas vraiment recommandé.

Autres conseils

Utilisez un fichier de configuration - si son de parse_ini_file ou d'un autre système d'analyse de configuration. Si vous êtes inquiet au sujet du temps de l'analyse, vous pouvez mettre ces configs dans le chemin de charge php ini http://brian.moonspot.net/using-ini-files-for-php-application-settings - ce prétraite tous les vous vars besoin, mais vous devrez redémarrez apache pour charger les modifications.

Une fois que les fichiers sont lus assez (aussi longtemps que vous n'avez pas trop raclée sur votre machine) le fichier de configuration sera dans le cache de mémoire mappée de toute façon, donc ça va être très rapide. Vous pouvez optimiser en utilisant le formulaire sérialisé php qui charge rapide, et même optimiser en utilisant le cache de l'utilisateur APC.

Enfin, utiliser les nouvelles bibliothèques clientes memcache -. Ils utilisent maintenant les algorithmes de hachage cohérents, et il va aider l'ajout / suppression des serveurs individuels

En fonction de vos besoins j'utiliser une liste des supports d'expulsion automatique après un certain TTL (mode passif) ou une sorte de modèle d'écoute si vous voulez que ce soit immédiatement mis à jour (mode actif). Où que vous gardez votre principale source (fichier de propriétés, base de données, etc.) ne sont pas vraiment important tant qu'il est accessible en cas de besoin et votre TTL est assez grand (comme vous l'avez mentionné dans votre commentaire).

Pour l'approche passive, vous pouvez utiliser la réutilisation d'une autre bibliothèque de la mise en cache locale des supports TTL (par exemple EHCache en Java) en mettant votre liste de serveurs dans le cache sous une clé connue. Pour approche active, par exemple, Java a java.util.EventListener. Il est () heureusement de nombreuses années depuis que je l'ai fait en PHP quoi que ce soit ne peut donc pas donner des conseils sur ce sujet.

Je déconseille vivement de mettre les données de configuration dans le code. Dans le monde, je vis hardcoding est un péché grave.

Vous pouvez aussi jeter un oeil à comment last.fm est d'utiliser l'algorithme de hachage cohérent pour pouvoir ajouter / supprimer des serveurs / de la piscine memcached sans causer une remap complète de toutes les clés.

Pour autant que j'udnerstood, la principale préoccupation est ici comment mettre en cache la configuration garder la plupart du temps la mise à jour quand il change.

Eh bien, la meilleure option ici est de toute évidence, il stocke dans une base de données et rafraîchissante de DB, par exemple, toutes les 15 secondes. Avoir grande charge sur l'application, l'interrogation de la base de données une fois par 15 secondes ne changera rien du tout. Le chargement des données de DB lui-même est assez rapide que vous avez juste besoin de quelques champs.

Une autre option que le travail pourrait ici - utiliser un memcached séparé :) Sérieusement, juste en cache la configuration chargée de DB là, purger cette clé de cache sur la mise à jour de configuration.

En résumé: tout régime d'expiration en fonction du temps fonctionnerait. La solution plus simple - maintenir sur votre (magasin dernière fois de rafraîchissement et de vérifier sur chaque appel de fonction); un peu plus avancé -. utiliser quelque chose comme memcached

mise à jour : DB est la meilleure solution car il adapte assez bien. Vous ne devez pas copier configs dans 20 serveurs sur chaque mise à jour de configuration

  • Utilisez un localisateur de service comme - https://www.consul.io/ . Ajouter ou services remove et les consommateurs reçoivent les informations de service en temps réel à partir de consul.
  • Si le consul fait plus de frais généraux de la gestion d'un nouveau logiciel, déplacer les informations dans une configuration centralisée. Mise à jour à recharger les événements de mise à jour config ou déclenchement. Les consommateurs écoutent les événements et mettre à jour les informations.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top