Pourquoi les grands sites utilisent-ils plusieurs serveurs au lieu d'un serveur avec de meilleures spécifications?


42

J'ai lu que Stack Overflow utilise 10 serveurs ou plus pour desservir le site Stack Overflow. Différents serveurs ont différentes fonctions telles que le proxy inverse, le serveur de base de données ou le serveur HTTP.

J'ai vu un serveur unique autonome puissant avec ces spécifications:

  • 2 x Xeon E5-2630v2 à 2,60 GHz, total 12 noyaux, 24 fils; 30 Mo
  • 64 Go ECC Reg. jusqu'à 768 Go de DDR3 à 1600 MHz
  • 4 séries Intel 520/530 de 120 Go (80 000 IOPS aléatoires, ~ 550 Mo / s)
  • HP iLo4 Advanced avec port de gestion Ethernet dédié.

Pourquoi ne pas utiliser un seul serveur avec des spécifications plus élevées, telles que 768 Go de RAM, 20 To + disque dur, 4+ x Xeon? Quels sont les avantages liés à l'utilisation de plusieurs serveurs ou les inconvénients liés à l'utilisation d'un seul serveur haute spécification?


4
SE a non seulement 10+ serveurs, mais une configuration en double dans un autre centre de données pour le basculement. Et, le serveur n'a pas encore été inventé pour gérer tout le trafic de Facebook ou de Google.
Michael Hampton

8
Que se passe-t-il lorsque vous devez redémarrer ce super serveur?
Liath

Redondance ... :)
William Edwards

1
Parallélisme ...
légèreté court avec Monica

1
@SSpoke: vous n'êtes pas limité à une connexion par port. Tout ce qui compte est que la combinaison de (adresse src, port src, adresse dst, port dst) soit unique.
David

Réponses:


58

Un seul serveur puissant ne peut être mis à niveau que jusqu'à présent. Une fois que vous disposez du serveur le plus puissant disponible, votre site ne peut pas se développer davantage sans le scinder entre les serveurs ou le rendre plus efficace.

Il y a aussi le facteur coût. Un serveur très puissant peut coûter dix fois plus cher que deux serveurs deux fois moins puissants. Vous voulez pouvoir acheter votre matériel au prix le plus bas et ne pas être bloqué dans un prix plus élevé, car c'est la seule solution qui fonctionnera.

La disponibilité et la fiabilité entrent également en jeu. Avec deux serveurs ou plus, un peut échouer ou être mis hors ligne pour maintenance et le site peut rester actif. Vous ne pouvez pas faire cela avec un seul serveur.

La plupart des grands sites Web utilisent des équilibreurs de charge et plusieurs serveurs. Je travaillais pour TripAdvisor. Ils ont publié un excellent article sur l'architecture de TripAdvisor et sur la manière dont ils la rendent hautement évolutive avec plusieurs serveurs.

Il est possible d'exécuter un service avancé sur un seul serveur. Un exemple que je connais est Mailinator. L'auteur a publié un article sur l'architecture de Mailinator . Il s’efforce de rendre son code plus efficace plutôt que d’acheter de nouveaux serveurs. Cela finit par être une limitation qui dicte le fonctionnement de son service. Il ne conserve le courrier que quelques heures avant que l’unique machine ne le supprime pour laisser de la place à d’autres.

La mise à niveau d'un seul serveur est appelée mise à l' échelle verticale . L'ajout de serveurs est connu comme une mise à l' échelle horizontale . Pour plus d'informations sur ce sujet, voici quelques articles qui comparent les deux:


9
Si vous avez plusieurs serveurs (plus que quelques-uns) et que certains processeurs meurent, vous avez les autres serveurs pour que tout continue à fonctionner. Si vous avez 1 serveur, et que pauses faites, vous avez terminé.
Martijn

