microservices-patterns
Entwicklung produktionsreifer Microservices-Architekturen
Auch verfügbar von: wshobson
Der Aufbau verteilter Systeme erfordert die Navigation komplexer Abwägungen zwischen Service-Grenzen, Kommunikationsmustern und Datenkonsistenz. Diese Fähigkeit bietet bewährte Muster und Codebeispiele für die Zerlegung von Monolithen, die Implementierung robuster serviceübergreifender Kommunikation und das effektive Management verteilter Transaktionen.
Die Skill-ZIP herunterladen
In Claude hochladen
Gehe zu Einstellungen → Fähigkeiten → Skills → Skill hochladen
Einschalten und loslegen
Teste es
Verwendung von "microservices-patterns". Analysieren Sie diesen E-Commerce-Monolithen mit Modulen für Bestellungen, Zahlungen, Inventar, Versand und Benutzerkonten. Schlagen Sie Microservice-Grenzen vor.
Erwartetes Ergebnis:
Basierend auf Domain-Driven-Design-Prinzipien sind hier empfohlene Service-Grenzen: 1) Order Service - besitzt den Bestelllebenszyklus und Bestellstatus; 2) Payment Service - verarbeitet Zahlungsabwicklung und Rückerstattungen; 3) Inventory Service - verwaltet Lagerbestände und Reservierungen; 4) Catalog Service - Produktinformationen und Preisgestaltung; 5) Shipping Service - Erfüllung und Lieferverfolgung. Benutzerkonten sollten Teil eines Identity Service bleiben, der systemweit geteilt wird. Jeder Service sollte seine eigene Datenbank besitzen und Domain-Events für eventual consistency veröffentlichen.
Verwendung von "microservices-patterns". Entwerfen Sie ereignisgesteuerte Kommunikation für die Auftragsabwicklung. Wann sollte ich Events vs. direkte Service-Aufrufe verwenden?
Erwartetes Ergebnis:
Verwenden Sie Events, wenn: 1) Mehrere Services auf dasselbe Ereignis reagieren müssen (OrderCreated löst Inventarreservierung, Versandetikett-Erstellung, Kundenbenachrichtigung aus); 2) Zeitliche Entkopplung akzeptabel ist (Inventar kann Sekunden später reserviert werden); 3) Sie lose Kopplung zwischen Services wünschen. Verwenden Sie direkte synchrone Aufrufe, wenn: 1) Sie eine sofortige Antwort benötigen (Inventarprüfung vor Bestellung); 2) Der Aufrufer ohne die Antwort nicht fortfahren kann; 3) Starke Konsistenz erforderlich ist. Für die Auftragsabwicklung veröffentlichen Sie OrderCreated-Events asynchron für Inventar und Versand, verwenden Sie aber synchrone Aufrufe zur Inventarverfügbarkeitsprüfung während der Bestellplatzierung.
Verwendung von "microservices-patterns". Zeigen Sie mir ein Saga-Muster für Order Payment mit Kompensationslogik.
Erwartetes Ergebnis:
OrderPaymentSaga-Schritte: 1) ReserveOrder - erstellt ausstehende Bestellung; Kompensieren: CancelOrder. 2) ProcessPayment - belastet Kunden; Kompensieren: RefundPayment. 3) ConfirmInventory - reserviert Artikel; Kompensieren: ReleaseInventory. 4) CompleteOrder - markiert Bestellung als bestätigt; Kompensieren: MarkOrderFailed. Ausführung: Wenn Schritt 2 (Zahlung) fehlschlägt, führen Sie kompensierende Aktionen in umgekehrter Reihenfolge aus: ReleaseInventory (Schritt 3 Kompensation), CancelOrder (Schritt 1 Kompensation). Dies stellt sicher, dass das System nach jedem Fehler in einen konsistenten Zustand zurückrollt.
Sicherheitsaudit
SicherAll 29 static analysis findings are false positives from markdown code examples in educational documentation. The skill contains only documentation files (SKILL.md and implementation-playbook.md) with Python code samples demonstrating microservices patterns. No executable code, scripts, or actual security risks present. The 'external_commands' and 'network' patterns detected are from code block delimiters and example URLs in instructional content.
Qualitätsbewertung
Was du bauen kannst
Zerlegung einer monolithischen Anwendung
Softwarearchitekt plant die Aufschlüsselung eines großen Rails-Monolithen in fokussierte Services. Nutzen Sie diese Fähigkeit, um Bounded Contexts zu identifizieren, Service-Grenzen zu definieren und eine Strangler-Fig-Migrationsstrategie zu planen.
Ereignisgesteuerte Kommunikation entwerfen
Backend-Entwickler implementiert asynchrone Nachrichtenübermittlung zwischen Services. Nutzen Sie diese Fähigkeit, um zwischen Kafka, RabbitMQ oder Cloud-native Messaging zu wählen, Event-Schemas zu entwerfen und Event-Handler mit angemessener Fehlerbehandlung zu implementieren.
Resilienz-Muster implementieren
Platform Engineer baut Zuverlässigkeit in die serviceübergreifende Kommunikation ein. Nutzen Sie diese Fähigkeit, um Circuit Breakers anzuwenden, Retry-Logik mit exponentiellem Backoff zu implementieren und Kaskadenausfälle in Ihrem verteilten System zu verhindern.
Probiere diese Prompts
Analysieren Sie diese monolithische Anwendung [Domain und Module beschreiben] und schlagen Sie Microservice-Grenzen vor. Gruppieren Sie zusammengehörige Funktionalitäten nach Geschäftsfähigkeiten und DDD-Subdomains. Erklären Sie die Begründung für jede vorgeschlagene Service-Grenze.
Ich benötige, dass [Service A] mit [Service B] für [spezifischer Use Case] kommuniziert. Vergleichen Sie synchrone REST- vs. asynchrone ereignisgesteuerte Ansätze. Empfehlen Sie das beste Muster unter Berücksichtigung von Latenz, Konsistenzanforderungen und Fehlerbehandlung.
Entwerfen Sie eine Saga-Orchestrierung für [Geschäftsprozess mit mehreren Services]. Identifizieren Sie jeden Transaktionsschritt, definieren Sie kompensierende Aktionen für Fehler und zeigen Sie den Ausführungsfluss mit Fehlerbehandlung.
Mein Service ruft [externer Service/Dependency] auf und erlebt intermittierende Fehler. Entwerfen Sie eine Circuit Breaker-Implementierung mit angemessenem Fehlerschwellenwert, Wiederherstellungs-Timeout und Fallback-Verhalten. Zeigen Sie Code in [Ihre bevorzugte Sprache].
Bewährte Verfahren
- Beginnen Sie mit einem modularen Monolithen und extrahieren Sie Services nur, wenn Sie eine klare Geschäftsgrenze und operativen Bedarf haben
- Entwerfen Sie Services um Geschäftsfähigkeiten und Bounded Contexts aus Domain-Driven Design, nicht um technische Schichten
- Bevorzugen Sie asynchrone ereignisgesteuerte Kommunikation gegenüber synchronem REST für lose Kopplung und bessere Resilienz
- Implementieren Sie Circuit Breakers, Retries mit exponentiellem Backoff und Timeouts für alle serviceübergreifenden Aufrufe
- Wenden Sie Database-per-Service-Muster an, um Shared-Database-Kopplung zu vermeiden und unabhängige Deployments zu ermöglichen
- Verwenden Sie verteiltes Tracing und strukturierte Protokollierung, um Anfragen über Service-Grenzen hinweg zu beobachten
Vermeiden
- Distributed Monolith - Services, die zusammen deployed werden müssen und Datenbanken teilen, was Microservices-Vorteile zunichte macht
- Gesprächige Services - übermäßige synchrone Aufrufe zwischen Services, die enge Kopplung und Latenz erzeugen
- Gemeinsame Datenbanken - mehrere Services, die auf dieselbe Datenbank zugreifen, erzeugen Schema-Abhängigkeiten und Deployment-Abhängigkeiten
- Ignorieren von Fehlermodi - Annahme, dass Netzwerke zuverlässig sind, Services immer verfügbar sind oder Nachrichten garantiert zugestellt werden
- Vorzeitige Microservices - Start eines neuen Projekts mit Microservices, bevor die Domain und die operative Belastung verstanden werden
Häufig gestellte Fragen
Wann sollte ich Microservices anstelle eines Monolithen verwenden?
Wie handle ich Transaktionen über mehrere Services hinweg?
Sollte ich REST oder Messaging für die Service-Kommunikation verwenden?
Wie verhindere ich Kaskadenausfälle in Microservices?
Was ist der größte Fehler, den Teams mit Microservices machen?
Wie debugge ich Probleme über mehrere Services hinweg?
Entwicklerdetails
Autor
sickn33Lizenz
MIT
Repository
https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/microservices-patternsRef
main
Dateistruktur