2017-10-01 2 views
0

Prenons un exemple de Twitter. Il y a un énorme cache qui est fréquemment mis à jour. Par exemple: si la personne Foo tweete et qu'elle a des adeptes partout dans le monde. Idéalement, tous les caches de tous les PoP doivent être mis à jour. c'est-à-dire qu'ils doivent rester synchronisésConception du système: Mise en cache globale et cohérence

Comment la réplication à travers le datacenter (PoP) fonctionne-t-elle pour les caches en temps réel? Quels outils/technologies sont préférés? Quels sont les problèmes potentiels dans cette conception de système?

Répondre

1

Je ne suis pas sûr qu'il y ait une bonne/mauvaise réponse à cela, mais voici mes deux centimes. Je traiterais le problème sous un angle légèrement différent: lorsqu'un utilisateur publie quelque chose, quelque chose va dans un stockage distribué (pas nécessairement un cache) qui est déjà redondant sur plusieurs zones géographiques. Je présume également que, dans l'intérêt de la performance, ces nœuds sont finalement cohérents.

Maintenant, la mise en cache. Je ne concevrais pas un système qui prenne soin de synchroniser toutes les caches chaque fois que quelqu'un fait quelque chose. Je préférerais implémenter la mise en cache au niveau du service. Imaginez un petit service résidant dans un cluster géographiquement distribué. Chaque fois qu'un utilisateur essaie d'extraire des données, le service vérifie son cache local - s'il est manquant, il lit les tweets du stockage et en met une partie dans un cache (sous réserve de politiques d'expulsion). Tous les accès suivants, le cas échéant, seraient mis en cache au niveau local.

En termes de précautions de conception:

  • examiner attentivement les DC/topologie AZ afin d'assurer une bande passante suffisante et une faible latence
  • Cache au niveau local afin d'éviter les déplacements réseau inutiles
  • Les mises à jour du cache ne se produisent pas du centre vers la périphérie; cache est créé quand un cache cache se passe
  • Je suis l'évidence ici, mettre en œuvre les bonnes politiques d'expulsion afin de garder seulement les bons objets en cache
  • Le seul message qui devrait aller du centre à la périphérie est un cache flush broadcast (dites à tous les nœuds de se débarrasser de leur cache)

Il me manque certainement beaucoup d'autres choses ici, mais j'espère que c'est une bonne chose à méditer.

+0

Cela semble bon pour écrire, puis lire le type de système. si le système a besoin d'atomicité. par exemple: transaction bancaire. la persistance finalement cohérente dans les pays en développement ne fonctionnera pas ici. Comment pensez-vous que cela devrait être géré? – user3833308

+1

Vous voudrez peut-être poser cette question séparément. La finance est tout à fait différente. Il y a une bonne raison pour que les RDMS traditionnels avec leur conformité ACID et la gestion des transactions soient largement utilisés par l'industrie. Une grande partie de la conception de ces technologies était dictée par les exigences bancaires. – CheeseFerret