2
Un autre point que les gens oublient est que ce n’est pas nécessairement une bonne chose de faire fonctionner un serveur à sa capacité maximale ou à sa proximité. Nous avons évalué nos serveurs à un télécom global (qui doit rester sans nom) à environ la moitié de sa capacité maximum en règle générale (pas de véritable logique derrière cela, il suffit de regarder des métriques). Vous commencez à avoir des problèmes avec la file d'attente de calcul, les sous-systèmes d'E / S, l'adressage et la permutation de mémoire, etc. à un moment donné, quelle que soit la capacité matérielle, tout simplement parce que l'équilibre entre les sous-systèmes peut générer des conflits en fonction du système d'exploitation. Il existe des systèmes robustes qui permettent plus.
closetnoc

@ closetnoc Je pense que la meilleure façon de le décrire est d'essayer d'éviter les goulots d'étranglement. Un système bien équilibré pourrait théoriquement fonctionner à 100% de sa capacité sans aucun effet secondaire, mais tout ce que le système doit attendre (temps processeur, E / S, transfert de bus, etc.) entraînera des problèmes de performances. En exploitant vos systèmes à une capacité maximale de moitié, vous avez trouvé un bon emplacement pour éviter de tels goulots d'étranglement.
Thebluefish

@Thebluefish Oui et non. Je suis un vieux gars du système interne. La plupart des systèmes ont des goulots d'étranglement dans le système d'exploitation et du matériel interne qu'il est impossible de compenser avec des raids plus rapides, de la mémoire, des processeurs, etc. De plus, le système d'exploitation a également des limites. Windows était plutôt bon car il était basé sur VMS, mais il y avait toujours des limites qui ne pouvaient pas être réglées comme VMS. Linux est évidemment meilleur. Certains serveurs sont conçus avec peu de limitations matérielles, telles que HP, ce que nous avons utilisé. Mais même dans ce cas, il n’est jamais bon d’exécuter une file d’attente à 100% de sa capacité en raison de l’augmentation du nombre d’interruptions et d’échanges de ressources processeur.
closetnoc

2
Un autre avantage de la mise à l'échelle horizontale: il n'y a pas assez d'électricité, de bande passante, de refroidissement, etc. que vous pouvez avoir sur un seul serveur. Netflix pourrait avoir une boîte avec une puissance de traitement et une mémoire infinies, mais cela ne leur servirait à rien sans un tuyau assez gros pour éliminer leur trafic.
Chris Hayes

32

Du contre-amiral Grace Hopper:

Sur la construction d’ordinateurs plus grands: "À l’époque des pionniers, ils utilisaient des bœufs pour tirer fort, et quand un bœuf ne pouvait pas bouger une bille, ils n’essayaient pas de faire pousser un plus gros bœuf. Nous ne devrions pas essayer de plus gros ordinateurs, mais pour plus de systèmes d'ordinateurs ".

la source


1
J'ai rencontré Grace Hopper à quelques reprises au début de ma carrière et j'ai passé du temps avec elle. Elle était vraiment quelque chose! Un chat cool! Nous l'aimions tous. Elle était si gentille et généreuse avec son temps et ses grâces (jeu de mots voulu). Bravo pour la citer! Un vote positif pour le retour. Merci!
closetnoc

5
Bien que cette citation soit pertinente, cela ne répond pas à la question. L'opinion non fondée d'une personne ne devrait pas être utile ici.
TankorSmash

7
@ NoahSpurrier Parce qu'il ne répond en réalité à aucune partie de la question? C'est juste une citation qui fait une analogie non corroborée et n'explique pas pourquoi nous devrions viser plus de serveurs.
Chris Hayes

2
Je dirais que c'est une réponse utile, mais ne devrait pas être acceptée comme LA réponse car elle ne détaille pas les raisons spécifiques. Cependant, il indique clairement la raison principale du principe de fractionnement de la charge.
Ian T. Small

1
@Bobson Je ne dis pas du tout qu'elle est une joueuse importante, je dis simplement que j'aimerais voir une réponse avec du contenu, au lieu d'une phrase ou deux qui sonnent bien.
TankorSmash

10

