À quoi penser lors d'une entrevue NALSD

J'ai décrit une interview de codage typique plus tôt. En plus du codage, il y a presque toujours une question sur la conception du système. (Large) Conception du système. Dans le cas des interviews sur SRE, c'est une bête encore plus intéressante (pour moi) - NALSD. Conception de grands systèmes non abstraite. La principale différence entre SWE et SRE réside précisément dans ces lettres «NA».

Quelle est la différence et comment s'y préparer? Regardons un exemple. À titre d'exemple, nous prendrons quelque chose de très matériel, quelque chose que personne ne demandera jamais pour une vraie interview (dans Google) :)

Par exemple - concevons une bibliothèque. Pour les livres papier, l'habituel. Le texte ci-dessous a été écrit en une seule séance en une heure environ pour montrer à peu près ce que vous pouvez faire et ce qui est important à faire. Alors pardonnez-moi pour la confusion, mais je pense que oui (et donc existe).

Question NALSD: Concevoir une bibliothèque publique.


Premièrement, nous nous intéressons aux caractéristiques de la charge, ou nous faisons nous-mêmes une hypothèse raisonnable. Étant donné qu'il s'agit d'un système évolutif, il s'agit d'une ville d'au moins un million d'habitants. Cela vaut la peine d’envisager des options: un grand bâtiment ou des bibliothèques de quartier plus un espace de stockage. Il me semble que ce dernier est plus raisonnable. Surtout si ce n'est une ville, mais une ville.

Ainsi, nous nous concentrerons pour le moment sur le système d'une ville (avec quelques réserves, nous pouvons appliquer un mécanisme similaire à un niveau supérieur pour l'adaptation à de nombreuses villes). Ainsi, la ville compte un million d'habitants. Nous arrondissons les chiffres pour la commodité des estimations - qu'il y ait 1 million de lecteurs probables. Les lecteurs vont lire à tout moment indépendamment les uns des autres. Nous pouvons donc le comprendre comme un processus de Poisson simple. Mais il sera difficile de compter «sur le pouce» normalement, alors prenez une autre étape de simplification et prenez simplement que 1% des lecteurs voudront prendre un livre par jour. Au total, pour d'autres calculs, nous prenons 10 000 livres par jour.

Notre tâche est de fournir la possibilité de publier 10 000 livres par jour (et de retourner les mêmes 10 000 tous les autres jours à l'avenir, soit dit en passant) dans la ville d'un million et plus. À ce stade, la question de la mono-bibliothèque ou du quartier est déjà en train de disparaître (en passant, pour que le million entier soit des lecteurs potentiels, ils doivent pouvoir accéder à la bibliothèque dans un délai raisonnable, sinon le désir de prendre le livre tombera sûrement avec le temps mort). Nous devons donc évaluer la capacité de chaque bibliothèque locale. Il est juste de le faire en tenant compte de la densité de population et de l'accessibilité, mais comme cela n'affecte pas beaucoup le système lui-même, pour simplifier les calculs, imaginons que nous les plaçons uniformément. Mais cela ne signifie toujours pas comment nous pouvons les partager. De toute évidence, mettre 10 000 bibliothèques avec un livre uniformément dans la ville n'a pas de sens, vous devez donc comprendre ce qui a du sens. Nous partons au niveau inférieur.

Donc, une bibliothèque. Pour que cela ait du sens, la plupart de ceux qui viennent doivent trouver le livre dont ils ont besoin. Cela signifie que nous devrons conserver un enregistrement et des prévisions des requêtes les plus populaires et garder ces livres prêts. Ensuite, nous devons conserver l'assortiment en principe. D'un côté, je dirais qu'une bibliothèque locale devrait avoir au moins 1000 articles, les tout premiers en une multitude d'exemplaires, plus de haut, moins de queue. Le livre moyen dans notre bibliothèque est lu de 3 jours à 2 semaines (en fait, la caractéristique dépend du livre, une analyse séparée est requise ici), nous le prenons égal à la semaine moyenne et passons. Autrement dit, le livre pris est manquant pendant environ une semaine, donc les meilleurs livres doivent être stockés pendant une semaine (puis ils commenceront à se remettre des retours).

Prenons un facteur d'inflation moyen de 6. La capacité de stockage commence donc à 6 000 livres. Moins signifie que ce n'est qu'un petit sommet, ce qui peut encore aider dans certains cas (par exemple, une île avec «crépuscule» dans un supermarché près de la salle de jeux pour enfants), mais nous allons le laisser dehors pour l'instant.

Dans l'état «d'équilibre», ils reviennent et prennent environ également une journée, plus ou moins la dispersion, mais nous avons encore besoin de la capacité d'accepter un nombre accru de pics de retours (par exemple, en raison d'une synchronisation externe comme les vacances ou un changement de mode). C'est vrai - pour simuler. Mais ici et maintenant, nous en prendrons un troisième comme tampon. Au total, nous soutenons 6 000 livres disponibles pour publication, plus une place pour 2 000 autres livres en réserve.

