Accelera HTTP Async Adapter
Бизнес-описание
Accelera HTTP Async Adapter — это решение для высоконагруженных систем, обеспечивающее надежную интеграцию и обработку HTTP-запросов в асинхронном режиме. Система предназначена для микросервисной архитектуры и позволяет масштабировать нагрузку до миллионов запросов в день. Адаптер позволяет создать поток событий в платформу Accelera и получения синхронных (или асинхронных) ответов после обработки в сценариях Accelera.
Ключевые возможности
Асинхронная обработка запросов через RabbitMQ с гарантией доставки Интеллектуальное кэширование в Redis для оптимизации производительности Многоуровневая система аутентификации с JWT токенами и внешними провайдерами HTTP Proxy Gateway с поддержкой всех HTTP методов Мониторинг и метрики через Prometheus Высокая производительность - до 1000 одновременных соединений
API Документация
Аутентификация
1. Получение JWT токена
POST /auth/token
Authorization: Basic <base64(username:password)>
Content-Type: application/json
X-API-Key: <sha1(client_id + salt)>
{
"id": "client-12345",
"project": "my-app",
"version": "1.0.0"
}Ответ:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"company": "ACME Corp",
"permissions": ["read", "write"],
"expires_at": "2024-01-01T12:00:00Z"
}2. Генерация короткой ссылки
POST /auth/shortlink
Authorization: Basic <base64(username:password)>
Content-Type: application/json
X-API-TTL: 3600
{
"id": "client-12345",
"campaign": "mobile-app-auth"
}Ответ:
{
"shortlink": "d4fG7kL9mN2p",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"ttl": 3600,
"expires_at": "2024-01-01T13:00:00Z"
}3. Аутентификация через Gamebox
GET /auth/gamebox?shortlink=d395fl9k1tsnsgihcajgРезультат: HTTP редирект на игровую платформу с токеном:
Location: https://game.example.com/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Обработка запросов
1. Синхронная обработка
POST /request
Authorization: Bearer <jwt_token>
Content-Type: application/json
X-Accelera-Event: user.profile.update
X-Use-Cache: true
X-Cache-Lifetime: 300
{
"user_id": "12345",
"data": {
"name": "John Doe",
"email": "john@example.com"
},
"metadata": {
"source": "mobile_app",
"version": "2.1.0"
}
}Ответ:
{
"status": "success",
"data": {
"user_id": "12345",
"updated_fields": ["name", "email"],
"timestamp": "2024-01-01T12:00:00Z"
},
"execution_time": 150
}2. Асинхронная обработка
POST /request/async
Authorization: Bearer <jwt_token>
Content-Type: application/json
X-Accelera-Event: data.analysis.heavy
{
"dataset_id": "analytics-2024-q1",
"parameters": {
"model": "ml-regression",
"features": ["revenue", "users", "retention"]
}
}Ответ:
{
"requestID": "a1b2c3d4-e5f6-7890-1234-567890abcdef"
}3. Проверка статуса асинхронного запроса
GET /reply/async?requestID=a1b2c3d4-e5f6-7890-1234-567890abcdef
Authorization: Bearer <jwt_token>Ответ (готов):
{
"status": "completed",
"data": {
"analysis_results": {
"accuracy": 0.94,
"predictions": [...]
},
"processed_at": "2024-01-01T12:05:30Z"
}
}Ответ (в процессе):
{
"status": "Result not ready yet"
}HTTP Proxy
Проксирование запросов к внешним API
POST /proxy
Authorization: Bearer <jwt_token>
Content-Type: application/json
X-Accelera-Target: https://api.external-service.com/v1/users
X-Use-Cache: true
{
"name": "Jane Smith",
"department": "Engineering"
}Транслируется как:
POST https://api.external-service.com/v1/users
Content-Type: application/json
{
"name": "Jane Smith",
"department": "Engineering",
"token": {
"account": "your-account",
"payload": {...}
}
}Административные функции
1. Создание пользователя
POST /manage/account
X-Admin-Username: admin
X-Admin-Password: secure-password
Content-Type: application/json
{
"username": "api-client-001",
"password": "client-secure-pass",
"company": "Partner Corp",
"salt": "random-salt-string",
"permissions": ["api.read", "api.write"]
}2. Управление черным списком
POST /manage/blacklist/add
X-Admin-Username: admin
X-Admin-Password: secure-password
Content-Type: application/json
{
"id": "suspicious-client-123"
}3. Управление белым списком
POST /manage/whitelist/add
X-Admin-Username: admin
X-Admin-Password: secure-password
Content-Type: application/json
{
"id": "trusted-client-456",
"account": "premium-partner"
}Внешние интеграции
Запросы от внешних систем
POST /external/partner-system/request
Authorization: Bearer <external_jwt_token>
Content-Type: application/json
X-Accelera-Event: order.payment.process
{
"order_id": "ORD-2024-001",
"amount": 199.99,
"currency": "USD",
"customer": {
"id": "CUST-456789",
"email": "customer@example.com"
}
}Развертывание
Быстрый старт с Docker
# Клонирование репозитория
git clone https://github.com/your-org/accelera-http-async-adapter.git
cd accelera-http-async-adapter
# Конфигурация окружения
cp .env.example .env
# Отредактируйте .env согласно вашей инфраструктуре
# Запуск в продакшн режиме
docker-compose up -d
# Проверка состояния
curl http://localhost:8080/healthcheckЛокальная разработка
# Установка зависимостей
go mod tidy
# Запуск в режиме разработки
go run main.go
# Запуск с live reload
docker-compose -f docker-compose.development.yaml up⚙️ Конфигурация
Переменные окружения
| Переменная | Описание | Значение по умолчанию | Обязательная |
|---|---|---|---|
RABBITMQ_URL | Строка подключения к RabbitMQ | amqp://guest:guest@localhost:5672/ | ✅ |
REDIS_URL | Строка подключения к Redis | redis://localhost:6379 | ✅ |
GAMEBOX_API | Base URL для Gamebox API | - | ❌ |
JWT_SECRET | Секретный ключ для JWT токенов | auto-generated | ❌ |
ADMIN_USERNAME | Логин администратора | - | ✅ |
ADMIN_PASSWORD | Пароль администратора | - | ✅ |
LOG_LEVEL | Уровень логирования | info | ❌ |
TIMEOUT_SECONDS | Таймаут обработки запросов | 5 | ❌ |
PROXY_MAX_WORKERS | Максимальное количество proxy воркеров | 1000 | ❌ |
PORT | Порт веб-сервера | 8080 | ❌ |
Пример .env файла
# Базовая конфигурация
PORT=8080
LOG_LEVEL=info
# Инфраструктура
RABBITMQ_URL=amqp://user:pass@rabbitmq.company.com:5672/
REDIS_URL=redis://redis.company.com:6379
REDIS_PASSWORD=secure-redis-password
# Безопасность
JWT_SECRET=your-super-secret-jwt-key-here
ADMIN_USERNAME=system-admin
ADMIN_PASSWORD=ultra-secure-admin-password
# Интеграции
GAMEBOX_API=https://gamebox-api.company.com
AUTHORIZATION_ID=client_id
SALT_CHECKUP=true
# Производительность
TIMEOUT_SECONDS=10
PROXY_MAX_WORKERS=1000
IS_ACTIVE_BLACKLIST=trueМониторинг и метрики
Prometheus метрики
GET /metricsДоступные метрики:
http_requests_total- Общее количество HTTP запросовhttp_request_duration_seconds- Длительность обработки запросовredis_errors_total- Количество ошибок Redisrabbitmq_published_messages_total- Количество отправленных сообщений
Health Check
GET /healthcheckОтвет:
{
"status": "ok"
}Архитектура
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Игровой клиент │ │ Mobile App │ │ External API │
└─────────┬───────┘ └──────────┬───────┘ └─────────┬───────┘
│ │ │
└───────────────────────┼──────────────────────┘
│
┌─────────────▼───────────────┐
│ │
│ Accelera HTTP Adapter │
│ │
│ ┌─────────────────────────┐│
│ │ Authentication ││
│ │ & Authorization ││
│ └─────────────────────────┘│
│ ┌─────────────────────────┐│
│ │ Request Router ││
│ │ & Load Balancer ││
│ └─────────────────────────┘│
│ ┌─────────────────────────┐│
│ │ Proxy Gateway ││
│ └─────────────────────────┘│
└─────────────┬───────────────┘
│
┌─────────────▼───────────────┐
│ Accelera Flows │
│ (ответ через RabbitMQ) │
└─────────────┬───────────────┘
│
┌─────────────▼───────────────┐
│ Cache Layer │
│ (Redis) │
└─────────────────────────────┘Примеры использования
Игровая интеграция
// Обработка заказа с асинхронным расчетом доставки
const response = await fetch('/request/async', {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + jwt_token,
'Content-Type': 'application/json',
'X-Accelera-Event': 'order.shipping.calculate'
},
body: JSON.stringify({
order_id: 'ORD-001',
items: [...],
delivery_address: {...}
})
});
const { requestID } = await response.json();
// Проверка готовности расчета
const checkResult = async () => {
const result = await fetch(`/reply/async?requestID=${requestID}`, {
headers: { 'Authorization': 'Bearer ' + jwt_token }
});
return result.json();
};Микросервисная интеграция
import requests
# Проксирование запроса к сервису аналитики
response = requests.post('/proxy',
headers={
'Authorization': f'Bearer {jwt_token}',
'X-Accelera-Target': 'https://analytics.internal.com/api/v1/reports',
'X-Use-Cache': 'true',
'X-Cache-Lifetime': '1800'
},
json={
'report_type': 'revenue',
'period': '2024-Q1',
'filters': ['region:US', 'product:premium']
}
)Техническая поддержка
Логирование
Все операции логируются с использованием structured logging (logrus):
{
"level": "info",
"msg": "[+] New message was published",
"client_id": "client-12345",
"correlation_id": "1704110400000000000",
"event": "user.profile.update",
"timestamp": "2024-01-01T12:00:00Z"
}Отладка
# Включение debug логирования
export LOG_LEVEL=debug
# Мониторинг RabbitMQ очередей
curl -u admin:password http://rabbitmq:15672/api/queues
# Проверка Redis кэша
redis-cli -h redis.company.com KEYS "cache:*"Производительность
- Пропускная способность: до 10,000 запросов/сек
- Задержка: < 50ms для кэшированных запросов
- Масштабирование: горизонтальное, без состояния
- Доступность: 99.9% (SLA)
Безопасность
- JWT токены с настраиваемым TTL
- Blacklist/Whitelist для контроля доступа
- Валидация внешних токенов (PS256/RSA)
- Rate limiting на уровне горутин
- Логирование всех операций безопасности