Stephen explique la considération majeure à prendre en compte lors du choix d'une architecture système: le compromis entre la mise à l'échelle verticale et horizontale. Je vais ajouter quelques autres considérations:

  • Séparation des problèmes: vous mentionnez plusieurs systèmes radicalement différents: les serveurs mandataires inversés, les bases de données, les serveurs de contenu, etc. Du point de vue de la maintenance et de la sécurité, il est clairement avantageux de laisser ces responsabilités réparties sur différents systèmes afin qu'ils puissent exécuter un système d'exploitation différent (version) si nécessaire, peut être mis à jour séparément et n'a pas d'incidence sur les autres services en cas de compromission.
  • Livraison de contenu: tel est l'objectif ultime d'un serveur Web et se prête bien à un modèle distribué. Les systèmes peuvent être dupliqués et répartis géographiquement de manière à minimiser la latence des connexions longue distance. Cela permet également la redondance . Les grands sites Web utilisent des équilibreurs de charge (encore un autre ensemble de serveurs!) Pour permettre le basculement automatique afin de maintenir le service opérationnel à tout moment.

Il existe en fait une classe de serveurs entière qui prend la mise à l'échelle verticale à un autre niveau: les ordinateurs centraux. Ils présentent de nombreux avantages (rapidité, fiabilité) et inconvénients (coût), mais ils sont généralement utilisés lorsque des quantités énormes de données doivent être traitées via le traitement entrée-sortie dans ce que nous appelons le traitement des transactions (pensez aux achats par carte de , élection et recensement). Les banques, par exemple, desservent des sites à partir de serveurs Web à échelle verticale, tandis que le back-end finissait par traiter les transactions via le système central.

Il est intéressant de noter que des sociétés telles que Paypal et Visa s'éloignent des systèmes centraux vers des systèmes en cluster de milliers de systèmes mis à l'échelle horizontalement. Dans un monde numérique en rapide évolution, même les ordinateurs centraux atteignent le plafond de la mise à l'échelle horizontale:

"Avec toutes les exigences de disponibilité et de performances, nous ne pouvions pas continuer à traiter les paiements sur les ordinateurs centraux,

Source: Adam Banks, dans ComputerWorldUK


8
  • Taille limite. Nous aimons prétendre qu’une seule boîte avec plusieurs processeurs, puces de mémoire et disques est uniforme. Ce n'est pas tout à fait vrai, mais c'est assez vrai si vos chiffres ne deviennent pas trop gros. Il existe des limites techniques à la chaleur, à l'énergie, à la proximité, etc., ce qui signifie qu'il y aura toujours une limite pratique à la taille d'un serveur.

  • Évolutivité: il existe une grande différence entre un système à serveur unique, utilisant la mémoire partagée pour IPC et un système à plusieurs serveurs utilisant la mise en réseau ou en cluster. Cependant, la différence entre deux serveurs et 200 est considérablement plus petite - si vous avez construit un système évolutif, vous pouvez le faire évoluer BEAUCOUP plus grand avant qu'il y ait un problème ... et si vous l'avez, alors vous n'avez pas besoin d'un énorme serveur unique. en premier lieu.

  • Résilience - Un serveur est un endroit qu'un administrateur peut "oups". Ou il y a un problème physique qui signifie que le service pour tout ce morceau d'étain est interrompu. (Une fuite d’eau dans un centre de données, une personne s’effondrant dans un rack et le renversant, ce genre de chose). Plusieurs serveurs peuvent être répartis dans un centre de données ou, mieux encore, géographiquement. Et si vous distribuez déjà votre application, la mise à l'échelle sur des machines de taille "moyenne" est presque toujours moins chère que la même quantité de CPU / mémoire / E / S sur un plus petit nombre de machines plus grandes.

  • Mises à jour - Si je corrige un serveur, cela peut rendre un service instable, nécessiter un redémarrage ou sinon, demander un temps d'indisponibilité. Si j'ai 4 serveurs exécutant la même chose, je peux en mettre un hors service pendant un certain temps pour le faire. Et laissez-le hors service si le cycle de correction / mise à jour se passe mal.


