Guide de conception du système

Développer un système robuste, évolutif et efficace peut être intimidant. Cependant, la compréhension des concepts et composants clés peut rendre le processus plus gérable. Dans cet article de blog, nous explorerons les composants de base de la conception de systèmes tels que le DNS, l'équilibrage de charge, les passerelles API, etc., ainsi qu'une aide-mémoire concise qui peut aider les développeurs à concevoir des systèmes de complexité variable.

Plan de conception du système/aide-mémoire

Un guide visuel complet qui fournit aux développeurs une référence rapide et simple aux concepts clés et aux meilleures pratiques en matière de conception de systèmes. Cet aide-mémoire ou plan pratique couvre des sujets de base tels que le DNS, l'équilibrage de charge, les passerelles API, le traitement des vidéos et des images, la mise en cache, les bases de données, la génération d'identifiants uniques, les composants standard tels que les services de paiement et de référence, ainsi que les protocoles de chat et de streaming. Grâce à cette ressource précieuse, vous serez équipé pour relever les défis de la conception et de la mise en œuvre de systèmes évolutifs, efficaces et fiables.

Plan de conception du système : le guide ultime – Pleine résolution :  https://drive.google.com/file/d/1OGC55KQqTpeUnpiT6glq_6mNpRfl4rD2/view?usp=sharing

Première partie : principes de conception du système

1.1 : Modularisation – Modularisation

La division du système en modules plus petits et gérables permet de réduire la complexité, d'améliorer la maintenabilité et d'augmenter la réutilisation.

1.2 : Abstraction

Masquer les détails de mise en œuvre et afficher uniquement les fonctionnalités de base permet de simplifier les systèmes complexes et de promouvoir la modularité.

1.3 : Superposition – Superposition

La division du système en plusieurs couches, chaque couche fournissant un ensemble spécifique de fonctions, favorise la séparation des préoccupations et améliore la maintenabilité.

1.4 : Évolutivité

Concevez le système pour gérer une charge accrue en ajoutant plus de ressources (scale-out) ou en optimisant la capacité du système (scale-up).

1.5 : Performances – Performances

L'optimisation du temps de réponse, du débit et de l'utilisation des ressources de votre système est la clé d'une conception réussie.

1.6 : Sécurité – Sécurité

Assurer la confidentialité, l’intégrité et la disponibilité des systèmes en mettant en œuvre des mesures et pratiques de sécurité appropriées.

1.7 : Tolérance aux pannes et résilience

Concevez des systèmes pour résister aux pannes et récupérer facilement des erreurs, garantissant ainsi la fiabilité et la disponibilité.

Partie 2 : Composants clés de la conception du système

2.1 : DNS (Système de noms de domaine)

DNS est un système de dénomination hiérarchique et décentralisé pour les ordinateurs, services ou autres ressources connectés à Internet ou à des réseaux privés. Il traduit les noms de domaine lisibles par l'homme (par exemple, www.example.com ) en adresses IP, permettant aux utilisateurs d'accéder plus efficacement aux sites Web et aux services.

2.2 : Équilibrage de charge – Équilibrage de charge

L'équilibrage de charge fait référence à la répartition du trafic réseau sur plusieurs serveurs afin de garantir qu'aucun serveur n'est submergé. Cette approche améliore la disponibilité, la fiabilité et les performances du système. Les algorithmes d'équilibrage de charge standard incluent Pi, Least Connectivity et IP Hash.

2.3 : Passerelle API — Passerelle API

Une passerelle API est un serveur qui sert d'intermédiaire entre les clients et les microservices dans un système distribué. Il gère et achemine les requêtes, applique les politiques de sécurité et peut fournir des fonctionnalités supplémentaires telles que la mise en cache, la journalisation et la surveillance.

2.4 : Réseau de diffusion de contenu (CDN)

Un CDN est un réseau de serveurs répartis dans différents emplacements conçus pour fournir du contenu aux utilisateurs avec une latence plus faible et une bande passante plus élevée. CDN met en cache le contenu sur des serveurs périphériques proches des utilisateurs finaux, améliorant ainsi les performances du système et réduisant la charge sur le serveur d'origine.

2.5 : File d'attente des messages – File d'attente des messages

Les files d'attente de messages facilitent la communication entre les composants du système distribué en stockant temporairement les messages dans des files d'attente. Ils mettent en œuvre un traitement asynchrone, aident à découpler les composants et améliorent l'évolutivité et la tolérance aux pannes du système.

2.6 : Protocoles de communication

Différents protocoles de communication tels que HTTP/HTTPS, WebSocket et gRPC sont utilisés dans la conception du système. Ces protocoles présentent des avantages et des compromis, et le choix dépend de facteurs tels que les exigences de latence, de sécurité et de transfert de données.