Nous avons donc besoin d'une unité pouvant stocker 8 000 livres. Le réapprovisionnement quotidien est très coûteux, ce qui signifie qu'il dure une semaine ou deux. Deux semaines, 6 000 livres, avec un biais dans les retours, c'est environ 300 par jour. Au moment de l'ouverture, nous pouvons marquer les 8000 livres afin de créer les 2000 premiers en circulation avant les premiers retours. 2000 pendant 3 jours = environ 600 livres par jour, plus tampon = 800 livres par jour.

Estimons la bande passante et les limites de stockage. Un livre prend en moyenne 2 centimètres d'espace linéaire, 8000 livres - 160 mètres. tourner 4 fois verticalement, 40 mètres. On se divise même en racks de 5 mètres, on obtient 8 racks de 4 étagères de 5 mètres de long. Un bibliothécaire (ou un robot-bibliothécaire) pourra travailler avec deux racks, l'extraction d'un livre prendra jusqu'à 5 secondes pour l'atteindre, 5 secondes pour sortir ou mettre le livre, 5 secondes en arrière, pour un total de 15 secondes. 4 bibliothécaires nous fourniront environ 15 livres par minute maximum, soit 900 livres par heure environ depuis l'entrepôt.

Nous ajoutons du temps pour traiter la demande (10s), rechercher (5s), entrer dans le système de réception et d'émission (2s) => 400 livres par heure. Ainsi, le stockage à son apogée peut émettre-accepter 400 livres par heure, donc 800 livres par jour sont accessibles en 2 heures de travail.

Maintenant, nous considérons d'autres caractéristiques: pour distribuer 400 livres par heure à 4 personnes, il est nécessaire d'accueillir 100 personnes dans la salle d'attente dans une file d'attente devant la fenêtre de traitement, et pour que ces personnes ne créent pas de foule à l'entrée et à la sortie. Autrement dit, le groupe d'entrée doit passer 400 personnes par heure dans les deux sens. Il s'avère que le limiteur principal ne sera même pas le stockage, mais la capacité du hall et du groupe d'entrée.

Cela signifie qu'il sera possible de trouver le ratio optimal de stockage et de hall avec des calculs plus précis.

