J'essaie de comprendre quelque chose auquel je ne trouve tout simplement pas de bonne réponse.
Si je dis un cache REDIS (ou un cache externe en mémoire) assis dans un centre de données et un serveur d'applications assis dans le même centre de données, quelle sera la vitesse de la connexion réseau (latence, débit) pour lire les données entre ces deux machines?
La «vitesse» du réseau, par exemple, sera-t-elle toujours au moins d'un ordre de grandeur supérieure à la vitesse de la RAM qui recherche mes données dans le cache sur REDIS?
Ma question ultime est - le fait d'avoir tout cela en mémoire sur REDIS fournit-il réellement une utilité? Contrairement à si REDIS mettait tout cela en cache sur un SSD à la place? La mémoire coûte cher. Si le réseau n'est en effet pas un goulot d'étranglement DANS le centre de données, alors la mémoire a de la valeur. Sinon, ce n'est pas le cas.
Je suppose que ma question générale est malgré les vastes inconnues dans les centres de données et l'impossibilité de généraliser ainsi que les variances, parlons-nous d'ordres de grandeur suffisants entre la latence de la mémoire dans un système informatique et même les meilleurs réseaux internes à un DC que la mémoire est des latences réduites n'apportent pas une amélioration significative des performances? Je comprends qu'il existe de nombreuses variables, mais est-il proche? Est-il si proche que ces variables comptent? Par exemple, prenez une position hyperbolique dessus, un lecteur de bande est bien plus lent que le réseau, donc la bande n'est pas idéale pour un cache.
Réponses:
Il existe plusieurs versions des «tableaux de latence que tout le monde devrait connaître», telles que:
En réalité, il y a plus que de la latence. C'est une combinaison de facteurs.
Alors, quelle est la latence du réseau dans un centre de données? Latence, eh bien je dirais que c'est "toujours" en dessous de 1ms. Est-ce plus rapide que la RAM? Non. Est-il proche de la RAM? Je ne pense pas.
Mais la question demeure, est-elle pertinente. Est-ce la donnée que vous devez connaître? Votre question est logique pour moi. Comme tout a un coût, si vous obtenez plus de RAM pour que toutes les données puissent rester dans la RAM ou que vous puissiez lire de temps en temps sur le disque.
Votre "hypothèse" est que si la latence du réseau est plus élevée (plus lente) que la vitesse du SSD, vous ne gagnerez pas en ayant toutes les données dans la RAM car vous aurez le ralentissement sur le réseau.
Et il semblerait que oui. Mais, vous devez également prendre en compte la simultanéité. Si vous recevez 1 000 demandes de données à la fois, le disque peut-il effectuer 1 000 demandes simultanées? Bien sûr que non, alors combien de temps cela prendra-t-il pour répondre à ces 1 000 demandes? Par rapport à la RAM?
Il est difficile de le résumer à un seul facteur tel que des charges lourdes. Mais oui, si vous n'aviez qu'une seule opération en cours, la latence du réseau est telle que vous ne remarqueriez probablement pas la différence entre SSD et RAM.
Tout comme jusqu'à ce qu'un disque 12 Gbit / s apparaisse sur le marché, une liaison réseau 10 Gbit / s ne serait pas surchargée par un seul flux car le disque était le goulot d'étranglement.
Mais rappelez-vous que votre disque fait beaucoup d'autres choses, votre processus n'est pas le seul processus sur la machine, votre réseau peut transporter différentes choses, etc.
En outre, toutes les activités du disque ne signifient pas le trafic réseau. La requête de base de données provenant d'une application vers le serveur de base de données n'est qu'un trafic réseau très minime. La réponse du serveur de base de données peut être très petite (un seul numéro) ou très grande (milliers de lignes avec plusieurs champs). Pour effectuer l'opération, un serveur (serveur de base de données ou non) peut avoir besoin d'effectuer plusieurs recherches, lectures et écritures sur disque mais n'envoyer qu'un très petit bit sur le réseau. Ce n'est certainement pas une RAM de disque réseau un pour un.
Jusqu'à présent, j'ai évité certains détails de votre question - en particulier, la partie Redis.
OK, cela signifie donc que tout est en mémoire. Désolé, ce disque SSD rapide ne vous aidera pas ici. Redis peut conserver les données sur le disque, elles peuvent donc être chargées dans la RAM après un redémarrage. C'est seulement pour ne pas "perdre" de données ou avoir à repeupler un cache froid après un redémarrage. Dans ce cas, vous devrez donc utiliser la RAM, quoi qu'il arrive. Vous devrez avoir suffisamment de RAM pour contenir votre ensemble de données. Pas assez de RAM et je suppose que votre système d'exploitation utilisera
swap
- probablement pas une bonne idée.la source
Il existe de nombreuses couches de cache dans les systèmes informatiques. L'insertion d'une couche dans la couche application peut être bénéfique, en mettant en cache l'API et les requêtes de base de données. Et éventuellement des données temporaires comme des sessions utilisateur.
Les magasins de données comme Redis fournissent un tel service sur un réseau (rapide) ou un socket UNIX (encore plus rapide), tout comme vous utiliseriez une base de données.
Vous devez mesurer les performances réelles de votre application, mais inventons un exemple. Supposons qu'une requête utilisateur commune effectue 5 requêtes API qui prennent chacune 50 ms. 250 ms est une latence détectable par l'utilisateur. Contrairement à la mise en cache des résultats. Même si le cache se trouve dans une zone de disponibilité différente à travers la ville (pas optimale), les hits sont probablement de 10 ms au maximum. Ce serait une accélération 5x.
En réalité, la base de données et les systèmes de stockage ont également leurs propres caches. Cependant, il est généralement plus rapide d'obtenir un résultat pré-extrait que de parcourir à nouveau le moteur de base de données et les couches du système de stockage. De plus, la couche de mise en cache peut réduire considérablement la charge de la base de données située derrière.
Pour un exemple d'un tel cache en production, ne cherchez pas plus loin que le blog de l'infrastructure Stack Overflow sur l'architecture . Des centaines de milliers de requêtes HTTP générant des milliards de hits Redis sont assez importantes.
La DRAM à des temps d'accès de 100 ns est environ 100 fois plus rapide que le stockage permanent à semi-conducteurs. Il est relativement peu coûteux pour cette performance. Pour de nombreuses applications, un peu plus de RAM achète une vitesse et un temps de réponse précieux.
la source