* Neo Ici ! C'est un aperçu gratuit d'une lettre réservée aux abonnés, exclusive à mes membres dorés. Pour toute l'expérience, mettre à jour votre abonnement. === Je cherche la newsletter auteurs invités qui peuvent écrire sur la conception du système. Vous recevrez une juste compensation. Si vous êtes intéressé, envoyez-moi un de vos articles en répondant à ce courriel. Maintenant, retour à la newsletter d'aujourd'hui... J'ai lutté avec "microservices" jusqu'à ce que j'apprenne ces 22 modèles#164: Un guide de terrain sur les systèmes de fractionnement, le maintien des données correctes et la survie des défaillances dans la production
Certains de ces microservice modèles sont Fondemental, et certains sont tout à fait avancé. Tous sont super utiles aux ingénieurs logiciels qui construisent des systèmes évolutifs. Curieuse de savoir combien étaient nouveaux pour vous:
Pour chacun d'eux, je partage :
Laisse partir ! ChapitreL'application la plus dangereuse de votre entreprise a été construite par quelqu'un en finance mardi dernier (Partenaire)Le nombre d'applications codées en vibe dans environnement des entreprises a monté en flèche. Pourtant, la plupart des applications codées par vibration ne peuvent pas gérer les données du client en toute sécurité, se conformer à vos workflows internes ou passer des processus de production. C'est-à-dire qu'ils brisent les normes de votre entreprise. Vos applications deviennent donc un problème informatique lorsque vous vous posez ces questions :
INTRODUCTION SUPERBLOQUES... (Au lieu de nettoyer plus tard, il fait de TI la fondation à partir du premier jour.)
Donc, vous construisez des applications prêtes à la production au lieu de démos qui doivent être reconstruites plus tard... et votre entreprise se déplace plus vite. Si vous êtes sérieux sur le développement d'applications d'IA d'entreprise, essayez Superblocks en ce moment: (Merci à Superblocs pour le partenariat sur ce poste.) Chapitre1. Passerelle API
Un client ne doit jamais appeler les services directement. La passerelle leur donne une seule adresse et transmet chaque demande au service correct. De plus, il centralise les préoccupations transversales : authentifie les demandes, applique les limites de taux, met fin à la sûreté de la couche de transport (TLS), cache les réponses et traduit les protocoles. i.e., vos services restent concentrés sur la logique d'affaires au lieu de répéter logique transversale à travers la base de code. AnalogieUne réception d'hôtel fait les demandes des clients. Tu n'entres jamais dans la cuisine ou la buanderie toi-même. Au lieu de cela, vous demandez au bureau, et ils orientent votre demande vers le bon département. Un point de contact cache une douzaine de parties mobiles. ÉchangesUne passerelle simplifie les clients1, centralise la sécurité et l'observabilité, et vous permet de remodeler les services derrière une interface stable. Mais il ajoute un hop réseau, et pourrait devenir un seul point d'échec si vous n'exécutez qu'une seule instance. De plus, il peut devenir un goulot d'étranglement de développement lorsque chaque équipe doit le changer, et il risque de devenir un mini-monolithe si vous ajoutez la logique d'affaires à l'intérieur. Alors lancez-le derrière un balanceur de charge pour une grande disponibilité et gardez-le mince. Pourquoi ça compteUtilisez une passerelle API lorsque de nombreux services se trouvent derrière une API publique, les applications mobiles et Web ont besoin d'un seul paramètre, ou vous voulez gérer l'authentification et les limites de tarifs en un seul endroit. Il peut également vous aider à déplacer des clients d'un monolithe à des microservices sans casser l'API existante... Certaines implémentations populaires sont Kong, NGINX, Envoy, AWS API Gateway et Apigee. CONSEIL: Joignez-le aux moteurs de frontends2 modèle (plus sur ce dans le concept 15) lorsque différents clients, tels que le web et les applications mobiles, ont besoin de différentes API. 2. Base de données par service
Un service conserve ses propres données et ne les expose que par son API. D'autres services demandent ce dont ils ont besoin au lieu d'entrer directement dans les tableaux. Cela permet de maintenir les services facilement couplés : vous pouvez changer un schéma, basculer entre les bases de données ou ajouter un index, et rien ne se casse... La base de données devient un détail de mise en œuvre caché derrière la limite de service. AnalogieUne boutique avec sa propre réserve que seul son personnel entre. Les clients demandent au comptoir, et le personnel récupère ce dont il a besoin. Personne ne va dans le dos. Parce qu'une équipe contrôle la réserve, elle reste organisée, et ne change personne. ÉchangesLes bases de données privées donnent à chaque équipe l'indépendance, isolent les échecs et permettent à chaque service de choisir le bon stockage pour son travail. Mais les requêtes qui s'étendent sur les services deviennent plus difficiles, vous perdez les jointures cross-table et les clés étrangères, et de garder les données cohérentes entre les besoins de services tels que Saga, API Composition, et Transactional Outbox3. A base de données partagée semble plus facile le premier jour, mais en silence couple chaque service au fil du temps. Pourquoi ça compteChaque système de microservices a des déploiements indépendants, ou des services avec des formes de données et des modèles d'accès très différents. Ce modèle rend les microservices indépendants. Alors traitez une base de données partagée comme un drapeau rouge. Les magasins de données populaires sont PostgreSQL, MySQL, MongoDB et DynamoDB. 3. Disjoncteur
Le disjoncteur enveloppe une panne d'appel & montre à distance:
Cela transforme un délai drainant les ressources en un rejet instantané et bon marché. AnalogieUn fusible électrique voyages quand trop de courants. Au lieu de laisser un défaut brûler la maison, le fusible coupe le circuit. Une fois le problème corrigé, vous le réinitialisez et la puissance revient. Le briseur fait la même chose pour une dépendance défaillante, la coupant avant qu'elle n'entraîne tout. ÉchangesIls ajoutent des chemins de gestion des erreurs et ont besoin d'un réglage prudent des seuils et des délais. De plus, ils peuvent se déplacer sur un blip et rejeter le bon trafic, et nécessitent une surveillance afin que vous remarquez un circuit ouvert. Pourquoi ça compteLes appels à une dépendance distante/tiers doivent se dégrader gracieusement, ou un service lent ne doit PAS prendre le chemin de requête entier. Résilience4j (Java), Polly (.NET) et Envoy proxy implémentent des disjoncteurs, et une maille de service (plus sur cela dans le concept 20) comme Istio peut les appliquer sans changement de code. 4. Messagerie conduite par un événement
Un appel direct couple l'appelant à l'appelant à temps: l'appelant bloque une réponse, et un échec de chaque côté rompt la demande. La messagerie événementielle rompt ce lien. Un service publie un événement à un courtier et passe à l'action, et un certain nombre de consommateurs peuvent s'abonner et réagir selon leur propre horaire. Ce style de publication et d'abonnement vous permet également d'ajouter de nouveaux consommateurs plus tard sans toucher le producteur. AnalogieA téléphone par rapport à un canal de groupe: A appel téléphonique a besoin des deux personnes libres au même instant. Un message envoyé à canal de groupe attend que chaque lecteur soit prêt, et tous les intéressés le voient. Les nouvelles personnes peuvent rejoindre le canal de groupe plus tard et obtenir les mises à jour. ÉchangesIl négocie une simple demande-réponse pour une éventuelle cohérence. De plus, le débogage devient plus fort tout au long d'une chaîne d'événements, et il ya un besoin de gérer duplicata & livraison hors-commande. Pourquoi ça compteLes flux de travail où des étapes peuvent se produire asynchronement, amplifier un événement pour de nombreux services, découpler les producteurs des consommateurs ou lisser les pics de trafic avec un tampon. Apache Kafka, RabbitMQ, AWS SNS et SQS, et Google Pub/Sub sont des implémentations de courtiers populaires. CONSEIL: Combinez-le avec le modèle Idempotent Consumer4 (en savoir plus sur le concept 17), parce que la livraison au moins une fois signifie que des duplications se produiront. 5. Découverte des services
Dans l'architecture des microservices, les instances vont et viennent, et leurs adresses changent constamment. C'est-à-dire que le codage dur d'un emplacement rompt le moment où un service se déplace. Chaque instance enregistre son adresse avec un registre de service quand elle démarre et se désenregistre quand elle s'arrête. Les appelants interrogent le registre par son nom pour obtenir une adresse actuelle et saine. Voici 2 façons de mettre en œuvre la découverte de service:
AnalogieUne application contacts au lieu de nombres griffés en stylo... Quand un ami change son numéro, les mises à jour de l'application et vous pouvez toujours les joindre. Le registre conserve les coordonnées actuelles de chaque service, de sorte que les appelants les atteignent toujours. Échanges
Pourquoi ça compteLes adresses fixes ne sont PAS pratiques pour les flottes d'échelle automatique, les déploiements conteneurisés avec des IP décalés, les déploiements bleu-vert et laminage5. Consul, etcd, et Netflix.Eureka sont des registres classiques, tandis que Kubernetes construit la découverte à travers DNS et Services. La plupart des mailles de service6 inclure, donc vous obtenez souvent la découverte gratuitement à l'échelle. 6. Réessayer avec le recul
Les réseaux blip, et un appel qui échoue une fois réussit souvent sur le prochain essai. Une boucle de réessayer naïve peut écraser un service qui est déjà vers le bas. Backoff corrige cela en attendant plus longtemps entre chaque tentative, généralement en doublant le retard, et jitter ajoute aléatoirement tant de clients ne réessayent pas dans Lockstep. Une limite de réessayer et une limite de temps l'effort total ainsi un appel bloqué abandonne vers le haut au lieu de suspendre pour toujours. AnalogieRedistribuer une ligne téléphonique occupée. Vous attendez un moment et essayez encore, pas quarante fois de suite, et vous abandonnez après quelques anneaux plutôt que de tenir la ligne toute la journée. Chaque attente est un peu plus longue donc vous n'êtes pas en train de bloquer la ligne. ÉchangesLa réessayer d'un appel non idémpotent peut faire double emploi ou faire double emploi; les rétries agressives peuvent amplifier une panne dans une tempête de réessayer, et des tentatives supplémentaires élèvent la latence de la queue7 pour la demande. CONSEIL: Seulement réessayer les opérations d'idémpotent, toujours ajouter jitter, et la paire des rétries avec un disjoncteur. Pourquoi ça compteAppels aux réseaux flous / API tiers, erreurs de base de données transitoires, ou toute opération distante qui est sûre à répéter. Résilience4j & Polly fournir réessayer avec exponentielle backoff et jitter hors de la boîte. Timeout, réessayer avec backoff et disjoncteur ensemble sont des mécanismes de résilience standard pour les appels à distance. 7. Décomposition par capacité opérationnelle
La partie HARD des microservices décide où un service se termine et le prochain commence... Voici deux méthodes pour vous guider :
Chacun devient un contexte délimité : une limite à l'intérieur de laquelle chaque terme a une signification précise. Les limites tracées de cette façon suivent l'entreprise, qui se déplace beaucoup plus lentement que le code. AnalogiePensez à une entreprise avec différents départements: La vente, l'expédition, les livraisons, et les paiements, la facturation. Chaque département possède son propre travail. Même le même mot peut signifier des choses différentes. Par exemple, un «client» désigne une adresse de commande et de livraison à Expédition, mais les détails de paiement et les factures à Paiements. Un contexte délimité maintient chaque sens séparé, de sorte que les équipes n'interfèrent pas entre elles. ÉchangesChoisir les bonnes limites de service nécessite une bonne compréhension de l'entreprise. Si vous partagez les services mauvaise façon, ils finissent par s'appeler constamment. Tout en modifiant ces limites plus tard devient difficile parce que chaque service possède déjà ses propres données et responsabilités. Pourquoi ça compteUtilisez ce modèle lorsque vous construisez un nouveau système de microservices, cassez un monolithe en petits services, ou donnez à chaque équipe la propriété d'un secteur d'activité spécifique. ChapitreRappel : c'est un teaser de la newsletter réservée aux abonnés, exclusive à mes membres dorés. Lorsque vous mettez à niveau, vous obtiendrez :
Prêt pour la meilleure partie ? ChapitreContinuez à lire avec un essai gratuit de 7 joursAbonnez-vous à Le Bulletin de la conception du système pour continuer à lire ce post et obtenir 7 jours d'accès gratuit aux archives complètes du post. Un abonnement vous donne :
|