7

Prenons le problème à petite échelle. Un petit bureau avec un serveur exécutant la messagerie, ActiveDirectory, le partage de fichiers et le site Web de la société.

Les pirates informatiques ont frappé et vous devez redémarrer car IIS est gâché. Ou Exchange nécessite une mise à jour et un redémarrage. Ou Active Directory s'est corrompu.

N'importe lequel de ces problèmes isolés "un service est en panne" affecte l'ensemble du serveur. Tout partage sur ce serveur va donc les affecter du fait qu'il doit redémarrer ou autre chose.

Une fois qu'un véritable informaticien se présente et voit ce serveur, il recommandera de les séparer en plusieurs serveurs (et de disposer d'un serveur de contrôleur de domaine de secours).

C'est le vieil adage de "ne mettez pas tous vos œufs dans le même panier"

Maintenant, cette philosophie est appliquée aux serveurs Web. Si je n'ai qu'un seul serveur Web et que je publie mon application Web (le nouveau MyFaceLink.com) et que cela devient vraiment populaire, j'ai de nouveaux problèmes. Je ne peux pas démonter le site pour effectuer la maintenance tant que les utilisateurs y sont. Et si cela se bloque ou que je reçois trop d'utilisateurs, je suis fatigué. Même le plus gros serveur au monde sera submergé par 1 milliard de convertis FB.

Ainsi, l’équilibrage de charge entre en jeu, pour la même raison "oeufs dans le panier". Répartissez le site sur 3 serveurs et, en cas de panne, les 2 restants gèrent la capacité. Si j'ai besoin de faire des patchs, je n'en fais qu'un à la fois, et personne ne le remarque.

Au plus simple, il ne s'agit pas du prix du méga-serveur ni de la capacité réelle de ce dernier à gérer la charge (bien que cela puisse être). Il s'agit d'un seul point d'échec. Une fois que les affaires sont suffisamment occupées et qu’elles se déroulent 24h / 24, 7j / 7 au lieu de 5 utilisateurs travaillant 8h-5h, les temps morts ne sont pas acceptables. Les pannes programmées sont plus difficiles à programmer. Donc, vous répartissez la charge.


+1 pour nommer le problème du point de défaillance unique .
David Cary

1

Si l'on essaie de faire en sorte qu'une machine fasse le travail de deux, certaines parties de la machine devront être plus grandes mais fonctionner à la même vitesse, certaines peuvent rester de la même taille mais devront fonctionner plus vite et d'autres devront être plus grandes et plus vite. La mesure dans laquelle il est logique de combiner les rôles de petites machines en machines plus grandes ou de scinder les rôles de machines plus grandes en machines plus petites dépend en grande partie du type de mise à l'échelle qui s'appliquerait aux parties les plus coûteuses des machines. Si les charges de travail d'un trop grand nombre de machines sont combinées en un énorme colosse, les coûts seront alors dominés par des éléments qui devraient être plus importants et plus volumineux .plus rapide pour gérer des charges de travail accrues. Même si les coûts de ces choses étaient linéaires en termes de vitesse et de taille, doubler la charge de travail ferait plus que doubler le coût d'une machine pour la traiter. Le fait que la vitesse augmente au-delà d'un certain point entraîne une augmentation (beaucoup) supérieure aux coûts linéaires, ce qui amplifie l'effet.

Il n'y a pas vraiment de point fixe où la praticité impose une subdivision du travail; En fonction du type de travail à effectuer, une machine qui combine les charges de travail de deux peut se passer de deux fois plus de mémoire, voire moins de deux fois la vitesse. D'autre part, plus un ordinateur est chargé de tâches, plus la mémoire et la vitesse requises sont mises à évoluer de manière linéaire avec la charge de travail. Plus on va au-delà, plus le coût relatif augmente chaque fois que l'on double la charge de travail.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.