PixWave
PixWave é um microsserviço de carteira digital escalável e de alto desempenho projetado para lidar com pagamentos em tempo real via PIX , usando uma arquitetura multi-gateway . O sistema integra vários gateways de pagamento, incluindo Mercado Pago e Gerencianet , garantindo confiabilidade e recursos contínuos de fallback. Ao selecionar dinamicamente o gateway mais disponível a qualquer momento, PixWave minimiza o tempo de inatividade e garante o processamento contínuo de pagamentos.
A arquitetura é construída para ser resiliente, modular e escalável , usando Docker para conteinerização, Kubernetes para orquestração, Redis para cache, SNS para mensagens assíncronas e a pilha ELK (Logstash, Elasticsearch, Kibana) para registro centralizado e monitoramento em tempo real. do desempenho do sistema.
Principais recursos
- Arquitetura multigateway com seleção de gateway em tempo real e fallback automático.
- Processamento de tarefas assíncronas com mecanismos de repetição para lidar com transações com falha e tarefas de longa execução.
- Registro centralizado e monitoramento em tempo real usando a pilha ELK (Elasticsearch, Logstash, Kibana).
- Escalabilidade e resiliência alimentadas por Docker e Kubernetes, garantindo que o sistema possa lidar com cargas elevadas e permanecer operacional sob estresse.
Arquitetura do Sistema
1. Arquitetura baseada em microsserviços
PixWave segue uma arquitetura baseada em microsserviços , onde os principais componentes – como processamento de pagamentos, gerenciamento de usuários e monitoramento de transações – são dissociados em serviços independentes. Esse design permite dimensionar serviços individuais de forma independente e mantê-los sem afetar todo o sistema.
- Laravel é usado como estrutura de backend para gerenciar transações de pagamento, interações de usuários e solicitações de API.
- O Docker conteineriza cada serviço, garantindo consistência em ambientes de desenvolvimento, teste e produção.
- O Kubernetes orquestra a implantação e o gerenciamento desses contêineres, fornecendo recursos como escalonamento automático, autocorreção e balanceamento de carga.
2. Processamento de pagamento
O núcleo do PixWave é seu módulo de processamento de pagamentos, projetado para lidar com transações PIX em tempo real com alta disponibilidade e tolerância a falhas. O sistema integra dois gateways de pagamento principais: Mercado Pago e Gerencianet , e utiliza um mecanismo inteligente de seleção de gateway.
2.1. Sistema Multi-Gateway com Fallback
- O sistema primeiro tenta processar pagamentos através do gateway primário (Mercado Pago ou Gerencianet).
- O Redis armazena o status de disponibilidade de cada gateway, permitindo recuperação e tomada de decisões rápidas.
- Se o gateway primário não estiver disponível, o sistema muda imediatamente para o gateway substituto, garantindo o processamento contínuo do pagamento com tempo de inatividade mínimo.
2.2. Gerenciamento de transações
- Todas as transações são registradas no MySQL , incluindo detalhes como valor da transação, ID do usuário, gateway usado, status (sucesso, falha ou pendente) e carimbos de data/hora.
- O gerenciamento de status baseado em enum padroniza os status das transações em diferentes gateways para garantir consistência no banco de dados.
- As filas de trabalho lidam com o processamento de pagamentos de forma assíncrona, permitindo que os usuários iniciem pagamentos sem esperar que todo o processo seja concluído.
3. Mecanismos de trabalho e nova tentativa
O sistema Job no PixWave é fundamental para lidar com tarefas como processamento de pagamentos e novas tentativas. Ao despachar trabalhos para solicitações de pagamento de forma assíncrona, o PixWave fornece uma experiência sem bloqueio para os usuários e aumenta a capacidade de resposta geral do sistema.
3.1. Tratamento de trabalhos
- Quando um pagamento é solicitado, um trabalho é enviado para processar a transação de forma assíncrona, entrando em contato com o gateway de pagamento relevante para enviar a transação e recuperar o resultado.
- Os trabalhos são processados em paralelo, garantindo o tratamento eficiente de grandes volumes de pagamentos.
3.2. Mecanismo de nova tentativa
- Se uma tentativa de pagamento falhar devido a problemas de gateway, o sistema tentará novamente até 3 vezes antes de marcar a transação como falhada.
- Após todas as novas tentativas, o sistema muda para o gateway substituto e tenta novamente o pagamento.
- Se o fallback também falhar, a transação será registrada como falha e alertas poderão ser enviados via SNS para investigação adicional.
4. Cache com Redis
PixWave usa Redis para armazenamento em cache para melhorar o desempenho e reduzir a carga no banco de dados primário.
- Disponibilidade do gateway : armazenado em cache no Redis, permitindo que o sistema determine rapidamente qual gateway de pagamento usar sem fazer chamadas de API redundantes.
- Pesquisas de transações : as transações processadas recentemente são armazenadas em cache, permitindo pesquisas rápidas e reduzindo consultas desnecessárias ao banco de dados MySQL.
5. Registro e monitoramento centralizados
Logstash e Elasticsearch são usados para gerenciar registros centralizados, fornecendo insights em tempo real sobre eventos, erros e métricas de desempenho do sistema.
- O Logstash coleta logs de todos os serviços (Laravel, filas de tarefas, gateways de pagamento) e os envia ao Elasticsearch para indexação.
- O Elasticsearch permite consultas poderosas para verificações de integridade do sistema e solução de problemas.
- Kibana oferece um painel gráfico para explorar logs, rastrear erros e visualizar o desempenho do sistema.
6. Fila de mensagens e notificações assíncronas
PixWave usa SNS (Simple Notification Service) para mensagens entre microsserviços e para envio de notificações para sistemas externos.
- Quando uma transação é processada, notificações são enviadas para sistemas externos (por exemplo, aplicativos de usuários ou serviços de terceiros) via SNS, garantindo que o sistema permaneça responsivo mesmo sob tráfego intenso.
- As mensagens internas entre os componentes do sistema são tratadas via SQL e SNS , garantindo a comunicação desacoplada entre os serviços.
Instruções de instalação
1. Clone o repositório
Para começar, clone o repositório PixWave em sua máquina local:
git clone https://github.com/your-repository/pixwave.git
cd pixwave
2. Configure variáveis de ambiente
Copie o arquivo .env.example
para .env
e configure suas variáveis de ambiente. Essas variáveis incluem credenciais de banco de dados, credenciais de gateway de pagamento (Mercado Pago e Gerencianet) e chaves de API para outros serviços:
Atualize os seguintes valores no arquivo .env
:
-
DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
– configurações do banco de dados MySQL. -
MERCADOPAGO_ACCESS_TOKEN
– Token de acesso ao Mercado Pago. -
GERENCIANET_CLIENT_ID
, GERENCIANET_CLIENT_SECRET
, GERENCIANET_PIX_KEY
– credenciais da API Gerencianet. -
SNS_API_KEY
– Sua chave API SNS para notificações. -
LOGSTASH_HOST
– Host para serviço Logstash (para registro centralizado).
3. Instale dependências
Execute o seguinte comando para instalar todas as dependências necessárias:
4. Configure o Docker
Certifique-se de ter o Docker instalado em sua máquina. Em seguida, use o Docker Compose para criar e executar os contêineres necessários:
docker-compose up --build
Este comando iniciará os seguintes serviços:
- Aplicativo Laravel (back-end PHP)
- MySQL (banco de dados relacional)
- Redis (cache)
- Elasticsearch e Logstash (registro centralizado)
- Kibana (interface de análise de log)
5. Execute migrações e semeadores
Depois que os contêineres estiverem em funcionamento, execute as migrações para configurar o esquema do banco de dados e propagar alguns dados iniciais:
docker exec -it laravel_app php artisan migrate --seed
6. Gerar chave do aplicativo
Gere a chave de criptografia da aplicação, que é usada pelo Laravel para criptografia segura:
docker exec -it laravel_app php artisan key:generate
7. Execute o aplicativo
Com tudo configurado, agora você pode acessar o aplicativo. Por padrão, o aplicativo estará disponível em http://localhost
:
Visite http://localhost
em seu navegador para interagir com o sistema PixWave.
Executando testes
PixWave inclui um conjunto de testes abrangente. Para executar os testes, certifique-se de estar dentro do contêiner Docker ou de ter um ambiente local configurado. Execute o seguinte comando:
docker exec -it laravel_app php artisan test
Isso executará os testes de unidade e recursos para garantir a funcionalidade do sistema de pagamento, incluindo processamento de trabalhos, substituto de gateway e gerenciamento de histórico de transações.
Solução de problemas
Conflitos de porta : se você encontrar conflitos de porta (por exemplo, Redis ou MySQL já em execução em seu sistema), atualize o arquivo docker-compose.yml
para alterar os mapeamentos de porta padrão.
Erros de permissão : se surgirem problemas de permissão ao tentar gravar em logs ou armazenamento, certifique-se de que os diretórios storage/
e bootstrap/cache/
sejam graváveis executando:
sudo chmod -R 775 storage
sudo chmod -R 775 bootstrap/cache
Reinicializações do contêiner : se os contêineres estiverem reiniciando ou falhando na execução, verifique os logs para obter mensagens de erro detalhadas:
Tecnologias Utilizadas
1. Estrutura de back-end
- Laravel : usado para desenvolver a lógica central de processamento de pagamentos e interações de API.
2. Banco de dados
- MySQL : banco de dados relacional para armazenar detalhes de transações, dados do usuário e informações de gateway.
3. Cache
- Redis : camada de cache para otimizar os tempos de resposta e reduzir a carga no banco de dados primário.
4. Mensagens
- SNS (Simple Notification Service) : Usado para enviar notificações assíncronas e mensagens internas entre serviços.
5. Fila de trabalhos
- Laravel Jobs : gerencia o processamento de trabalhos em segundo plano, incluindo transações de pagamento e novas tentativas.
- Containerização e Orquestração
- Docker : garante a consistência entre os ambientes, conteinerizando o aplicativo.
- Kubernetes : Lida com orquestração de contêineres, dimensionamento e verificações de integridade de serviços.
7. Registro e monitoramento
- Logstash e Elasticsearch : coleta e indexa logs para monitoramento e análise em tempo real.
- Kibana : Fornece uma interface visual para explorar logs e monitorar o desempenho do sistema.