Ainsi, avec l'unité triée, nous revenons au niveau supérieur. Nous avons estimé la charge totale de la bibliothèque à environ 10 000 livres par jour, nous avons compté une unité à 800 livres par jour, c'est-à-dire que nous avons besoin de 12,5 unités. Avec la géo-distribution autour de la ville, une ou deux unités alternatives (aux frontières de la ville) ou même 3-4 (à l'intérieur) seront accessibles à chaque lecteur, ce qui vous permet de lisser légèrement les pics de trafic et / ou la demande accrue pour des positions spécifiques.

Nous savons également qu'à tout moment, toute bibliothèque peut être fermée (incendie, inspection sanitaire, peinture des poignées des réfrigérateurs ou autre), avec une augmentation du nombre d'entre eux, la probabilité que deux tombent en panne coïncide, nous avons donc besoin d'une unité de rechange pour toutes les 5-6 unités. Au total, 15 unités doivent assurer les performances requises, à condition de maintenir le stock estimé dans leurs entrepôts.

Pour maintenir le stock estimé, nous devrons mettre à jour une fois par semaine ou deux (nous pensions plus de deux) environ la moitié de l'assortiment pour suivre les tendances et ainsi de suite. Cela signifie que chaque unité doit transporter et exporter 4 000 livres toutes les deux semaines. À chaque importation et exportation, ces mêmes 4 000 livres doivent être retirés du référentiel, puis d'autres y sont placés. À 400 livres par heure, la mise à jour de l'assortiment prendra 10 heures à pleine charge. Ce qui, semble-t-il, n'est toujours pas si mal, encore une fois, avec le chargement en masse, beaucoup de choses iront plus vite, cependant, maintenir l'assortiment prend 5 fois plus que de travailler avec la population.

Le livre moyen (2 cm * 20 cm * 30 cm) est d'environ 1,5 l, soit 4000 livres = 6 mètres cubes. Il s'insère facilement dans une gazelle. Le poids d'un mètre cube de papier est de 600 kg, soit 6 mètres cubes soit 3,6 tonnes. La capacité de charge de la gazelle est d'une tonne et demie, donc trois gazelles seront nécessaires. Plus une sauvegarde. Nous avons 15 unités, mises à jour toutes les 2 semaines, avec une distribution uniforme nous sommes à la limite, nous devons ajouter une autre gazelle.

Et nous n'avons pas eu le temps de réfléchir d'où et d'où ces gazelles étaient transportées, donc les entrepôts des fournisseurs et les points de déchargement des livres qui ont perdu leur pertinence apparaissent sur le schéma ...

Le temps est donc écoulé. Qu'est-ce qui est si anormal dans la question NALSD? Évolutivité, il doit être dans n'importe quelle conception de grand système. L'essentiel est le concret .

J'ai fait beaucoup d'hypothèses et d'hypothèses ci-dessus, mais toutes les estimations ultérieures étaient basées sur les précédentes. Pour les chiffres, j’ai aussi essayé de donner «comment évaluer correctement», cependant, il est très facile d’oublier de le faire, on se fatigue et on l’oublie. Il est encore très facile de s'en tenir à un certain nombre de la mémoire, sans explication ... Mais puisque la conception est concrète, si l'une des hypothèses se révèle erronée, elle peut être corrigée et juste racontée plus tard.

Si je me souviens bien, dans mon entretien avec les estimations, j'ai pris un IOPS d'un disque de 600, simplement parce que je l'ai récemment optimisé et travaillé avec un tableau, où _array_ a donné 600 IOPS ... L'interviewé m'a alors demandé un peu de surprise - 600 IOPS sur disque? : D

Pendant l'entretien, l'intervieweur peut corriger n'importe laquelle de vos hypothèses. Ou ajoutez une sorte de restriction (que vous ne connaissiez pas, à laquelle vous n'avez pas pensé, que vous n'avez pas demandé, ou simplement le changement habituel de savoirs traditionnels à la volée). Dans le même temps, puisque vous travaillez exclusivement avec des numéros spécifiques, ce ne sera qu'une mise à jour triviale des numéros.

Si l'ajustement de l'hypothèse entraîne une refonte du système, il s'agit soit d'une erreur de conception, soit d'un ajustement incorrect, soit d'aller au-delà de l'applicabilité du système, ce qui n'est pas non plus une situation rare dans la vie réelle. Il est important de ne pas manquer de tels moments et d'évaluer les chiffres reçus pour la réalité à la fois pendant la phase de conception et avec tous les ajustements.

En tant que SRE, nous sommes obligés de penser en termes de mise à l'échelle de systèmes réels dans les limites réelles d'un matériel réel. Il existe peut-être un merveilleux algorithme qui échange d'énormes coûts de temps pour une petite quantité de mémoire ... Mais tout de même, vous ne pouvez pas mettre un pétaoctet de RAM sur un cœur de processeur dans des conditions réelles. Donc, si nous avons un pétaoctet de RAM, nous avons au moins dix mille processeurs. Ou vingt. Ou trente. Et nous devons chercher l'optimum, non pas global, mais ici et maintenant, dans les conditions données.

Vous n'avez pas besoin de vous souvenir des chiffres exacts, mais vous devez avoir une idée de l'ordre: le même IOPS, que le disque dur a environ une centaine, et le SSD a des centaines de milliers. Mais ces centaines de milliers vont de pair avec un rapport du coût d'un téraoctet de disque dur au coût d'un téraoctet de SSD de un sur trois à quatre. Et cela ne compte pas le harnais - une place dans le rack, des lames pour eux, des ports sur les commutateurs et d'autres choses qui cessent d'être un sou lorsque la facture passe à des pétaoctets.

Détendez-vous un peu sur votre chaise, détendez-vous et essayez de concevoir un système pour fournir des œufs de poule frais par abonnement.

S'il y a un désir de partager avec des collègues anglophones, il existe une option en anglais (ainsi qu'en anglais hub ).

Source: https://habr.com/ru/post/fr435898/


All Articles