Je suis confus quant au concept de cache distribué. Je sais un peu ce que c'est de la recherche Google. Un cache distribué peut s'étendre sur plusieurs serveurs afin qu'il puisse augmenter en taille et en capacité transactionnelle. Cependant, je ne comprends pas vraiment comment cela fonctionne ni comment il distribue les données.
Par exemple, disons que nous avons Données 1, 2, 3, 4, 5, 6, 7, 8, 9, 1 et 2 serveurs de cache A et B. Si nous utilisons un cache distribué, l'une des solutions possibles est que les données 1, 3, 5, 7, 9 sont stockées dans le serveur de cache A et 2, 4, 6, 8, 10 sont stockées dans le serveur de cache B.
Est-ce donc exact ou ai-je mal compris?
La deuxième question est que j'entendais habituellement le mot nœud de serveur. Qu'Est-ce que c'est? Dans l'exemple ci-dessus, le serveur A est un nœud de serveur, non?
Troisième question, si un serveur (disons le serveur A) tombe en panne, que pouvons-nous faire? Je veux dire que si mon exemple ci-dessus est correct, nous ne pouvons pas obtenir les données 1, 3, 5, 7, 9 du cache lorsque le serveur A est en panne, alors que pourrait faire Cache Server dans ce cas?
Oui, la moitié des données sur le serveur a et la moitié sur le serveur b seraient un cache distribué. Il existe de nombreuses méthodes de distribution des données, bien qu'une sorte de hachage des clés semble être la plus populaire.
Les termes serveur et nœud sont généralement interchangeables. Un nœud est généralement une seule unité d'une collection, souvent appelée cluster. Un serveur est généralement une seule pièce de matériel. Dans erlang, vous pouvez exécuter plusieurs instances du runtime erlang sur un seul serveur, et donc vous auriez plusieurs nœuds erlang ... mais généralement vous voudriez avoir un nœud par serveur pour une planification plus optimale. (Pour les langues et plates-formes non distribuées, vous devez gérer vos processus en fonction de vos besoins.)
Si un serveur tombe en panne et qu'il s'agit d'un serveur de cache, les données doivent provenir de leur source d'origine. EG: Un cache est généralement une base de données basée sur la mémoire conçue pour une récupération rapide. Les données dans le cache ne restent présentes que tant qu'elles sont utilisées régulièrement et seront finalement purgées. Mais pour les systèmes distribués où vous avez besoin de persistance, une technique courante consiste à avoir plusieurs copies. EG: vous avez les serveurs A, B, C, D, E et F. Pour les données 1, vous les mettriez sur A, puis une copie sur B et C. Couchbase et Riak le font. Pour les données 2, il peut s'agir de B, puis de copies sur C et D. De cette façon, si un serveur tombe en panne, vous avez toujours deux copies.
J'utilise des solutions de mise en cache distribuée depuis un certain temps maintenant (NCache, AppFabric, etc.) et je vais répondre aux trois questions en fonction de mon expérience avec la mise en cache distribuée.
1: La solution de mise en cache distribuée vous permet de conserver les données sur tous les serveurs en créant un cluster de cache. Disons que vous avez 2 serveurs de cache (nœuds de serveur) et que vous avez ajouté 10 éléments dans votre cache. Idéalement, 5 éléments devraient être présents dans les deux nœuds de serveur, car la charge de données est répartie entre le nombre de serveurs de votre cluster de cache. Ceci est généralement réalisé à l'aide d'algorithmes de hachage et de distribution de données intelligents. Par conséquent, votre charge de demande de données est également répartie entre tous les serveurs de cache et vous obtenez une croissance linéaire de la capacité transnationale à mesure que vous augmentez le nombre de serveurs dans le cluster de cache.
2: Un cluster de cache peut contenir de nombreuses machines serveur également appelées nœuds de serveur. Oui, le serveur A est un nœud de serveur ou une machine serveur dans votre exemple.
3: Les systèmes de mise en cache distribués sont généralement très fiables grâce à la prise en charge de la réplication. Si un ou plusieurs serveurs tombent en panne et que la réplication est activée, il n'y aura pas de perte ou d'arrêt de données. NCache a différentes typologies pour résoudre ce problème, telles que la topologie répliquée et la topologie de partition de réplique où les données de chaque serveur sont également répliquées sur l'autre serveur. En cas de panne d'un serveur, les données répliquées de ce serveur sont automatiquement mises à disposition à partir du nœud de serveur survivant.
Dans votre exemple, les données du serveur A (1, 3, 5, 7, 9) sont répliquées sur le serveur B (2, 4, 6, 8, 10) et vice versa. Si le serveur A tombe en panne, les données du serveur A présentes sur le serveur B seront rendues disponibles et utilisées à partir de là afin qu'aucune perte de données ne se produise. Donc, si le serveur A tombe en panne et que l'application demande des données (1), ces données seront récupérées du serveur B car le serveur B contient une sauvegarde de toutes les données du serveur A. Ceci est transparent pour vos applications et est géré automatiquement par la mise en cache système.