- Funktionen
- Pricing

Dieser Blog basiert auf dem Vortrag von Haylee Millar auf der Symfony 2024-Konferenz. Haley ist Produktingenieurin bei Upsun. Wir haben KI-Tools für die Transkription und zur Verbesserung der Struktur und Klarheit der Inhalte eingesetzt.
Wenn sie mit einem veralteten System konfrontiert sind, das neue Features benötigt, stehen viele Entwicklungsteams vor einer Entscheidung. Patching Sie das alte System und riskieren technische Schulden oder wagen Sie den Sprung in die Microservices-Architektur? Dies ist die Geschichte, wie ein Team diese Entscheidung getroffen hat und was es dabei gelernt hat.
Ein Microservice ist ein unabhängiger Dienst, der über APIs mit anderen Diensten kommuniziert. Jeder Dienst ist lose gekoppelt und kann eigenständig erstellt, bereitgestellt und skaliert werden. Er muss keine eigene Datenbank haben, aber viele haben eine. Der Schlüssel ist die Trennung, sodass ein Dienst geändert werden kann, ohne dass Änderungen in der gesamten Anwendung erforderlich sind.
Stellen Sie sich das wie eine Restaurantküche vor. Bei einem monolithischen Ansatz kümmert sich ein Koch um alles – Vorspeisen, Hauptgerichte, Desserts und Getränke. Bei Microservices gibt es spezialisierte Stationen: einen Salatkoch, einen Grillmeister, einen Konditor und einen Barkeeper, die jeweils Experten auf ihrem Gebiet sind, sich aber abstimmen, um komplette Mahlzeiten zu servieren.
Microservices können eine geeignete Lösung sein, wenn mehrere Teams Autonomie benötigen, wenn sich verschiedene Features mit unterschiedlicher Geschwindigkeit weiterentwickeln und wenn Sie eine unabhängige Entwicklung, Bereitstellung und Skalierung für bestimmte Teile der Anwendung benötigen. Sie sind nicht die einzige Antwort. In der Regel gibt es mehrere Möglichkeiten, ein Problem zu lösen. Wählen Sie den Ansatz, der Ihren Anforderungen und Einschränkungen am besten entspricht.
Unser Team ist für die Kontoverwaltung zuständig. Wir betrieben eine interne Website, die auf einem Drupal-Monolithen basierte. Wir planten, diese aus dem Verkehr zu ziehen, mussten jedoch zunächst ein akutes Problem lösen: den Missbrauch des Produkts durch Benutzer.
Wir hätten der Drupal-App neue Features zum Schutz vor Missbrauch hinzufügen können. Wir haben uns dagegen entschieden. Gründe:
Wir schlugen einen neuen Microservice für die Implementierung einer Anti-Missbrauchs-Logik vor. Dieser Vorschlag fand in unseren Diskussionen großen Anklang.
Wir haben einen Symfony-Microservice namens Know Your Customer (KYC) entwickelt. KYC überprüft die Identität und das Risiko von Kunden. Wir haben bewusst klein angefangen, damit wir schnell liefern und lernen konnten.
Wir haben uns auf fünf Bausteine konzentriert:
Wir haben die Zuständigkeiten klar geregelt. KYC berechnete eine Bewertung, entschied jedoch nicht über die Begrenzung von Ressourcen. Unser Kontoservice rief die KYC-Bewertung ab und entschied, ob eine Benutzeraktion fortgesetzt oder gestoppt werden sollte.
Ab Version 1.7 haben wir Symfony Messenger hinzugefügt, um IP-Scores von einem externen Dienst zu synchronisieren.
Da wir ein Platform-as-a-Service-Unternehmen sind, haben wir den Dienst auf unserer Plattform gehostet. Für Teams, die sich für die Bereitstellung von Symfony interessieren, haben wir gezeigt, wie man eine Demo-App mit der Symfony-Befehlszeile einrichtet und wie man ein bestehendes Projekt initialisiert, die erforderlichen Dateien hinzufügt und bereitstellt.
Wir haben das KYC-Design im Juni 2022 fertiggestellt. Nach der Einigung der Stakeholder dauerte die Umsetzung etwa sechs Monate. Seitdem haben wir ein konstantes Release-Tempo beibehalten. Zum Zeitpunkt des Vortrags waren wir bei Version 2.23 angelangt.
Was sich zwischen 1.0 und 2.23 geändert hat:
Welche Tools waren für Microservices am hilfreichsten?
Die größte Errungenschaft war die Wahl von Symfony. Es ist leichtgewichtig und modular, und wir sind bereits mit PHP vertraut. Die Bundles lieferten uns die benötigten Bausteine, ohne dass wir aufwendige benutzerdefinierte Tools benötigten.
Versionen Sie Ihre API-Endpunkte, z. B. /v1 und /v2? Das haben
wir bisher noch nicht getan, aber es ist eine gute Idee, darüber nachzudenken.
Wie sind Sie mit dem Datenschutz umgegangen?
Wir vermeiden es, personenbezogene Daten in KYC zu speichern, wenn dies nicht erforderlich ist. Stattdessen verwenden wir eindeutige IDs, um bei Bedarf personenbezogene Daten im Kontoservice abzurufen. Während der Synchronisierung stellen wir sicher, dass wir nur das Notwendige übertragen.
Teilen Sie das Programmieren zwischen Symfony-Projekten? Derzeit
nicht. Wir haben einfach mit den Standard-Bundles begonnen. Gemeinsame Pakete könnten später sinnvoll sein, wenn der Bedarf wächst.
Was ist mit dem Drupal-Monolithen?
Der existiert noch. Wir gehen schrittweise vor. Man kann nicht alles auf einmal umschreiben. Wir nehmen Teile heraus und implementieren sie auf modularere Weise neu. Wo immer möglich, suchen wir nach bestehenden Produkten, anstatt alles von Grund auf neu zu entwickeln.
Wie haben Sie die Synchronisierung externer Dienste und die Verfügbarkeit gehandhabt? Die größte Herausforderung
bestand darin, die Benutzerdaten auf dem neuesten Stand zu halten. Wir haben eine Aktualisierungslogik hinzugefügt und sichergestellt, dass die Punktzahlen berechnet werden, sobald Konten erstellt werden. Wir verwenden einen Synchronisierungs-Worker und einen asynchronen Pfad dahinter, sodass wir auch dann zurechtkommen, wenn eine Punktzahl nicht sofort verfügbar ist.
Mikroservices sind keine Zauberei. Sie sind eine Möglichkeit, schneller voranzukommen, wenn Teams Autonomie benötigen und Teile Ihres Systems sich mit unterschiedlicher Geschwindigkeit ändern. Für uns bedeutete die Ausgliederung von KYC als Mikroservice, dass wir schnell Features zur Missbrauchsbekämpfung bereitstellen, unseren Stack auf dem neuesten Stand halten und vermeiden konnten, einen Monolithen, den wir ausmustern wollen, zusätzlich zu belasten.
Join our monthly newsletter
Compliant and validated