PixWave
PixWave es un microservicio de billetera digital escalable y de alto rendimiento diseñado para manejar pagos en tiempo real a través de PIX , utilizando una arquitectura de múltiples puertas de enlace . El sistema integra múltiples pasarelas de pago, incluidas Mercado Pago y Gerencianet , lo que garantiza confiabilidad y capacidades de respaldo perfectas. Al seleccionar dinámicamente la puerta de enlace más disponible en un momento dado, PixWave minimiza el tiempo de inactividad y garantiza un procesamiento de pagos continuo.
La arquitectura está diseñada para ser resistente, modular y escalable , utilizando Docker para contenerización, Kubernetes para orquestación, Redis para almacenamiento en caché, SNS para mensajería asincrónica y la pila ELK (Logstash, Elasticsearch, Kibana) para registro centralizado y monitoreo en tiempo real. del rendimiento del sistema.
Características clave
- Arquitectura de múltiples puertas de enlace con selección de puertas de enlace en tiempo real y respaldo automático.
- Procesamiento de trabajos asincrónicos con mecanismos de reintento para manejar transacciones fallidas y tareas de larga duración.
- Registro centralizado y monitoreo en tiempo real utilizando la pila ELK (Elasticsearch, Logstash, Kibana).
- Escalabilidad y resiliencia impulsadas por Docker y Kubernetes, lo que garantiza que el sistema pueda manejar cargas elevadas y permanecer operativo bajo estrés.
Arquitectura del sistema
1. Arquitectura basada en microservicios
PixWave sigue una arquitectura basada en microservicios , donde los componentes clave, como el procesamiento de pagos, la gestión de usuarios y el monitoreo de transacciones, se desacoplan en servicios independientes. Este diseño permite escalar servicios individuales de forma independiente y mantenerlos sin afectar a todo el sistema.
- Laravel se utiliza como marco de backend para gestionar transacciones de pago, interacciones de usuarios y solicitudes de API.
- Docker contiene cada servicio, lo que garantiza la coherencia en los entornos de desarrollo, prueba y producción.
- Kubernetes organiza la implementación y gestión de estos contenedores, proporcionando funciones como escalado automático, autorreparación y equilibrio de carga.
2. Procesamiento de pagos
El núcleo de PixWave es su módulo de procesamiento de pagos, diseñado para manejar transacciones PIX en tiempo real con alta disponibilidad y tolerancia a fallas. El sistema integra dos pasarelas de pago principales: Mercado Pago y Gerencianet , y utiliza un mecanismo de selección de pasarela inteligente.
2.1. Sistema de múltiples puertas de enlace con respaldo
- El sistema primero intenta procesar los pagos a través de la puerta de enlace principal (ya sea Mercado Pago o Gerencianet).
- Redis almacena el estado de disponibilidad de cada puerta de enlace, lo que permite una recuperación y toma de decisiones rápidas.
- Si la puerta de enlace principal no está disponible, el sistema cambia inmediatamente a la puerta de enlace alternativa, lo que garantiza un procesamiento de pagos continuo con un tiempo de inactividad mínimo.
2.2. Gestión de transacciones
- Todas las transacciones se registran en MySQL , incluidos detalles como el monto de la transacción, la identificación del usuario, la puerta de enlace utilizada, el estado (éxito, fallido o pendiente) y marcas de tiempo.
- La gestión de estado basada en enumeraciones estandariza los estados de las transacciones en diferentes puertas de enlace para lograr coherencia en la base de datos.
- Las colas de trabajos manejan el procesamiento de pagos de forma asincrónica, lo que permite a los usuarios iniciar pagos sin esperar a que se complete todo el proceso.
3. Mecanismos de trabajo y reintento
El sistema de trabajos en PixWave es fundamental para manejar tareas como el procesamiento de pagos y los reintentos. Al enviar trabajos para solicitudes de pago de forma asincrónica, PixWave proporciona una experiencia sin bloqueo para los usuarios y aumenta la capacidad de respuesta general del sistema.
3.1. Manejo de Trabajo
- Cuando se solicita un pago, se envía un trabajo para procesar la transacción de forma asincrónica, comunicándose con la pasarela de pago correspondiente para enviar la transacción y recuperar el resultado.
- Los trabajos se procesan en paralelo, lo que garantiza un manejo eficiente de grandes volúmenes de pagos.
3.2. Mecanismo de reintento
- Si un intento de pago falla debido a problemas con la puerta de enlace, el sistema lo reintenta hasta 3 veces antes de marcar la transacción como fallida.
- Después de todos los reintentos, el sistema cambia a la puerta de enlace alternativa y vuelve a intentar el pago.
- Si el respaldo también falla, la transacción se registra como fallida y se pueden enviar alertas a través de SNS para una mayor investigación.
4. Almacenamiento en caché con Redis
PixWave utiliza Redis para el almacenamiento en caché para mejorar el rendimiento y reducir la carga en la base de datos principal.
- Disponibilidad de la puerta de enlace : almacenada en caché en Redis, lo que permite al sistema determinar rápidamente qué pasarela de pago utilizar sin realizar llamadas API redundantes.
- Búsquedas de transacciones : las transacciones procesadas recientemente se almacenan en caché, lo que permite una búsqueda rápida y reduce las consultas innecesarias a la base de datos MySQL.
5. Registro y monitoreo centralizados
Logstash y Elasticsearch se utilizan para gestionar el registro centralizado, proporcionando información en tiempo real sobre eventos, errores y métricas de rendimiento del sistema.
- Logstash recopila registros de todos los servicios (Laravel, colas de trabajos, pasarelas de pago) y los envía a Elasticsearch para su indexación.
- Elasticsearch permite realizar consultas potentes para comprobar el estado del sistema y solucionar problemas.
- Kibana ofrece un panel gráfico para explorar registros, rastrear errores y visualizar el rendimiento del sistema.
6. Cola de mensajes y notificaciones asincrónicas
PixWave utiliza SNS (Servicio de notificación simple) para enviar mensajes entre microservicios y enviar notificaciones a sistemas externos.
- Cuando se procesa una transacción, se envían notificaciones a sistemas externos (por ejemplo, aplicaciones de usuario o servicios de terceros) a través de SNS, lo que garantiza que el sistema siga respondiendo incluso con mucho tráfico.
- La mensajería interna entre los componentes del sistema se maneja a través de SQL y SNS , lo que garantiza una comunicación desacoplada entre los servicios.
Instrucciones de instalación
1. Clonar el repositorio
Para comenzar, clona el repositorio de PixWave en tu máquina local:
git clone https://github.com/your-repository/pixwave.git
cd pixwave
2. Configurar variables de entorno
Copie el archivo .env.example
a .env
y configure sus variables de entorno. Estas variables incluyen credenciales de bases de datos, credenciales de pasarelas de pago (Mercado Pago y Gerencianet) y claves API para otros servicios:
Actualice los siguientes valores en el archivo .env
:
-
DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
: configuración de la base de datos MySQL. -
MERCADOPAGO_ACCESS_TOKEN
– Token de acceso a Mercado Pago. -
GERENCIANET_CLIENT_ID
, GERENCIANET_CLIENT_SECRET
, GERENCIANET_PIX_KEY
: credenciales de la API de Gerencianet. -
SNS_API_KEY
: su clave API de SNS para notificaciones. -
LOGSTASH_HOST
: host para el servicio Logstash (para registro centralizado).
3. Instalar dependencias
Ejecute el siguiente comando para instalar todas las dependencias necesarias:
4. Configurar la ventana acoplable
Asegúrese de tener Docker instalado en su máquina. Luego, use Docker Compose para construir y ejecutar los contenedores necesarios:
docker-compose up --build
Este comando iniciará los siguientes servicios:
- Aplicación Laravel (backend PHP)
- MySQL (base de datos relacional)
- Redis (caché)
- Elasticsearch y Logstash (registro centralizado)
- Kibana (interfaz de análisis de registros)
5. Ejecute migraciones y sembradoras
Una vez que los contenedores estén en funcionamiento, ejecute las migraciones para configurar el esquema de la base de datos y generar algunos datos iniciales:
docker exec -it laravel_app php artisan migrate --seed
6. Generar clave de aplicación
Genere la clave de cifrado de la aplicación, que Laravel utiliza para el cifrado seguro:
docker exec -it laravel_app php artisan key:generate
7. Ejecute la aplicación
Con todo configurado, ya puedes acceder a la aplicación. De forma predeterminada, la aplicación estará disponible en http://localhost
:
Visite http://localhost
en su navegador para interactuar con el sistema PixWave.
Ejecución de pruebas
PixWave incluye un conjunto de pruebas completo. Para ejecutar las pruebas, asegúrese de estar dentro del contenedor Docker o de tener un entorno local configurado. Ejecute el siguiente comando:
docker exec -it laravel_app php artisan test
Esto ejecutará las pruebas unitarias y de funciones para garantizar la funcionalidad del sistema de pago, incluido el procesamiento de trabajos, el respaldo de la puerta de enlace y la gestión del historial de transacciones.
Solución de problemas
Conflictos de puertos : si encuentra conflictos de puertos (por ejemplo, Redis o MySQL ya se están ejecutando en su sistema), actualice el archivo docker-compose.yml
para cambiar las asignaciones de puertos predeterminadas.
Errores de permisos : si surgen problemas de permisos al intentar escribir en registros o almacenamiento, asegúrese de que se pueda escribir en los directorios storage/
y bootstrap/cache/
ejecutando:
sudo chmod -R 775 storage
sudo chmod -R 775 bootstrap/cache
Reinicios de contenedores : si los contenedores se reinician o no se ejecutan, verifique los registros para ver mensajes de error detallados:
Tecnologías utilizadas
1. Marco de fondo
- Laravel : se utiliza para desarrollar la lógica central de procesamiento de pagos y las interacciones API.
2. Base de datos
- MySQL : base de datos relacional para almacenar detalles de transacciones, datos de usuario e información de puerta de enlace.
3. caché
- Redis : capa de almacenamiento en caché para optimizar los tiempos de respuesta y reducir la carga en la base de datos principal.
4. Mensajería
- SNS (Servicio de notificación simple) : se utiliza para enviar notificaciones asincrónicas y mensajes internos entre servicios.
5. Cola de trabajos
- Laravel Jobs : gestiona el procesamiento de trabajos en segundo plano, incluidas las transacciones de pago y los reintentos.
- Contenedorización y orquestación
- Docker : garantiza la coherencia entre entornos al contener la aplicación.
- Kubernetes : maneja la orquestación de contenedores, el escalado y las comprobaciones de estado de los servicios.
7. Registro y monitoreo
- Logstash y Elasticsearch : recopila e indexa registros para monitoreo y análisis en tiempo real.
- Kibana : proporciona una interfaz visual para explorar registros y rastrear el rendimiento del sistema.