Table des matières[Cacher][Montrer]
- 1. Qu'entendez-vous par conception de système ?
- 2. Quelles sont les caractéristiques les plus importantes d'un concepteur de système ?
- 3. Qu'est-ce que le théorème CAP ?
- 4. Qu'entendez-vous par équilibrage de charge ?
- 5. Quelle est la différence entre la programmation asynchrone et la programmation parallèle ?
- 6. Quelle est la différence entre la mise à l'échelle horizontale et verticale ?
- 7. Qu'entendez-vous exactement par latence, débit et disponibilité du système ?
- 8. Quelles sont les propriétés ACID ?
- 9. Qu'est-ce que le sharding exactement ?
- 10. Qu'est-ce que CDN ?
- 11. Pourquoi utiliser CDN ?
- 12. Quelle est la différence entre le sharding et le partitionnement ?
- 13. Qu'est-ce que la mise en cache exactement ?
- 14. Que sont les serveurs de périphérie CDN ?
- 15. Quels sont les différents modèles de cohérence pour la conception de systèmes ?
- 16. Qu'entendez-vous par verrouillage optimiste ?
- 17. Qu'entendez-vous exactement par « élection du chef » ?
- 18. Quelle est votre approche pour concevoir un service de raccourcissement d'URL de type TinyURL ?
- 19. Quelle est votre approche pour concevoir Twitter ?
- 20. Créer le système de fil d'actualité pour Facebook
- 21. Qu'est-ce que la propriété BASE d'un système ?
- 22. Qu'est-ce que l'équilibrage de charge avec la technique d'affinité d'adresse IP ?
- 23. Que sont exactement les algorithmes de remplacement de cache (ou politique d'éviction) ?
- 24. Qu'entendez-vous exactement par transaction distribuée ?
- 25. Qu'est-ce que la famine exactement ?
- Conclusion
Avant de commencer, nous vous recommandons de lire notre guide d'introduction sur la conception de système pour rafraîchir vos connaissances fondamentales.
Lors d'un entretien pour un poste nécessitant des connaissances en conception de systèmes, vous avez la possibilité de parler de votre parcours et de démontrer votre capacité à développer des systèmes complexes.
Lorsque vous parlez avec un employeur potentiel, la façon dont vous exprimez votre expertise peut vous aider à démontrer que vous êtes un candidat compétent pour le poste.
Vous pouvez vous préparer à votre entretien d'embauche en apprenant les concepts de conception de base et en réfléchissant à la manière dont vous répondrez aux demandes de renseignements à leur sujet. Nous passerons en revue quelques questions et réponses d'entretien de conception de système typiques dans cet article pour vous aider à préparer votre prochain entretien.
1. Qu'entendez-vous par conception de système ?
Le processus d'établissement des caractéristiques du système, y compris les modules, l'architecture, les composants et leurs interfaces, et les données basées sur des critères prédéterminés est connu sous le nom de conception du système.
C'est le processus de définition, de création et de conception de systèmes pour répondre aux buts et objectifs spécifiques d'une entreprise ou d'une organisation. La conception du système concerne davantage l'analyse du système, les modèles architecturaux, les API, les modèles de conception et le collage du tout que le codage.
2. Quelles sont les caractéristiques les plus importantes d'un concepteur de système ?
- Interaction de l'utilisateur
- Appel d'API externe
- Processus hors ligne
3. Qu'est-ce que le théorème CAP ?
Selon le théorème CAP (Consistency-Availability-Partition Tolerance), un système distribué ne peut pas assurer C, A et P en même temps. Il ne peut délivrer que deux des trois assurances au maximum. Utilisons un système de base de données distribué pour nous aider à comprendre cela.
- Cohérence : Cela spécifie que les données doivent rester cohérentes une fois qu'une transaction de base de données est terminée. Par exemple, toutes les requêtes doivent renvoyer la même réponse après une mise à jour de la base de données.
- Disponibilité : Les bases de données doivent être disponibles et réactives à tout moment.
- Tolérance de partition : même si la communication devient problématique, le système de base de données doit continuer à fonctionner.
4. Qu'entendez-vous par équilibrage de charge ?
L'équilibrage de charge est le processus de dispersion efficace du trafic entrant parmi un ensemble de serveurs principaux. Ceux-ci sont appelés pools de serveurs. Les sites Web modernes sont conçus pour gérer des millions de requêtes des clients et y répondre rapidement et de manière fiable. Plus de serveurs seront nécessaires pour gérer ces demandes.
Dans ce cas, il est essentiel de répartir efficacement le trafic des requêtes entre chaque serveur pour éviter de les surcharger. L'équilibreur de charge fonctionne comme un agent de la circulation, interceptant les requêtes et les acheminant entre les serveurs disponibles afin qu'aucun serveur ne soit surchargé, ce qui pourrait dégrader les performances des applications.
5. Quelle est la différence entre la programmation asynchrone et la programmation parallèle ?
Lorsque vous exécutez quelque chose de manière asynchrone, cela implique que vous n'avez pas à attendre qu'il se termine avant de pouvoir passer à autre chose. Le parallélisme fait référence à l'exécution simultanée de plusieurs tâches.
Lorsque vous pouvez diviser les tâches en différentes tranches de travail, le parallélisme fonctionne efficacement. Async et Callbacks sont un moyen (outil ou mécanisme) de représenter la concurrence, c'est-à-dire un groupe d'entités qui pourraient communiquer et partager des ressources.
6. Quelle est la différence entre la mise à l'échelle horizontale et verticale ?
L'ajout d'un nouvel équipement informatique à un réseau qui répartit la demande de traitement et de mémoire sur un réseau dispersé d'appareils est appelé mise à l'échelle horizontale. En termes simples, de nouvelles instances de serveur sont ajoutées au pool actuel et la charge de trafic est efficacement répartie entre ces appareils.
La mise à l'échelle verticale fait référence à la notion d'expansion de la capacité des ressources d'un seul ordinateur en ajoutant de la RAM, des processeurs efficaces ou en migrant vers une nouvelle machine avec une plus grande capacité. La fonctionnalité du serveur peut être augmentée sans nécessiter de modifications de programmation.
7. Qu'entendez-vous exactement par latence, débit et disponibilité du système ?
La performance est un aspect essentiel de la conception du système car elle contribue à la rapidité et à la fiabilité de nos services. Les trois mesures de performance les plus importantes sont les suivantes :
- Le temps nécessaire pour livrer un seul message en millisecondes s'appelle la latence.
- La quantité de données transférées avec succès via un système au cours d'une période donnée est appelée débit. Des bits par seconde sont utilisés pour le mesurer.
- La durée pendant laquelle un système est disponible pour réagir aux requêtes est définie par sa disponibilité. System Uptime / (System Uptime+Downtime) est la formule pour le calculer.
8. Quelles sont les propriétés ACID ?
- Atomicité : elle garantit que les modifications de la base de données sont toutes ou aucune.
- Cohérence : les valeurs des données dans la base de données sont cohérentes.
- Isolement : Il fait référence à la séparation de deux transactions.
- Durabilité : Les données sont conservées même en cas de panne du serveur.
9. Qu'est-ce que le sharding exactement ?
Le sharding est la technique consistant à diviser un énorme ensemble de données logiques en plusieurs bases de données. Il fait également référence au fractionnement horizontal des données car les données seront stockées sur plusieurs ordinateurs. Par conséquent, une base de données partagée peut gérer plus de requêtes qu'un seul ordinateur énorme.
10. Qu'est-ce que CDN ?
Un réseau de diffusion de contenu est un réseau mondial d'ordinateurs qui collaborent pour fournir rapidement des informations sur Internet. Il permet la livraison rapide d'éléments tels que des pages HTML, des fichiers JavaScript, des feuilles de style, des images et des vidéos nécessaires au chargement du contenu Internet.
11. Pourquoi utiliser CDN ?
- Étant donné que les ressources statiques représentent environ 80 % d'un site Web, l'adoption d'un CDN réduit considérablement la pression sur le serveur d'origine.
- Comme il y a moins de distance à parcourir, les informations seront fournies plus rapidement aux propriétaires de sites Web qui ont des visiteurs provenant de nombreuses zones géographiques.
- Les utilisateurs de CDN bénéficient également de la capacité d'évoluer rapidement vers le haut et vers le bas en réponse aux pics de trafic.
12. Quelle est la différence entre le sharding et le partitionnement ?
Partage de base de données - Le partage de base de données est une méthode de partitionnement d'un seul ensemble de données en plusieurs bases de données afin qu'il puisse être stocké sur différents postes de travail. Les ensembles de données plus volumineux peuvent être divisés en blocs plus petits et stockés dans plusieurs nœuds de données, ce qui augmente la capacité de stockage totale du système.
En répartissant les données sur plusieurs machines, une base de données partagée peut gérer plus de requêtes qu'un seul système.
Le partitionnement de base de données est le processus de division des objets de base de données stockés (tables, index et vues) en éléments distincts. Pour augmenter la contrôlabilité, les performances et la disponibilité, les objets de base de données volumineux sont partitionnés.
Dans certains cas, le partitionnement peut améliorer la vitesse d'accès aux données partitionnées. Le partitionnement peut réduire la taille de l'index et augmenter les chances de localiser les index les plus nécessaires en mémoire en agissant comme une colonne principale dans les index.
13. Qu'est-ce que la mise en cache exactement ?
La mise en cache est la technique consistant à conserver des copies de fichiers dans une zone de stockage temporaire appelée cache, ce qui accélère l'accès aux données et réduit la latence du site. Seule une certaine quantité de données peut être stockée dans le cache.
Par conséquent, il est essentiel de déterminer les techniques de mise à jour du cache les plus adaptées aux objectifs commerciaux.
14. Que sont les serveurs de périphérie CDN ?
Les serveurs CDN qui mettent en cache le matériel acquis à partir de votre serveur d'origine ou de votre cluster de stockage sont appelés serveurs de périphérie. Le point de présence est un terme fréquemment utilisé pour décrire les serveurs Edge (POP).
Les serveurs périphériques sont physiquement positionnés sur un POP. Au niveau de ce POP, les informations peuvent être mises en cache par de nombreux serveurs périphériques.
La possibilité de fournir des sections d'un site Web à partir de plusieurs endroits réduit la distance entre le visiteur et le serveur Web, ce qui réduit la latence. Les serveurs de périphérie CDN accomplissent cet objectif précis.
15. Quels sont les différents modèles de cohérence pour la conception de systèmes ?
Chaque demande de lecture doit récupérer les données les plus récemment écrites, selon le théorème CAP. Lorsque de nombreuses copies de données sont accessibles, les synchroniser afin que les clients reçoivent en permanence de nouvelles données devient une difficulté. Voici les modèles de cohérence possibles :
- Cohérence faible : Suite à une écriture de données, la requête de lecture peut ou non être en mesure d'obtenir les données mises à jour. Ce niveau de stabilité est idéal pour les applications en temps réel telles que la VoIP, le chat vidéo et les jeux multijoueurs.
- Cohérence éventuelle : les lectures afficheront éventuellement les données les plus récentes en quelques millisecondes après l'écriture des données. Les données sont dupliquées de manière asynchrone dans ce cas. Les systèmes DNS et de messagerie en sont des exemples. Cela fonctionne efficacement dans les systèmes à haute disponibilité.
- Cohérence forte : suite à une écriture de données, les futurs lecteurs verront les données les plus récentes. Les données sont copiées de manière synchrone dans ce cas. Cela peut être observé dans les RDBMS et les systèmes de fichiers, qui sont appropriés pour les transferts de données.
16. Qu'entendez-vous par verrouillage optimiste ?
Le verrouillage optimiste est un mécanisme dans lequel vous lisez un enregistrement, notez un numéro de version (les autres méthodes incluent des dates, des horodatages ou des sommes de contrôle/hachages), puis vérifiez que la version n'a pas changé avant de la réécrire.
Lorsque vous réécrivez l'enregistrement, vous utilisez la version pour filtrer la mise à jour afin de vous assurer qu'elle est atomique. (c'est-à-dire, n'a pas été modifié entre le moment où vous vérifiez la version et celui où vous écrivez l'enregistrement sur le disque) et mettez-le à jour en une seule fois.
17. Qu'entendez-vous exactement par « élection du chef » ?
Dans un système distribué avec de nombreux serveurs contribuant à la disponibilité de l'application, il peut arriver qu'un seul serveur soit responsable de la mise à jour des API tierces, car plusieurs serveurs peuvent causer des problèmes lors de l'utilisation des API.
Ce serveur est appelé serveur principal et la procédure de sélection est connue sous le nom d'élection du leader. Lorsque le serveur leader échoue dans un système distribué, les serveurs doivent remarquer l'échec et choisir un nouveau leader. Utilisant une technique de consensus, cette approche est la mieux adaptée aux applications à haute disponibilité et à forte cohérence.
18. Quelle est votre approche pour concevoir un service de raccourcissement d'URL de type TinyURL ?
TinyURL transforme une URL longue en une URL courte unique et unique. Ces technologies peuvent également accepter une URL courte et renvoyer l'URL complète.
Quelles sont certaines des qualités essentielles?
- Créez une URL plus courte que l'original.
- Conservez l'URL la plus longue et remplacez-la par la plus courte.
- Autoriser la redirection dans les URL courtes.
- Les URL courtes avec des noms personnalisés sont prises en charge.
- Traitez plusieurs demandes à la fois.
Quels sont les problèmes les plus courants ?
- Comment effectuez-vous le suivi du stockage de la base de données ?
- Que se passe-t-il si la charge utilisateur dépasse les attentes ?
- Que se passe-t-il si deux personnes utilisent la même URL personnalisée ?
Considérez les suggestions suivantes :
- Le hachage est une notion qui peut être utilisée pour connecter les anciennes et les nouvelles URL.
- API REST peut être utilisé pour gérer la communication frontale et équilibrer la lourde charge.
- Le multithreading est une notion qui permet de traiter plusieurs requêtes à la fois.
- Les URL d'origine sont stockées dans des bases de données NoSQL.
19. Quelle est votre approche pour concevoir Twitter ?
Exigences données :
- Envoi de tweets
- Suivre d'autres utilisateurs
- Flux de tweet/fil d'actualité
- Le système est évolutif
- Se charge rapidement
- Le système est fiable
Vous pouvez commencer à réfléchir à la conception de votre API Twitter lorsque vous avez établi les critères. Voici comment cela apparaîtrait :
Pour commencer, nous allons esquisser les principaux points de terminaison de l'API. Voici quelques exemples:
- envoyerTweet(message)
- suivre l'utilisateur (ID utilisateur)
- ne plus suivre l'utilisateur (ID utilisateur)
- obtenirFlux(page)
L'architecture qui permettra ces caractéristiques peut alors être esquissée. Nous pouvons commencer par l'utilisateur qui soumet une demande de serveur. Nous pouvons installer des serveurs d'API supplémentaires derrière un équilibreur de charge pour aider à acheminer des niveaux de trafic plus importants afin de répondre au besoin d'évolutivité. Nous devrons ajouter une base de données pour stocker nos tweets maintenant.
Il est important de se rappeler que l'API que nous fournissons doit être évolutive. Pour rendre ce service évolutif, nous pouvons faire lire l'un de nos serveurs API à partir d'un cache séparé pour notre fil d'actualité. Ce faisant, nous devons également utiliser un fournisseur de flux pour maintenir notre cache de flux à jour.
20. Créer le système de fil d'actualité pour Facebook
Le fil d'actualité sur Facebook permet aux utilisateurs de voir ce qui se passe dans les cercles de leurs amis, les pages préférées et les organisations qu'ils ont suivies.
Quelles sont certaines des caractéristiques essentielles?
- Créez un fil d'actualité basé sur les publications d'autres entités système suivies par l'utilisateur.
- Le texte, les images, l'audio et la vidéo peuvent tous être utilisés dans les publications du fil d'actualité.
- En temps réel, ajoutez du nouveau contenu au fil d'actualité de l'utilisateur.
Quels sont les problèmes les plus courants ?
- Que se passe-t-il si le nouveau message met longtemps à apparaître dans le fil d'actualité ?
- L'algorithme peut-il gérer un pic d'activité des utilisateurs ?
- Quels messages doivent être affichés en premier dans le fil d'actualité ?
Considérez les suggestions suivantes :
- Examinez le mécanisme de déploiement pour distribuer les publications aux abonnés.
- Examinez comment le partitionnement peut être utilisé pour gérer efficacement des charges d'utilisateurs élevées.
- Les données de flux d'un utilisateur ne doivent pas être dupliquées sur plusieurs serveurs. Le partitionnement peut à la place être effectué sur la base des ID utilisateur.
21. Qu'est-ce que la propriété BASE d'un système ?
Les fonctionnalités BASE sont omniprésentes dans les bases de données NoSQL qui ont récemment émergé. Un système BASE ne fournit pas de cohérence, selon le théorème CAP. Il s'agit d'un acronyme inventé qui correspond à la propriété suivante du théorème CAP d'un système :
- Le terme « essentiellement disponible » signifie que le système sera disponible à tout moment.
- Un état souple signifie que l'état du système peut varier dans le temps, même si aucune entrée n'est fournie. Cela est principalement dû à la cohérence éventuelle du modèle.
- Étant donné que le système ne reçoit pas d'entrée pendant cette période, la cohérence éventuelle signifie que le système deviendra cohérent au fil du temps.
22. Qu'est-ce que l'équilibrage de charge avec la technique d'affinité d'adresse IP ?
Une autre méthode importante d'équilibrage de charge est l'affinité d'adresse IP. L'adresse IP du client est connectée à un nœud de serveur dans cette méthode. Un nœud de serveur gère toutes les demandes provenant d'une adresse IP client.
Cette méthode est simple à mettre en œuvre car l'adresse IP est toujours accessible dans l'en-tête de la requête HTTP et aucun autre paramètre n'est requis. Si vos clients sont susceptibles d'avoir des cookies désactivés, cette forme de répartition de charge peut être avantageuse.
23. Que sont exactement les algorithmes de remplacement de cache (ou politique d'éviction) ?
Les algorithmes de cache (également appelés algorithmes de remplacement de cache, politiques de remplacement de cache ou politiques d'éviction de cache) sont des instructions d'optimisation, ou algorithmes, qu'un programme informatique ou une structure gérée par le matériel peut utiliser pour gérer un cache de données stockées sur l'ordinateur.
La mise en cache augmente la vitesse en stockant les données récemment utilisées ou souvent consultées dans des régions de mémoire dont l'accès est plus rapide ou moins coûteux que le stockage de mémoire traditionnel. Lorsque le cache est plein, l'algorithme doit décider quels éléments supprimer afin de faire de la place aux nouveaux.
24. Qu'entendez-vous exactement par transaction distribuée ?
Une transaction distribuée est toute circonstance dans laquelle un événement unique provoque la modification de deux ou plusieurs sources de données distinctes qui ne peuvent pas être validées de manière atomique.
Cela devient beaucoup plus compliqué dans le monde des microservices puisque chaque service est une unité de travail, et la plupart du temps de nombreux services doivent collaborer pour faire réussir une entreprise.
25. Qu'est-ce que la famine exactement ?
Lorsqu'un thread est incapable d'acquérir un accès régulier aux ressources partagées, on dit qu'il est affamé. Cela se produit lorsque des threads "gourmands" ou des threads avec une "priorité" plus élevée rendent les ressources partagées inaccessibles pendant de longues périodes.
Considérez un objet qui fournit une méthode synchronisée qui revient fréquemment en retard. Si un thread appelle cette méthode à plusieurs reprises, d'autres threads qui nécessitent un accès synchronisé fréquent au même objet seront souvent bloqués.
Conclusion
Une séance de remue-méninges est tout ce qu'implique l'entretien de conception du système. Nous avons abordé les questions d'entretien de conception de système les plus courantes dans cet article.
Une compréhension complète de la méthode que vous adoptez lors de la création d'un système spécifique est essentielle pour réussir un entretien de conception de système.
Soyez sympa! Laissez un commentaire