Architekturstile und Kommunikationsmuster
Anwendungen auf AWS entwickeln
Ricardo Sueiras
Principal Technologist
Dein Dozent
Was sind Architekturmuster?
Wiederverwendbare Lösung für ein häufiges Problem.
Muster zeigen dir, wie AWS-Services zusammenpassen.
Die Architektur bestimmt, wie gut deine App unter Last läuft.
Mehrere Architekturmuster solltest du kennen.
Monolithen
Eine einzelne, eng gekoppelte Einheit.
Eine Codebasis, ein Deployment.
Anfangs einfach zu entwickeln.
Schwer zu skalieren: du skalierst alles zusammen.
Microservices
Kleine, unabhängige Services: jeder besitzt genau eine Geschäftsfähigkeit.
Jeden Service separat deployen, skalieren und aktualisieren.
Trade-off: mehr Betriebsaufwand und Service-zu-Service-Kommunikation.
Serverless
Keine Infrastruktur verwalten, nur Code und Konfiguration.
Aufbau durch Kombinieren verwalteter AWS-Services.
AWS übernimmt Bereitstellung, Skalierung und Wartung.
Trade-off: Ausführungszeitlimits, Cold Starts, Vendor-Lock-in.
Nahezu kein Betriebsaufwand und automatische Skalierung.
Ereignisgesteuerte Architektur (EDA)
Komponenten kommunizieren über Ereignisse statt direkte Aufrufe.
Ein Ereignis protokolliert etwas, das passiert ist (Bestellung aufgegeben, Zahlung eingegangen, Artikel versandt).
Produzenten senden Ereignisse.
Konsumenten abonnieren relevante Ereignisse.
Eng und lose gekoppelte Systeme
Moderne Cloud-Apps bestehen aus mehreren Services.
Services müssen kommunizieren und koordinieren, um Arbeit zu erledigen.
Synchrone Kommunikation ist eng gekoppelt.
Asynchrone Kommunikation ist lose gekoppelt.
Synchrone Kommunikation
Ein Service sendet eine Anfrage und wartet auf die Antwort.
Der Aufrufer ist blockiert bis zur Antwort oder zum Timeout.
Einfach zu implementieren und zu verstehen.
Enge Kopplung: Verzögerungen oder Ausfälle wirken sich kaskadenartig aus.
Abmildern mit Timeouts, Retries und Circuit Breakers.
Muster: Request/Response
Rückgrat der meisten Anwendungs-Interfaces.
Vorhersehbares Verhalten.
Sofortiges Nutzerfeedback.
Asynchrone Kommunikation
Sender wartet nicht auf eine Antwort.
Sendet eine Nachricht oder ein Ereignis und macht weiter.
Empfänger verarbeitet die Nachricht unabhängig.
Lose gekoppelt: bessere Skalierung und Fehlertoleranz.
Bewältigt Lastspitzen und Teilausfälle gut.
Herausforderungen: Duplikate, Reihenfolge, Eventual Consistency.
Muster: Warteschlangenbasiertes Entkoppeln
Produzent sendet Nachrichten an eine Queue.
Konsument zieht und verarbeitet Nachrichten unabhängig.
Verhindert kaskadierende Ausfälle.
Produzent und Konsument skalieren unabhängig.
Muster: Worker-Queue
Mehrere Worker ziehen Nachrichten aus einer Queue.
Nachrichten werden parallel verarbeitet.
Ermöglicht horizontale Skalierung und höheren Durchsatz.
Nachrichtenreihenfolge nicht garantiert.
Muster: Publish/Subscribe
Publisher senden Nachrichten an ein SNS-Topic.
Mehrere Abonnenten erhalten dieselbe Nachricht.
Echtzeit-Broadcast an viele Konsumenten.
Muster: Fan-out
Eine Nachricht wird gleichzeitig an mehrere Konsumenten zugestellt.
Weit verbreitet in ereignisgesteuerten Architekturen.
Nützlich, wenn mehrere Services auf dasselbe Ereignis reagieren müssen.
Nachrichtenreihenfolge
Manche Workloads müssen Nachrichten in korrekter Reihenfolge verarbeiten.
Amazon SQS FIFO und Kinesis unterstützen geordnete Verarbeitung.
Strikte Ordnung reduziert den Durchsatz.
Korrektheit gegen Skalierbarkeit abwägen.
Lass uns üben!
Anwendungen auf AWS entwickeln
Preparing Video For Download...