Пиксвейв
PixWave — это масштабируемый и высокопроизводительный микросервис цифрового кошелька, предназначенный для обработки платежей в реальном времени через PIX с использованием архитектуры с несколькими шлюзами . Система объединяет несколько платежных шлюзов, включая Mercado Pago и Gerencianet , обеспечивая надежность и возможность плавного возврата. Динамически выбирая наиболее доступный шлюз в любой момент, PixWave сводит к минимуму время простоя и обеспечивает непрерывную обработку платежей.
Архитектура построена так, чтобы быть отказоустойчивой, модульной и масштабируемой , с использованием Docker для контейнеризации, Kubernetes для оркестрации, Redis для кэширования, SNS для асинхронного обмена сообщениями и стека ELK (Logstash, Elasticsearch, Kibana) для централизованного ведения журналов и мониторинга в реальном времени. производительности системы.
Ключевые особенности
- Архитектура с несколькими шлюзами с выбором шлюза в реальном времени и автоматическим возвратом к резервному варианту.
- Асинхронная обработка заданий с механизмами повтора для обработки неудачных транзакций и длительных задач.
- Централизованное ведение журналов и мониторинг в реальном времени с использованием стека ELK (Elasticsearch, Logstash, Kibana).
- Масштабируемость и отказоустойчивость на базе Docker и Kubernetes гарантируют, что система сможет справляться с высокими нагрузками и оставаться работоспособной даже в условиях стресса.
Системная архитектура
1. Архитектура на основе микросервисов
PixWave следует архитектуре на основе микросервисов , в которой ключевые компоненты, такие как обработка платежей, управление пользователями и мониторинг транзакций, разделены на независимые сервисы. Такая конструкция позволяет независимо масштабировать отдельные сервисы и поддерживать их, не затрагивая всю систему.
- Laravel используется в качестве серверной платформы для управления платежными транзакциями, взаимодействием с пользователем и запросами API.
- Docker контейнеризирует каждый сервис, обеспечивая согласованность в средах разработки, тестирования и производства.
- Kubernetes организует развертывание этих контейнеров и управление ими, предоставляя такие функции, как автоматическое масштабирование, самовосстановление и балансировку нагрузки.
2. Обработка платежей
Ядром PixWave является модуль обработки платежей, предназначенный для обработки транзакций PIX в реальном времени с высокой доступностью и отказоустойчивостью. Система объединяет два основных платежных шлюза: Mercado Pago и Gerencianet и использует механизм интеллектуального выбора шлюза.
2.1. Система с несколькими шлюзами и резервным режимом
- Система сначала пытается обработать платежи через основной шлюз (Mercado Pago или Gerencianet).
- Redis хранит статус доступности каждого шлюза, обеспечивая быстрый поиск и принятие решений.
- Если основной шлюз недоступен, система немедленно переключается на резервный шлюз, обеспечивая непрерывную обработку платежей с минимальным временем простоя.
2.2. Управление транзакциями
- Все транзакции регистрируются в MySQL , включая такие детали, как сумма транзакции, идентификатор пользователя, используемый шлюз, статус (успех, неудача или ожидание) и временные метки.
- Управление статусами на основе перечислений стандартизирует статусы транзакций на разных шлюзах для обеспечения согласованности в базе данных.
- Очереди заданий обрабатывают платежи асинхронно, что позволяет пользователям инициировать платежи, не дожидаясь завершения всего процесса.
3. Механизмы задания и повтора
Система заданий в PixWave имеет решающее значение для выполнения таких задач, как обработка платежей и повторные попытки. Асинхронно отправляя задания на запросы платежей, PixWave обеспечивает пользователям неблокирующий опыт и повышает общую скорость реагирования системы.
3.1. Обработка заданий
- Когда запрашивается платеж, отправляется задание на асинхронную обработку транзакции, связывающееся с соответствующим платежным шлюзом для отправки транзакции и получения результата.
- Задания обрабатываются параллельно, обеспечивая эффективную обработку больших объемов платежей.
3.2. Механизм повтора
- Если попытка платежа не удалась из-за проблем со шлюзом, система повторяет попытку до 3 раз, прежде чем пометить транзакцию как неудавшуюся.
- После всех повторных попыток система переключается на резервный шлюз и повторяет попытку платежа.
- Если возврат также не удался, транзакция регистрируется как неудавшаяся, и через SNS могут быть отправлены оповещения для дальнейшего расследования.
4. Кэширование с помощью Redis
PixWave использует Redis для кэширования, чтобы повысить производительность и снизить нагрузку на основную базу данных.
- Доступность шлюза : кэшируется в Redis, что позволяет системе быстро определить, какой платежный шлюз использовать, без избыточных вызовов API.
- Поиск транзакций : недавно обработанные транзакции кэшируются, что обеспечивает быстрый поиск и сокращает количество ненужных запросов к базе данных MySQL.
5. Централизованная регистрация и мониторинг.
Logstash и Elasticsearch используются для управления централизованным журналированием, предоставляя в режиме реального времени информацию о системных событиях, ошибках и показателях производительности.
- Logstash собирает логи со всех сервисов (Laravel, очереди заданий, платежные шлюзы) и отправляет их в Elasticsearch для индексации.
- Elasticsearch обеспечивает мощные запросы для проверки работоспособности системы и устранения неполадок.
- Kibana предлагает графическую панель управления для просмотра журналов, отслеживания ошибок и визуализации производительности системы.
6. Очередь сообщений и асинхронные уведомления
PixWave использует SNS (Simple Notification Service) для обмена сообщениями между микросервисами и отправки уведомлений во внешние системы.
- Когда транзакция обрабатывается, уведомления отправляются во внешние системы (например, пользовательские приложения или сторонние службы) через SNS, гарантируя, что система останется отзывчивой даже при высоком трафике.
- Внутренний обмен сообщениями между компонентами системы осуществляется через SQL и SNS , обеспечивая развязку связи между службами.
Инструкции по установке
1. Клонировать репозиторий
Для начала клонируйте репозиторий PixWave на свой локальный компьютер:
git clone https://github.com/your-repository/pixwave.git
cd pixwave
2. Настройка переменных среды
Скопируйте файл .env.example
в .env
и настройте переменные среды. Эти переменные включают учетные данные базы данных, учетные данные платежного шлюза (Mercado Pago и Gerencianet) и ключи API для других сервисов:
Обновите следующие значения в файле .env
:
-
DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
– настройки базы данных MySQL. -
MERCADOPAGO_ACCESS_TOKEN
– токен доступа к Mercado Pago. -
GERENCIANET_CLIENT_ID
, GERENCIANET_CLIENT_SECRET
, GERENCIANET_PIX_KEY
— учетные данные API Gerencianet. -
SNS_API_KEY
– ваш ключ API SNS для уведомлений. -
LOGSTASH_HOST
— хост для службы Logstash (для централизованного ведения журналов).
3. Установите зависимости
Запустите следующую команду, чтобы установить все необходимые зависимости:
4. Настройте Докер
Убедитесь, что на вашем компьютере установлен Docker . Затем используйте Docker Compose для сборки и запуска необходимых контейнеров:
docker-compose up --build
Эта команда запустит следующие службы:
- Приложение Laravel (серверная часть PHP)
- MySQL (реляционная база данных)
- Редис (Кэш)
- Elasticsearch и Logstash (централизованное ведение журнала)
- Kibana (интерфейс анализа журналов)
5. Запуск миграций и сидеров
После запуска контейнеров выполните миграцию, чтобы настроить схему базы данных и заполнить некоторые исходные данные:
docker exec -it laravel_app php artisan migrate --seed
6. Создайте ключ приложения .
Сгенерируйте ключ шифрования приложения, который используется Laravel для безопасного шифрования:
docker exec -it laravel_app php artisan key:generate
7. Запустите приложение.
Теперь, когда все настроено, вы можете получить доступ к приложению. По умолчанию приложение будет доступно по адресу http://localhost
:
Посетите http://localhost
в своем браузере, чтобы взаимодействовать с системой PixWave.
Запуск тестов
PixWave включает в себя комплексный набор тестов. Чтобы запустить тесты, убедитесь, что вы находитесь внутри контейнера Docker или у вас настроена локальная среда. Выполните следующую команду:
docker exec -it laravel_app php artisan test
При этом будут выполнены модульные и функциональные тесты для обеспечения функциональности платежной системы, включая обработку заданий, резервный шлюз и управление историей транзакций.
Поиск неисправностей
Конфликты портов . Если вы столкнулись с конфликтами портов (например, Redis или MySQL уже запущены в вашей системе), обновите файл docker-compose.yml
чтобы изменить сопоставления портов по умолчанию.
Ошибки разрешений . Если при попытке записи в журналы или хранилище возникают проблемы с разрешениями, убедитесь, что каталоги storage/
и bootstrap/cache/
доступны для записи, выполнив:
sudo chmod -R 775 storage
sudo chmod -R 775 bootstrap/cache
Перезапуск контейнеров . Если контейнеры перезапускаются или не запускаются, проверьте журналы на наличие подробных сообщений об ошибках:
Используемые технологии
1. Бэкэнд-фреймворк
- Laravel : используется для разработки основной логики обработки платежей и взаимодействия API.
2. База данных
- MySQL : реляционная база данных для хранения деталей транзакций, пользовательских данных и информации о шлюзе.
3. Кэш
- Redis : уровень кэширования для оптимизации времени ответа и снижения нагрузки на основную базу данных.
4. Обмен сообщениями
- SNS (простая служба уведомлений) : используется для отправки асинхронных уведомлений и внутреннего обмена сообщениями между службами.
5. Очередь заданий
- Laravel Jobs : управляет фоновой обработкой заданий, включая платежные транзакции и повторные попытки.
- Контейнеризация и оркестровка
- Docker : обеспечивает согласованность между средами за счет контейнеризации приложения.
- Kubernetes : управляет оркестрацией контейнеров, масштабированием и проверками работоспособности сервисов.
7. Регистрация и мониторинг
- Logstash и Elasticsearch : собирает и индексирует журналы для мониторинга и анализа в реальном времени.
- Kibana : предоставляет визуальный интерфейс для просмотра журналов и отслеживания производительности системы.