Ceci est une question de conception de logiciel
Je travaillais sur la règle suivante pour la vitesse
cache memory > memory > disk > network
Chaque étape représentant 5 à 10 fois l'étape précédente (par exemple, la mémoire cache est 10 fois plus rapide que la mémoire principale).
Maintenant, il semble que l'Ethernet Gigabit ait une latence inférieure à celle du disque local. Ainsi, les opérations de lecture d'une grande base de données distante en mémoire distante sont peut-être plus rapides que les lectures sur disque local. Cela ressemble à de l'hérésie pour un vieux temporisateur comme moi. (Je viens de passer du temps à créer un cache local sur le disque pour éviter d'avoir à faire des allers-retours sur le réseau - d'où ma question)
Quelqu'un a-t-il de l'expérience/des chiffres/des conseils dans ce domaine?
Et oui, je sais que la seule vraie façon de le savoir est de construire et de mesurer, mais je me posais la question de la règle générale.
modifier :
Ce sont les données intéressantes de la réponse du haut:
Aller-retour dans le même centre de données 500 000 ns
Recherche de disque 10 000 000 ns
C'est un choc pour moi; mon modèle mental est qu'un aller-retour réseau est intrinsèquement lent. Et ce n'est pas le cas - c'est 10 fois plus rapide qu'un "aller-retour" sur disque.
Jeff attwood a publié ce v bon blog sur le sujet http://blog.codinghorror.com/the-infinite-space-between-words/
Voici quelques chiffres que vous recherchez probablement, tels que cités par Jeff Dean, Google Fellow:
Des chiffres que tout le monde devrait connaître
L1 cache reference 0.5 ns Branch mispredict 5 ns L2 cache reference 7 ns Mutex lock/unlock 100 ns (25) Main memory reference 100 ns Compress 1K bytes with Zippy 10,000 ns (3,000) Send 2K bytes over 1 Gbps network 20,000 ns Read 1 MB sequentially from memory 250,000 ns Round trip within same datacenter 500,000 ns Disk seek 10,000,000 ns Read 1 MB sequentially from network 10,000,000 ns Read 1 MB sequentially from disk 30,000,000 ns (20,000,000) Send packet CA->Netherlands->CA 150,000,000 ns
C'est à partir de sa présentation intitulée Designs, Lessons and Advice from Building Large Distributed Systems et vous pouvez l'obtenir ici:
La conférence a été donnée à Large-Scale Distributed Systems and Middleware (LADIS) 2009 .
On dit que gcc -O4 envoie votre code par e-mail à Jeff Dean pour une réécriture.
Il y a beaucoup de variables en ce qui concerne le réseau par rapport au disque, mais en général, le disque est plus rapide.
Les bus SATA 3.0 et SAS sont de 6 Gbit/s, contre une surcharge de protocole réseau de 1 Gbit/s. Avec RAID-10 15k SAS, le réseau va sembler lent. De plus, vous avez un disque cache et également la possibilité de disques durs à semi-conducteurs, qui, selon le scénario, pourrait également augmenter la vitesse. L'accès aléatoire aux données séquentielles joue un rôle, ainsi que la taille du bloc dans lequel les données sont transférées. Tout dépend de l'application utilisé pour accéder au disque.
Maintenant, je n'ai même pas abordé le fait que tout ce que vous transportez sur le réseau va ou vient du disque de toute façon ... alors ... encore une fois, le disque est plus rapide.
Eh bien, cela dépend si la ressource réseau a les données que vous demandez facilement disponibles (en mémoire ou similaire) ou si elle les lit à son tour sur un disque.
Dans tous les cas, le débit peut être plus élevé dans certains cas, mais je pense que la latence sera plus élevée.
IMX le disque est encore plus rapide. Le taux de transfert théorique du réseau est élevé mais en pratique on ne s'en approche pas.
Il y a environ deux ans, j'ai eu des problèmes de disque dur sur mon ordinateur portable et le DMA est sorti. Cela a rendu le disque dur considérablement plus lent, et en particulier plus lent que le réseau. était de retour à mon état d'origine du disque dur plus rapidement qu'Internet.
Mon expérience avec les réseaux gigabit est, avec le bon serveur, que vous pouvez battre les performances locales en termes de débit et de latence. Voir Tests de réseau: obtenons-nous des performances Gigabit?
À toutes fins pratiques, je recommanderais de traiter le stockage réseau et local comme équivalent et d'utiliser uniquement des caches de mémoire.
La mise en garde standard, comme vous l'avez mentionné, est vraie car il n'y a pas de règles générales; et qu'en fait, la plupart du temps, il faut travailler avec des serveurs bien configurés et utiliser des mesures pour évaluer la meilleure méthode de transfert de données.
Si vous utilisez une machine bas de gamme avec un disque dur lent, il sera presque certainement plus rapide d'utiliser une connexion réseau gigabit à un serveur avec une matrice de stockage rapide.
De même, si vous travaillez avec deux machines de matériel presque identique, la latence et la surcharge du réseau rendraient le stockage local plus rapide; c'est vraiment du bon sens.
Ça dépend. Si vos E/S sont principalement à accès aléatoire, alors son débit plat n'est probablement pas si grand par rapport à la bande passante réseau qui pourrait être disponible. Cependant, la plupart du trafic réseau est finalement généré par des processus impliquant des E/S. Si l'ensemble de travail du processus qui génère le trafic réseau tient dans le cache, il ne sera pas limité par la bande passante du disque. S'il écrase le cache, le disque deviendra un goulot d'étranglement.
Je travaille sur des systèmes d'entrepôt de données et la requête DW canonique est une analyse de table. Si votre requête atteint plus de quelques pour cent des lignes de la table de faits (ou partition), une analyse de table ou de partition utilisant des E/S séquentielles sera plus efficace qu'un plan de requête à accès aléatoire utilisant des recherches et des recherches d'index.
Le stockage en réseau (c'est-à-dire les SAN) a tendance à ne pas bien fonctionner sur les charges de travail en streaming à moins qu'il ne soit réglé correctement. Si le SAN est utilisé pour un environnement de consolidation à usage général, il sera presque certainement réglé de manière sous-optimale pour un streaming, une charge épineuse comme un entrepôt de données. J'ai vu un livre blanc de fournisseur suggérer que vous avez besoin d'environ 3 fois le nombre de disques pour obtenir le même débit sur un SAN qui n'est pas réglé pour le streaming des E/S que pour celui qui l'est.
Mon expérience correspond à cela. En fait, je n'ai jamais déployé un entrepôt de données sur un environnement de consolidation où je ne pouvais pas exécuter le même processus ETL beaucoup plus rapidement sur mon ordinateur de bureau. J'ai également eu des représentants commerciaux d'un grand fournisseur de SAN équipement dit officiellement que beaucoup de leurs clients utilisent le stockage à connexion directe pour le système DW parce que les SAN ne sont pas '' t assez rapide.
Le stockage en réseau est au moins un ordre de grandeur plus cher par IOPS que le stockage à connexion directe pour les charges de travail à accès aléatoire et plus proche de deux ordres de grandeur plus cher pour le streaming.
L'expérience que j'ai avec cela est que lorsque vous êtes sur une connexion 1 Gbit et que vous essayez de télécharger un fichier, votre disque dur est généralement le goulot d'étranglement. Une chose que vous devez garder à l'esprit est que vous devez d'abord établir une connexion, ce qui prend également du temps. Ainsi, l'envoi de gros morceaux de réseau de données peut être plus rapide que le disque.
Oui, en général, les réseaux sont désormais plus rapides que les disques durs, mais cela peut changer avec le temps.
je pense, donc je le suis
Lorsqu'une application est en cours d'exécution, cela signifie que la machine hôte fonctionne, tandis que le travail sur le réseau nécessite un protocole commun, la vérification de la disponibilité des pairs, la sécurité des canaux ... et si les pairs utilisent différentes plates-formes, il est plus difficile de réaliser ce que vous pouvez faire sur un machine unique.
Je préfère regarder cela en termes de compromis plutôt que de savoir qui est le plus fort ...
Vous devez décrire un cas d'utilisation exact pour cette comparaison. Les disques durs ont le temps de recherche + le taux de transfert et le cache. Les réseaux ont une latence, un taux de transfert et une surcharge de protocole ...
Je pense que votre mémoire cache d'origine> mémoire> disque> réseau est toujours vraie en général
Personnellement, je pense qu'il y a plusieurs facteurs à considérer. Par exemple, à quelle vitesse la mémoire ou le disque auquel vous accédez localement est-il celui auquel vous accéderiez via le réseau? Si les données distantes étaient sur un SSD très rapide et plus rapide que la mise en réseau Gigabit installée de bout en bout, la télécommande pourrait être plus rapide pour les gros fichiers en streaming.
Cependant, si vous accédiez au hasard à de petites unités de données et que le réseau n'était pas sans faille ou avait de nombreux sauts et plus que simplement vous y accédez, je parierais qu'un cache local est plus rapide même sur un lecteur de disque entièrement mécanique presque 100 % du temps. Mais vous soulevez un point intéressant et combien de temps aura besoin de stockage local de quoi que ce soit si les vitesses du réseau continuent de croître?
Eh bien, il y a Light Peak qui vise une vitesse de réseau de 100 Go/s, qui se rapproche de RAM vitesses. Bien sûr, le réseau ne peut fournir des données aussi rapidement que le l'expéditeur peut générer les données, c'est-à-dire que si l'expéditeur lit les données à partir d'un disque dur, le récepteur n'obtiendra les données qu'à la même vitesse que la lecture du disque, même avec un réseau ultra-rapide.
Le disque est connecté au CPU via SCSI, SAS ou IDE. Ce qui est un réseau interne exécutant un protocole spécifique - SCSI ou ATAPI. Ethernet est conçu pour travailler sur de plus longues distances et peut être beaucoup plus lent que SAS/SCSI/IDE. Laquelle est donc plus rapide, dépend des technologies que vous comparez. Si vous comparez un disque dur d'ordinateur portable de 20 ans avec un 10 Gbit/s en RAM stockage, le gagnant sera toujours la mise en réseau. Et lorsque vous achetez un stockage, vous devez le comparer avec le prix et la facilité de gestion.
Une chose à garder à l'esprit est que cela dépend du réseau. Supposons, par exemple, que vous soyez responsable des performances sur un site Web. Ce site Web est bien sûr connecté à un serveur de base de données sur un réseau local, et est également connecté à des internautes sur Internet, qui est également une sorte de réseau.
Dans de nombreux cas, une liaison dédiée peut être établie entre le serveur Web et le serveur de base de données via des adresses IP statiques et un câble croisé ou automdx pour réduire la latence et fournir un lien dédié pour le trafic, car vous voulez qu'il soit très rapide. Le serveur de base de données effectue toutes sortes de travaux pour conserver autant de la base de données que possible en mémoire et, dans de nombreux cas, réussit souvent pour tout le contenu plus quelques index. Les requêtes vers cette base de données seront tout aussi rapides, voire plus rapides que les requêtes sur disque.
En revanche, certaines technologies Web (asp.net webforms viewstate, je vous regarde) aiment pousser beaucoup d'informations vers et depuis le navigateur Web client sous forme de cache (en quelque sorte). S'il s'agit d'une connexion LAN locale (et dans la défense du formulaire Web asp.net, cela est vrai la plupart du temps), ce n'est pas si mal, mais sur Internet public, cela peut absolument tuer les performances, de sorte que vous il est souvent préférable de le déplacer vers une base de données ou un disque local.