2.7 : Cache

La mise en cache est une technique temporaire de stockage de copies de données, permettant une récupération rapide lors de demandes futures. Il permet de réduire la latence, la charge du serveur et la consommation de bande passante. Les mécanismes de mise en cache les plus courants incluent la mise en cache en mémoire, la mise en cache distribuée et la mise en cache du navigateur.

2.8 : Base de données – Base de données

Le choix de la bonne base de données pour un système dépend de la structure des données, de l'évolutivité, de la cohérence et de la latence. Les types de bases de données courants incluent les bases de données relationnelles (telles que MySQL, PostgreSQL), les bases de données NoSQL (telles que MongoDB, Cassandra) et les bases de données NewSQL (telles que Cockroach DB, Google Spanner).

2.9 : Réplication – Techniques de réplication

La réplication est la maintenance de plusieurs copies de données sur différents nœuds pour améliorer la fiabilité, la disponibilité et la tolérance aux pannes. Les technologies de réplication standard incluent la réplication synchrone, la réplication asynchrone et la réplication semi-synchrone.

2.10 : Génération d'UUID distribuée — Génération d'ID unique distribuée

La création d'identifiants uniques dans les systèmes distribués peut s'avérer difficile, mais elle est essentielle au maintien de la cohérence et de l'intégrité des données.

Partie 3 : Téléchargez des vidéos et des images en morceaux à l'aide d'URL signées

Dans cette section, nous explorerons comment télécharger des fichiers vidéo et image volumineux en morceaux à l'aide d'URL signées. Cette méthode peut améliorer considérablement l’efficacité et la fiabilité des téléchargements de fichiers, en particulier lorsque les conditions du réseau ne sont pas idéales.

3.1 : Qu'est-ce qu'une URL signée ?

Une URL signée est une URL spécialement conçue qui permet un accès temporaire et sécurisé à une ressource spécifique, telle qu'un objet dans le stockage cloud. Ces URL contiennent une signature d'authentification qui permet à l'utilisateur d'effectuer une action spécifique, telle que le chargement ou le téléchargement d'un fichier, pendant une durée limitée. Les fournisseurs de stockage cloud populaires tels qu'Amazon S3 et Google Cloud Storage prennent en charge la génération d'URL signées. Voici un exemple de ce à quoi pourrait ressembler une URL signée :

https://example-bucket.s3.amazonaws.com/my-file.txt?\ 
  X-Amz-Algorithm=AWS4-HMAC-SHA256& 
  X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20220407%2Fus-east-1%2Fs3% 2Faws4_request&\ 
  X-Amz-Date=20220407T123456Z& 
  \ X-Amz-Expires=3600&\ 
  X-Amz-SignedHeaders=host&\ 
  X-Amz-Signature=a9c8a7d1644c7b351ef3034f4a1b4c9047e891c7203eb3a9 f29d8c7a74676d88

3.2 : Téléchargement fragmenté

Le téléchargement de fichiers volumineux en une seule requête peut entraîner des délais d'attente, une consommation de mémoire élevée et un risque accru de panne dû à l'instabilité du réseau. Au lieu de cela, diviser les fichiers volumineux en morceaux plus petits et les télécharger séquentiellement ou en parallèle peut améliorer l'efficacité et la fiabilité du téléchargement. Cette méthode est appelée téléchargement « fragmenté » ou « multipart ».

3.3 : Combiner des URL signées et des téléchargements en plusieurs parties

Pour importer des fichiers vidéo et image en morceaux à l'aide d'URL signées, suivez ces étapes générales :

  1. Divisez les fichiers en petits morceaux : divisez les fichiers volumineux en petits morceaux côté client, généralement à l'aide de JavaScript. La taille des fragments peut varier, mais le nombre de requêtes et la taille de chaque fragment doivent être équilibrés pour optimiser les performances de téléchargement.
  2. Demander une URL signée pour chaque morceau : envoyez une demande à votre serveur pour générer une URL signée pour chaque morceau. Le serveur doit créer une URL signée avec les autorisations et le délai d'expiration appropriés et la renvoyer au client.
  3. Télécharger des morceaux à l'aide d'URL signées : téléchargez chaque morceau sur le service de stockage cloud à l'aide d'une URL signée. En fonction du niveau de concurrence souhaité et des conditions du réseau, ces téléchargements peuvent se produire séquentiellement ou en parallèle.
  4. Confirmez le téléchargement réussi et réassemblez : une fois que tous les morceaux ont été téléchargés avec succès, informez le serveur pour confirmer l'achèvement du processus de téléchargement. Le serveur peut ensuite réassembler les morceaux dans le fichier d'origine et effectuer tout traitement ou validation nécessaire.
  5. Gérer les échecs de téléchargement : si le téléchargement d'un morceau échoue, réessayez le téléchargement en utilisant une nouvelle URL signée ou mettez en œuvre une stratégie de gestion des erreurs pour garantir une expérience utilisateur fluide.

