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 du RAM qui recherche mes données hors du cache sur REDIS?
Ma question ultime est - est-ce que tout cela est 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 de suffisamment d'ordre de grandeur entre la latence de la mémoire dans un système informatique et même les meilleurs réseaux internes à un DC que les latences réduites de la mémoire n'apportent pas une amélioration significative des performances? J'obtiens qu'il y a beaucoup de variables, mais à quel point est-elle? Est-elle si proche que ces variables ont de l'importance? Par exemple, prenez une position hyperbolique sur elle, un lecteur de bande est beaucoup plus lent que le réseau, donc la bande n'est pas idéale pour un cache.
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 RAM afin que toutes les données puissent rester dans RAM ou il est correct de 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 RAM car vous aurez la lenteur 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.
Redis est un magasin de structure de données en source ouverte (sous licence BSD), utilisé comme base de données, cache et courtier de messages. - https://redis.io/
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, il peut donc être chargé dans RAM après un redémarrage. C'est seulement pour ne pas "perdre" les données ou devoir repeupler un cache froid après un redémarrage. Donc dans ce cas , vous devrez utiliser la RAM, peu importe quoi. Vous devrez en avoir assez RAM pour contenir votre ensemble de données. Pas assez RAM et Je suppose que votre système d'exploitation utilisera swap
- ce n'est probablement pas une bonne idée.
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 les 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 au maximum de 10 ms. 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é-récupéré 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 d'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 mémoire coûte cher.
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 RAM achète une vitesse et un temps de réponse précieux.