PixWave
PixWave est un microservice de portefeuille numérique évolutif et performant conçu pour gérer les paiements en temps réel via PIX , en utilisant une architecture multi-passerelles . Le système intègre plusieurs passerelles de paiement, notamment Mercado Pago et Gerencianet , garantissant une fiabilité et des capacités de repli transparentes. En sélectionnant dynamiquement la passerelle la plus disponible à tout moment, PixWave minimise les temps d'arrêt et garantit un traitement continu des paiements.
L'architecture est conçue pour être résiliente, modulaire et évolutive , utilisant Docker pour la conteneurisation, Kubernetes pour l'orchestration, Redis pour la mise en cache, SNS pour la messagerie asynchrone et la pile ELK (Logstash, Elasticsearch, Kibana) pour la journalisation centralisée et la surveillance en temps réel. des performances du système.
Principales fonctionnalités
- Architecture multi-passerelles avec sélection de passerelle en temps réel et repli automatique.
- Traitement des tâches asynchrone avec mécanismes de nouvelle tentative pour gérer les transactions ayant échoué et les tâches de longue durée.
- Journalisation centralisée et surveillance en temps réel à l'aide de la pile ELK (Elasticsearch, Logstash, Kibana).
- Évolutivité et résilience optimisées par Docker et Kubernetes, garantissant que le système peut gérer des charges élevées et rester opérationnel sous contrainte.
Architecture du système
1. Architecture basée sur les microservices
PixWave suit une architecture basée sur des microservices , dans laquelle les composants clés, tels que le traitement des paiements, la gestion des utilisateurs et la surveillance des transactions, sont découplés en services indépendants. Cette conception permet de faire évoluer les services individuels de manière indépendante et de les maintenir sans affecter l'ensemble du système.
- Laravel est utilisé comme framework backend pour gérer les transactions de paiement, les interactions des utilisateurs et les demandes API.
- Docker conteneurise chaque service, garantissant ainsi la cohérence dans les environnements de développement, de test et de production.
- Kubernetes orchestre le déploiement et la gestion de ces conteneurs, en fournissant des fonctionnalités telles que la mise à l'échelle automatique, l'auto-réparation et l'équilibrage de charge.
2. Traitement des paiements
Le cœur de PixWave est son module de traitement des paiements, conçu pour gérer les transactions PIX en temps réel avec une haute disponibilité et une tolérance aux pannes. Le système intègre deux passerelles de paiement principales : Mercado Pago et Gerencianet , et utilise un mécanisme de sélection de passerelle intelligente.
2.1. Système multi-passerelles avec repli
- Le système tente d'abord de traiter les paiements via la passerelle principale (soit Mercado Pago, soit Gerencianet).
- Redis stocke l'état de disponibilité de chaque passerelle, permettant une récupération et une prise de décision rapides.
- Si la passerelle principale n'est pas disponible, le système passe immédiatement à la passerelle de secours, garantissant ainsi un traitement continu des paiements avec un temps d'arrêt minimal.
2.2. Gestion des transactions
- Toutes les transactions sont enregistrées dans MySQL , y compris des détails tels que le montant de la transaction, l'ID utilisateur, la passerelle utilisée, le statut (succès, échec ou en attente) et les horodatages.
- La gestion des statuts basée sur l'énumération standardise les statuts des transactions sur différentes passerelles pour assurer la cohérence dans la base de données.
- Les files d'attente de tâches gèrent le traitement des paiements de manière asynchrone, permettant aux utilisateurs d'initier des paiements sans attendre la fin du processus.
3. Mécanismes de travail et de nouvelle tentative
Le système Job de PixWave est essentiel pour gérer des tâches telles que le traitement des paiements et les tentatives. En répartissant les tâches pour les demandes de paiement de manière asynchrone, PixWave offre une expérience non bloquante aux utilisateurs et augmente la réactivité globale du système.
3.1. Gestion des tâches
- Lorsqu'un paiement est demandé, une tâche est envoyée pour traiter la transaction de manière asynchrone, en contactant la passerelle de paiement concernée pour soumettre la transaction et récupérer le résultat.
- Les tâches sont traitées en parallèle, garantissant un traitement efficace de gros volumes de paiements.
3.2. Mécanisme de nouvelle tentative
- Si une tentative de paiement échoue en raison de problèmes de passerelle, le système réessaye jusqu'à 3 fois avant de marquer la transaction comme ayant échoué.
- Après toutes les tentatives de paiement, le système passe à la passerelle de secours et retente le paiement.
- Si la solution de secours échoue également, la transaction est enregistrée comme ayant échoué et des alertes peuvent être envoyées via SNS pour une enquête plus approfondie.
4. Mise en cache avec Redis
PixWave utilise Redis pour la mise en cache afin d'améliorer les performances et de réduire la charge sur la base de données principale.
- Disponibilité de la passerelle : mise en cache dans Redis, permettant au système de déterminer rapidement quelle passerelle de paiement utiliser sans effectuer d'appels API redondants.
- Recherches de transactions : les transactions récemment traitées sont mises en cache, ce qui permet une recherche rapide et réduit les requêtes inutiles sur la base de données MySQL.
5. Journalisation et surveillance centralisées
Logstash et Elasticsearch sont utilisés pour gérer la journalisation centralisée, fournissant des informations en temps réel sur les événements, les erreurs et les mesures de performances du système.
- Logstash collecte les journaux de tous les services (Laravel, files d'attente de tâches, passerelles de paiement) et les envoie à Elasticsearch pour indexation.
- Elasticsearch permet des requêtes puissantes pour les vérifications de l'état du système et le dépannage.
- Kibana propose un tableau de bord graphique pour explorer les journaux, suivre les erreurs et visualiser les performances du système.
6. File d'attente des messages et notifications asynchrones
PixWave utilise SNS (Simple Notification Service) pour la messagerie entre microservices et pour l'envoi de notifications à des systèmes externes.
- Lorsqu'une transaction est traitée, des notifications sont envoyées à des systèmes externes (par exemple, des applications utilisateur ou des services tiers) via SNS, garantissant ainsi que le système reste réactif même en cas de trafic élevé.
- La messagerie interne entre les composants du système est gérée via SQL et SNS , garantissant une communication découplée entre les services.
Instructions d'installation
1. Cloner le référentiel
Pour commencer, clonez le référentiel PixWave sur votre machine locale :
git clone https://github.com/your-repository/pixwave.git
cd pixwave
2. Configurer les variables d'environnement
Copiez le fichier .env.example
dans .env
et configurez vos variables d'environnement. Ces variables incluent les informations d'identification de la base de données, les informations d'identification de la passerelle de paiement (Mercado Pago et Gerencianet) et les clés API pour d'autres services :
Mettez à jour les valeurs suivantes dans le fichier .env
:
-
DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
– Paramètres de la base de données MySQL. -
MERCADOPAGO_ACCESS_TOKEN
– Jeton d'accès Mercado Pago. -
GERENCIANET_CLIENT_ID
, GERENCIANET_CLIENT_SECRET
, GERENCIANET_PIX_KEY
– Informations d'identification de l'API Gerencianet. -
SNS_API_KEY
– Votre clé API SNS pour les notifications. -
LOGSTASH_HOST
– Hôte du service Logstash (pour la journalisation centralisée).
3. Installer les dépendances
Exécutez la commande suivante pour installer toutes les dépendances requises :
4. Configurer Docker
Assurez-vous que Docker est installé sur votre ordinateur. Ensuite, utilisez Docker Compose pour créer et exécuter les conteneurs nécessaires :
docker-compose up --build
Cette commande démarrera les services suivants :
- Application Laravel (backend PHP)
- MySQL (base de données relationnelle)
- Redis (Cache)
- Elasticsearch & Logstash (journalisation centralisée)
- Kibana (interface d'analyse des journaux)
5. Exécutez des migrations et des semoirs
Une fois les conteneurs opérationnels, exécutez les migrations pour configurer le schéma de base de données et amorcer certaines données initiales :
docker exec -it laravel_app php artisan migrate --seed
6. Générer une clé d'application
Générez la clé de chiffrement de l'application, qui est utilisée par Laravel pour le chiffrement sécurisé :
docker exec -it laravel_app php artisan key:generate
7. Exécutez l'application
Une fois tout configuré, vous pouvez désormais accéder à l'application. Par défaut, l'application sera disponible sur http://localhost
:
Visitez http://localhost
dans votre navigateur pour interagir avec le système PixWave.
Exécution de tests
PixWave comprend une suite de tests complète. Pour exécuter les tests, assurez-vous que vous vous trouvez dans le conteneur Docker ou que vous disposez d'un environnement local configuré. Exécutez la commande suivante :
docker exec -it laravel_app php artisan test
Celui-ci exécutera les tests unitaires et de fonctionnalités pour garantir la fonctionnalité du système de paiement, y compris le traitement des tâches, le repli de la passerelle et la gestion de l'historique des transactions.
Dépannage
Conflits de ports : si vous rencontrez des conflits de ports (par exemple, Redis ou MySQL déjà exécutés sur votre système), mettez à jour le fichier docker-compose.yml
pour modifier les mappages de ports par défaut.
Erreurs d'autorisation : si des problèmes d'autorisation surviennent lors de la tentative d'écriture dans les journaux ou le stockage, assurez-vous que les répertoires storage/
et bootstrap/cache/
sont accessibles en écriture en exécutant :
sudo chmod -R 775 storage
sudo chmod -R 775 bootstrap/cache
Redémarrages des conteneurs : si les conteneurs redémarrent ou ne s'exécutent pas, consultez les journaux pour connaître les messages d'erreur détaillés :
Technologies utilisées
1. Cadre back-end
- Laravel : utilisé pour développer la logique de base de traitement des paiements et les interactions API.
2. Base de données
- MySQL : base de données relationnelle pour stocker les détails des transactions, les données utilisateur et les informations de passerelle.
3. Cache
- Redis : Couche de mise en cache pour optimiser les temps de réponse et réduire la charge sur la base de données primaire.
4. Messagerie
- SNS (Simple Notification Service) : utilisé pour envoyer des notifications asynchrones et des messages internes entre les services.
5. File d'attente des travaux
- Laravel Jobs : gère le traitement des tâches en arrière-plan, y compris les transactions de paiement et les tentatives.
- Conteneurisation et orchestration
- Docker : assure la cohérence entre les environnements en conteneurisant l'application.
- Kubernetes : gère l'orchestration des conteneurs, la mise à l'échelle et les vérifications de l'état des services.
7. Journalisation et surveillance
- Logstash & Elasticsearch : collecte et indexe les journaux pour une surveillance et une analyse en temps réel.
- Kibana : fournit une interface visuelle pour explorer les journaux et suivre les performances du système.