En utilisant des URL signées et des téléchargements fragmentés, les développeurs peuvent gérer efficacement et en toute sécurité les téléchargements de vidéos et d'images volumineux, améliorant ainsi la fiabilité et les performances de leurs systèmes.

Partie IV : Protocoles de chat et de streaming

Cette section traite de divers protocoles de discussion et de streaming qui facilitent la communication et le flux de données en temps réel entre les clients et les serveurs. Comprendre ces protocoles peut aider les développeurs à créer des applications réactives et interactives.

4.1 : RTMP (Protocole de messagerie en temps réel)

RTMP est un protocole propriétaire développé par Adobe Systems pour la transmission d'audio, de vidéo et de données sur Internet. Il est couramment utilisé dans les applications de streaming vidéo et assure une communication à faible latence entre les clients et les serveurs. Cependant, sa popularité a diminué ces dernières années en raison de sa dépendance au lecteur Flash.

4.2 : WebRTC (Communication Web en temps réel)

WebRTC est un projet open source qui permet la communication audio, vidéo et données en temps réel dans les navigateurs Web et les applications mobiles. Il prend en charge les connexions peer-to-peer, réduisant ainsi la latence et la charge du serveur. WebRTC est largement utilisé pour les vidéoconférences, les jeux en ligne et d'autres applications nécessitant une communication en temps réel.

4.3 : WebSocket

WebSocket est un protocole de communication qui permet une communication bidirectionnelle en duplex intégral entre un client et un serveur via une seule connexion de longue durée. En raison de sa faible latence et de ses capacités de communication efficaces, WebSocket est souvent utilisé pour des applications en temps réel telles que le chat, les notifications et les mises à jour en temps réel.

4.4 : SSE (événements envoyés par le serveur)

Les événements envoyés par le serveur (SSE) sont une technologie qui permet à un serveur de transmettre des mises à jour côté client via une connexion HTTP. Il est conçu pour une communication unidirectionnelle en temps réel entre le serveur et le client, ce qui le rend adapté aux applications telles que les mises à jour en temps réel, les flux d'actualités et les notifications.

4.5 : Interrogation HTTP courte

L'interrogation à court terme implique que le client envoie des requêtes HTTP répétées au serveur pour rechercher de nouvelles mises à jour. Bien que simple à mettre en œuvre, une interrogation courte peut entraîner une charge élevée sur le serveur et une latence accrue en raison d'une interrogation continue, en particulier lorsque les mises à jour sont peu fréquentes.

4.6 : Interrogation HTTP longue

L'interrogation longue est une amélioration par rapport à l'interrogation courte, dans laquelle le client envoie une requête au serveur et le serveur maintient la requête ouverte jusqu'à ce que de nouvelles données soient disponibles. Cette approche réduit le nombre de requêtes et la charge sur le serveur, mais elle peut quand même être affectée par des problèmes de latence et nécessite une gestion minutieuse des ressources du serveur.

4.7 : Webhook

Les webhooks sont des rappels HTTP définis par l'utilisateur et déclenchés par des événements spécifiques dans le système. Lorsqu'un événement se produit, le site d'origine envoie une requête HTTP à l'URL configurée pour le webhook. Cette approche permet une communication efficace et événementielle entre différents systèmes ou services.

4.8 : API de flux

Les API de streaming permettent aux clients de consommer un flux continu de données à partir d'un serveur, généralement à l'aide d'une connexion HTTP ou WebSocket. Ces API sont conçues pour les applications nécessitant des mises à jour en temps réel, telles que les informations sur les réseaux sociaux, les données boursières ou l'analyse en temps réel.

En comprenant et en exploitant ces protocoles de chat et de streaming, les développeurs peuvent créer des applications réactives en temps réel qui répondent à une variété de cas d'utilisation et offrent une expérience utilisateur attrayante.

Partie 5 : Composants communs dans la conception du système

Cette section explore certains composants standards qui apparaissent fréquemment dans la conception de systèmes modernes. Comprendre ces composants peut aider les développeurs à les intégrer de manière transparente dans leurs systèmes et à améliorer la fonctionnalité globale.

5.1 : Service de paiement – ​​Service de paiement

