>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Unknown

Aide-mémoire de conception de systèmes en 28 chapitres pour ceux qui ne veulent pas lire les deux volumes d'Alex Xu

Il y a quelques années, je me souviens m'être assis pour préparer un entretien de conception de systèmes. Vous ouvrez le populaire livre en deux volumes d'Alex Xu « System Design Interview » et vous réalisez qu'il contient près de mille pages. Vous avez généralement une semaine, au maximum deux, avant l'entretien, et votre tête tourne déjà à cause de l'abondance de diagrammes. Et récemment, je suis tombé sur le dépôt liquidslr/system-design-notes dans mes favoris.

L'auteur du projet a fait tout le travail fastidieux pour nous. Il a pris les deux parties du livre, supprimé les détails inutiles et organisé 28 sujets avec des solutions architecturales prêtes à l'emploi. Le projet a déjà recueilli près de 15 000 étoiles sur GitHub, et il y a des raisons claires à cela.

Ce qu'il y a dans ces notes

Il n'y a pas de discussions abstraites sur l'architecture propre ici. Le dépôt suit strictement la structure des livres originaux et est divisé en deux grands groupes de sujets : les blocs de construction de base et la conception de services spécifiques.

La première partie couvre les mécaniques de base sans lesquelles il est impossible de concevoir n'importe quel backend fiable :

  • Estimation rapide. La capacité de calculer les requêtes par seconde entrantes, l'espace disque pour des téraoctets de logs et la bande passante réseau requise en quelques minutes.
  • Algorithmes de limitation de débit pour protéger les API publiques des surcharges et du spam.
  • Le hachage cohérent, qui sauve la mise lors du partitionnement dynamique des bases de données et de l'équilibrage du cache.
  • Générer des identifiants uniques dans un environnement distribué sans verrous, comme le Snowflake de Twitter ou les serveurs de tickets de Flickr.

Le deuxième groupe de sujets est dédié à l'analyse de services complets. L'auteur décompose les tâches les plus couramment rencontrées dans les entretiens des grandes entreprises technologiques :

  • Architecture d'un service de raccourcisseur d'URL avec des calculs de collisions de hachage.
  • Chat évolutif au niveau de Slack ou Discord avec des connexions WebSocket persistantes.
  • Hébergement vidéo comme YouTube avec un pipeline de transcodage asynchrone pour différentes résolutions.
  • Passerelles de paiement et portefeuilles numériques, où l'idempotence des opérations et la validation en deux phases sont d'une importance critique.

De vrais articles d'ingénierie au lieu de la théorie aride

L'avantage principal du dépôt n'est même pas le résumé condensé des chapitres. À la fin du README, l'auteur a收集 des liens vers des articles techniques originaux et des publications des équipes de Discord, Uber, Netflix et Amazon.

Les diagrammes des livres ont souvent un aspect stérile. Sur le papier, tous les composants fonctionnent parfaitement, les files d'attente ne tombent jamais en panne et les réplicas de base de données se synchronisent instantanément. La production réelle est différente.

Lorsque vous lisez le chapitre sur les systèmes de messagerie, vous pouvez immédiatement ouvrir l'article des ingénieurs de Discord sur la façon dont ils ont stocké des milliards de messages et pourquoi ils ont initialement choisi Cassandra, avant de réécrire le stockage en Rust et ScyllaDB. Il y a aussi un article sur l'architecture de Flannel par l'équipe de Slack, expliquant comment le cache au niveau application fonctionne au bord du réseau.

La section sur la recherche et l'autocomplétion comprend un lien vers Prefixy et des matériaux sur l'arbre de hachage par préfixe. Pour ceux qui plongeant dans le stockage distribué de données, des publications originales sur Google BigTable et Amazon Dynamo DB sont collectées.

Cette approche relie la théorie du livre à l'expérience réelle des grandes entreprises.

Comment lire et utiliser ces notes

Les matériaux sont disponibles dans deux formats. Vous pouvez étudier les dossiers directement dans le dépôt GitHub, ou ouvrir la version web via Pagefy, avec un lien au tout début du README. La deuxième option est plus pratique pour la lecture sur smartphone ou tablette en déplacement.

Dans chaque dossier, vous trouverez :

  • Énoncé du problème avec les exigences fonctionnelles et non fonctionnelles.
  • Diagramme de composants de haut niveau (équilibreurs de charge, caches, bases de données, files d'attente).
  • Analyse détaillée des goulots d'étranglement architecturaux et des moyens de les faire évoluer.
  • Conclusions finales et compromis de la solution choisie.

Aucun code n'est écrit ici ; l'accent est spécifiquement mis sur la logique de flux de données, les protocoles de communication et le choix des types de stockage pour différents modèles de charge de travail.

Cela dit, le dépôt a une nuance : le projet est toujours marqué comme travail en cours. Certains chapitres sont formatés en détail, avec des formules et des diagrammes soignés, tandis que certains chapitres n'ont actuellement que de brèves esquisses. L'auteur met à jour le contenu de temps en temps, mais avant un entretien sérieux, il est préférable de vérifier additionally les articles mentionnés des blogs d'ingénierie.

Pour qui le projet fera-t-il gagner du temps

Si vous vous préparez à un changement d'emploi vers un poste de niveau Middle+ ou Senior, ce dépôt vous fera gagner des dizaines d'heures.

Les notes seront également utiles pour ceux qui :

  • Conçoivent un nouveau service au travail et choisissent entre SQL, NoSQL et le stockage clé-valeur.
  • Veulent comprendre les détails du fonctionnement des services géographiques (comme trouver des objets ou des amis à proximité sur une carte) à travers GeoHash et QuadTree.
  • Écrivent des intégrations avec des systèmes de paiement et veulent éviter les doubles prélèvements lors de pannes réseau.
  • En ont assez des tâches typiques et veulent améliorer leur compréhension des systèmes distribués en général.

Si le temps est limité, je recommande de commencer par les trois premiers sujets : la mise à l'échelle de zéro à des millions d'utilisateurs, les calculs d'estimation rapide et un cadre étape par étape pour répondre aux questions d'entretien de conception de systèmes. Cela créera une base solide sur laquelle vous pourrez ensuite superposer n'importe quel scénario spécialisé.

Projets similaires