PixWave
PixWave ist ein skalierbarer und leistungsstarker Mikroservice für digitale Geldbörsen, der für die Abwicklung von Echtzeitzahlungen über PIX unter Verwendung einer Multi-Gateway-Architektur entwickelt wurde. Das System integriert mehrere Zahlungsgateways, darunter Mercado Pago und Gerencianet , und gewährleistet so Zuverlässigkeit und nahtlose Fallback-Funktionen. Durch die dynamische Auswahl des zu jedem Zeitpunkt am besten verfügbaren Gateways minimiert PixWave Ausfallzeiten und gewährleistet eine kontinuierliche Zahlungsabwicklung.
Die Architektur ist belastbar, modular und skalierbar aufgebaut und verwendet Docker für die Containerisierung, Kubernetes für die Orchestrierung, Redis für Caching, SNS für asynchrones Messaging und den ELK-Stack (Logstash, Elasticsearch, Kibana) für zentralisierte Protokollierung und Echtzeitüberwachung der Systemleistung.
Hauptmerkmale
- Multi-Gateway-Architektur mit Echtzeit-Gateway-Auswahl und automatischem Fallback.
- Asynchrone Jobverarbeitung mit Wiederholungsmechanismen zur Behandlung fehlgeschlagener Transaktionen und lang andauernder Aufgaben.
- Zentralisierte Protokollierung und Echtzeitüberwachung mithilfe des ELK-Stacks (Elasticsearch, Logstash, Kibana).
- Skalierbarkeit und Ausfallsicherheit durch Docker und Kubernetes stellen sicher, dass das System hohe Lasten bewältigen kann und auch unter Belastung betriebsbereit bleibt.
Systemarchitektur
1. Microservice-basierte Architektur
PixWave folgt einer Microservice-basierten Architektur , bei der Schlüsselkomponenten – wie Zahlungsabwicklung, Benutzerverwaltung und Transaktionsüberwachung – in unabhängige Dienste entkoppelt sind. Dieses Design ermöglicht es, einzelne Dienste unabhängig zu skalieren und zu warten, ohne das gesamte System zu beeinträchtigen.
- Laravel wird als Backend-Framework zur Verwaltung von Zahlungstransaktionen, Benutzerinteraktionen und API-Anfragen verwendet.
- Docker containerisiert jeden Dienst und sorgt so für Konsistenz in Entwicklungs-, Test- und Produktionsumgebungen.
- Kubernetes orchestriert die Bereitstellung und Verwaltung dieser Container und bietet Funktionen wie automatische Skalierung, Selbstheilung und Lastausgleich.
2. Zahlungsabwicklung
Der Kern von PixWave ist das Zahlungsverarbeitungsmodul, das für die Abwicklung von PIX-Transaktionen in Echtzeit mit hoher Verfügbarkeit und Fehlertoleranz ausgelegt ist. Das System integriert zwei primäre Zahlungsgateways: Mercado Pago und Gerencianet und nutzt einen intelligenten Gateway-Auswahlmechanismus.
2.1. Multi-Gateway-System mit Fallback
- Das System versucht zunächst, Zahlungen über das primäre Gateway (entweder Mercado Pago oder Gerencianet) abzuwickeln.
- Redis speichert den Verfügbarkeitsstatus jedes Gateways und ermöglicht so einen schnellen Abruf und eine schnelle Entscheidungsfindung.
- Wenn das primäre Gateway nicht verfügbar ist, schaltet das System sofort auf das Fallback-Gateway um und gewährleistet so eine kontinuierliche Zahlungsabwicklung mit minimalen Ausfallzeiten.
2.2. Transaktionsmanagement
- Alle Transaktionen werden in MySQL protokolliert, einschließlich Details wie Transaktionsbetrag, Benutzer-ID, verwendetes Gateway, Status (Erfolg, fehlgeschlagen oder ausstehend) und Zeitstempel.
- Das auf Enum basierende Statusmanagement standardisiert Transaktionsstatus über verschiedene Gateways hinweg und sorgt so für Konsistenz in der Datenbank.
- Auftragswarteschlangen verarbeiten die Zahlungsabwicklung asynchron, sodass Benutzer Zahlungen veranlassen können, ohne auf den Abschluss des gesamten Vorgangs warten zu müssen.
3. Job- und Wiederholungsmechanismen
Das Jobsystem in PixWave ist für die Abwicklung von Aufgaben wie Zahlungsabwicklung und Wiederholungsversuchen von entscheidender Bedeutung. Durch das asynchrone Versenden von Aufträgen für Zahlungsanfragen bietet PixWave Benutzern ein nicht blockierendes Erlebnis und erhöht die Reaktionsfähigkeit des Gesamtsystems.
3.1. Auftragsabwicklung
- Wenn eine Zahlung angefordert wird, wird ein Job gesendet, um die Transaktion asynchron zu verarbeiten und das entsprechende Zahlungsgateway zu kontaktieren, um die Transaktion zu übermitteln und das Ergebnis abzurufen.
- Die parallele Bearbeitung der Aufträge gewährleistet eine effiziente Abwicklung großer Zahlungsvolumina.
3.2. Wiederholungsmechanismus
- Wenn ein Zahlungsversuch aufgrund von Gateway-Problemen fehlschlägt, versucht das System bis zu dreimal erneut, bevor die Transaktion als fehlgeschlagen markiert wird.
- Nach allen Wiederholungsversuchen wechselt das System zum Fallback-Gateway und versucht die Zahlung erneut.
- Wenn auch der Fallback fehlschlägt, wird die Transaktion als fehlgeschlagen protokolliert und es können Warnungen zur weiteren Untersuchung über SNS gesendet werden.
4. Caching mit Redis
PixWave verwendet Redis zum Caching, um die Leistung zu steigern und die Belastung der Primärdatenbank zu reduzieren.
- Gateway-Verfügbarkeit : In Redis zwischengespeichert, sodass das System schnell bestimmen kann, welches Zahlungs-Gateway verwendet werden soll, ohne redundante API-Aufrufe durchzuführen.
- Transaktionssuche : Kürzlich verarbeitete Transaktionen werden zwischengespeichert, was eine schnelle Suche ermöglicht und unnötige Abfragen an die MySQL-Datenbank reduziert.
5. Zentralisierte Protokollierung und Überwachung
Logstash und Elasticsearch werden zur Verwaltung der zentralen Protokollierung verwendet und bieten Echtzeit-Einblicke in Systemereignisse, Fehler und Leistungsmetriken.
- Logstash sammelt Protokolle von allen Diensten (Laravel, Jobwarteschlangen, Zahlungsgateways) und sendet sie zur Indizierung an Elasticsearch .
- Elasticsearch ermöglicht leistungsstarke Abfragen für Systemzustandsprüfungen und Fehlerbehebung.
- Kibana bietet ein grafisches Dashboard zum Durchsuchen von Protokollen, zum Verfolgen von Fehlern und zum Visualisieren der Systemleistung.
6. Nachrichtenwarteschlange und asynchrone Benachrichtigungen
PixWave verwendet SNS (Simple Notification Service) für die Nachrichtenübermittlung zwischen Microservices und zum Senden von Benachrichtigungen an externe Systeme.
- Wenn eine Transaktion verarbeitet wird, werden Benachrichtigungen über SNS an externe Systeme (z. B. Benutzer-Apps oder Dienste von Drittanbietern) gesendet, um sicherzustellen, dass das System auch bei hohem Datenverkehr reaktionsfähig bleibt.
- Die interne Nachrichtenübermittlung zwischen Systemkomponenten wird über SQL und SNS abgewickelt, wodurch eine entkoppelte Kommunikation zwischen Diensten gewährleistet wird.
Installationsanweisungen
1. Klonen Sie das Repository
Klonen Sie zunächst das PixWave-Repository auf Ihren lokalen Computer:
git clone https://github.com/your-repository/pixwave.git
cd pixwave
2. Umgebungsvariablen einrichten
Kopieren Sie die Datei .env.example
nach .env
und konfigurieren Sie Ihre Umgebungsvariablen. Zu diesen Variablen gehören Datenbankanmeldeinformationen, Zahlungsgateway-Anmeldeinformationen (Mercado Pago und Gerencianet) und API-Schlüssel für andere Dienste:
Aktualisieren Sie die folgenden Werte in der .env
Datei:
-
DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
– MySQL-Datenbankeinstellungen. -
MERCADOPAGO_ACCESS_TOKEN
– Mercado Pago-Zugriffstoken. -
GERENCIANET_CLIENT_ID
, GERENCIANET_CLIENT_SECRET
, GERENCIANET_PIX_KEY
– Gerencianet-API-Anmeldeinformationen. -
SNS_API_KEY
– Ihr SNS-API-Schlüssel für Benachrichtigungen. -
LOGSTASH_HOST
– Host für den Logstash-Dienst (für zentralisierte Protokollierung).
3. Abhängigkeiten installieren
Führen Sie den folgenden Befehl aus, um alle erforderlichen Abhängigkeiten zu installieren:
4. Richten Sie Docker ein
Stellen Sie sicher, dass Docker auf Ihrem Computer installiert ist. Verwenden Sie dann Docker Compose, um die erforderlichen Container zu erstellen und auszuführen:
docker-compose up --build
Dieser Befehl startet die folgenden Dienste:
- Laravel-App (PHP-Backend)
- MySQL (Relationale Datenbank)
- Redis (Cache)
- Elasticsearch & Logstash (Zentralisierte Protokollierung)
- Kibana (Protokollanalyseschnittstelle)
5. Führen Sie Migrationen und Seeder aus
Nachdem die Container betriebsbereit sind, führen Sie die Migrationen aus, um das Datenbankschema einzurichten und einige Anfangsdaten zu generieren:
docker exec -it laravel_app php artisan migrate --seed
6. Anwendungsschlüssel generieren
Generieren Sie den Anwendungsverschlüsselungsschlüssel, der von Laravel für die sichere Verschlüsselung verwendet wird:
docker exec -it laravel_app php artisan key:generate
7. Führen Sie die Anwendung aus
Nachdem alles eingerichtet ist, können Sie nun auf die Anwendung zugreifen. Standardmäßig ist die Anwendung unter http://localhost
verfügbar:
Besuchen Sie http://localhost
in Ihrem Browser, um mit dem PixWave-System zu interagieren.
Ausführen von Tests
PixWave enthält eine umfassende Testsuite. Stellen Sie zum Ausführen der Tests sicher, dass Sie sich im Docker-Container befinden oder eine lokale Umgebung eingerichtet haben. Führen Sie den folgenden Befehl aus:
docker exec -it laravel_app php artisan test
Dadurch werden die Unit- und Feature-Tests durchgeführt, um die Funktionalität des Zahlungssystems sicherzustellen, einschließlich Auftragsverarbeitung, Gateway-Fallback und Transaktionsverlaufsverwaltung.
Fehlerbehebung
Portkonflikte : Wenn Sie auf Portkonflikte stoßen (z. B. Redis oder MySQL laufen bereits auf Ihrem System), aktualisieren Sie die Datei docker-compose.yml
um die Standard-Portzuordnungen zu ändern.
Berechtigungsfehler : Wenn beim Versuch, in Protokolle oder Speicher zu schreiben, Berechtigungsprobleme auftreten, stellen Sie sicher, dass die Verzeichnisse storage/
und bootstrap/cache/
beschreibbar sind, indem Sie Folgendes ausführen:
sudo chmod -R 775 storage
sudo chmod -R 775 bootstrap/cache
Container-Neustarts : Wenn Container neu gestartet werden oder nicht ausgeführt werden können, überprüfen Sie die Protokolle auf detaillierte Fehlermeldungen:
Verwendete Technologien
1. Backend-Framework
- Laravel : Wird zur Entwicklung der Kernlogik für die Zahlungsabwicklung und der API-Interaktionen verwendet.
2. Datenbank
- MySQL : Relationale Datenbank zum Speichern von Transaktionsdetails, Benutzerdaten und Gateway-Informationen.
3. Cache
- Redis : Caching-Schicht zur Optimierung der Antwortzeiten und Reduzierung der Belastung der Primärdatenbank.
4. Nachrichten
- SNS (Simple Notification Service) : Wird zum Senden asynchroner Benachrichtigungen und interner Nachrichten zwischen Diensten verwendet.
5. Jobwarteschlange
- Laravel Jobs : Verwaltet die Verarbeitung von Hintergrundjobs, einschließlich Zahlungstransaktionen und Wiederholungsversuchen.
- Containerisierung und Orchestrierung
- Docker : Gewährleistet die umgebungsübergreifende Konsistenz durch Containerisierung der Anwendung.
- Kubernetes : Übernimmt die Container-Orchestrierung, Skalierung und Integritätsprüfungen für Dienste.
7. Protokollierung und Überwachung
- Logstash und Elasticsearch : Sammelt und indiziert Protokolle zur Echtzeitüberwachung und -analyse.
- Kibana : Bietet eine visuelle Schnittstelle zum Durchsuchen von Protokollen und zum Verfolgen der Systemleistung.