Les services de paiement gèrent les transactions entre les clients et les entreprises. L'intégration d'un service de paiement fiable est essentielle pour les plateformes de commerce électronique et par abonnement. Les fournisseurs de services de paiement populaires incluent Stripe, PayPal et Square. Ces services fournissent souvent des API pour faciliter les transactions sécurisées et gérer les paiements récurrents, les remboursements, etc.

5.2 : Service analytique – Service analytique

Les services d'analyse permettent la collecte, le traitement et la visualisation de données pour aider les entreprises à prendre des décisions éclairées. Ces services peuvent suivre le comportement des utilisateurs, surveiller les performances du système et analyser les tendances. Les fournisseurs d'analyses standards incluent Google Analytics, Mixpanel et Amplitude. L'intégration de services d'analyse dans un seul système peut aider les entreprises à optimiser leurs produits et à améliorer l'expérience utilisateur.

5.3 : Service Push – Notification

Les services de notification tiennent les utilisateurs informés des mises à jour, des alertes et des informations importantes. Ces services peuvent fournir des notifications via différents canaux, tels que les e-mails, les SMS et les notifications push. Des exemples de fournisseurs de services de notification incluent Firebase Cloud Messaging (FCM), Amazon Simple Notification Service (SNS) et Twilio.

5.4 : Recherche – Recherche

Pour les systèmes comportant de grandes quantités de données ou de contenu, l’intégration d’un puissant composant de recherche est essentielle. Les services de recherche doivent fournir des capacités de recherche rapides, pertinentes et évolutives. Elasticsearch, Apache Solr et Amazon CloudSearch sont des choix populaires pour la mise en œuvre de fonctionnalités de recherche. Ces services prennent généralement en charge la recherche en texte intégral, la recherche à facettes et le filtrage, permettant aux utilisateurs de trouver les informations qu'ils recherchent rapidement et efficacement.

5.5 : Service de recommandation – Service de recommandation

Les services de recommandation utilisent des algorithmes pour fournir des recommandations personnalisées aux utilisateurs en fonction de leurs préférences, de leur comportement et d'autres facteurs. Ces services peuvent augmenter considérablement l’engagement et la satisfaction des utilisateurs. Les techniques permettant de générer des recommandations incluent le filtrage collaboratif, le filtrage basé sur le contenu et les approches hybrides. Les algorithmes d’apprentissage automatique, tels que la factorisation matricielle et l’apprentissage profond, peuvent également être utilisés pour générer des recommandations plus complexes.

En incorporant ces composants standard dans la conception de leurs systèmes, les développeurs peuvent améliorer les fonctionnalités de leurs applications et offrir une expérience plus fluide et plus attrayante aux utilisateurs.

Partie 6 : Meilleures pratiques en matière de conception de systèmes

6.1 : Collecte des exigences

Bien comprendre et documenter les exigences du système avant de commencer le processus de conception.

6.2 : Modèles de conception

Tirez parti de modèles de conception éprouvés pour résoudre les problèmes de conception récurrents et améliorer l’architecture globale.

6.3 : Documentation—Documentation

Documentez vos décisions de conception, vos hypothèses et vos justifications pour garantir une meilleure communication et une meilleure maintenabilité.

6.4 : Conception itérative – Conception itérative

Affinez votre conception grâce à de multiples itérations et commentaires afin qu'elle continue d'évoluer et de s'améliorer.

6.5 : Tests et validation – Tests et validation

Validez votre conception par rapport aux exigences et effectuez des tests pour identifier et résoudre les problèmes potentiels.

Résumer

En résumé, la conception de systèmes est un processus complexe et à multiples facettes qui nécessite une connaissance approfondie de divers composants, protocoles et technologies. Cet article de blog décrit certains sujets de base tels que le DNS, l'équilibrage de charge, les passerelles API, les composants standard tels que le traitement vidéo et d'image, la mise en cache, les bases de données, la génération d'identifiants uniques, les services de paiement et de recommandation, ainsi que les protocoles de chat et de streaming.

En tirant parti de ces connaissances, les développeurs peuvent créer des systèmes évolutifs, efficaces et fiables qui répondent à différentes exigences et offrent une expérience utilisateur transparente. L’essentiel est de se rappeler que la conception d’un système est un processus itératif et que l’amélioration continue est essentielle à la création et au maintien d’applications réussies. Avec une base solide sur ces concepts fondamentaux et un accent mis sur l’adaptabilité, les développeurs peuvent relever en toute confiance les défis liés à la conception et à la mise en œuvre de systèmes robustes.

Je suppose que tu aimes

Origine blog.csdn.net/jeansboy/article/details/131703142
conseillé
Classement