Документация Accelera

Настройка асинхронного HTTP-адаптера

Бизнес-описание

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"
  }
}

⚙️ Конфигурация

Переменные окружения

ПеременнаяОписаниеЗначение по умолчаниюОбязательная
RABBITMQ_URLСтрока подключения к RabbitMQamqp://guest:guest@localhost:5672/
REDIS_URLСтрока подключения к Redisredis://localhost:6379
GAMEBOX_APIBase URL для Gamebox API-
JWT_SECRETСекретный ключ для JWT токеновauto-generated
ADMIN_USERNAMEЛогин администратора-
ADMIN_PASSWORDПароль администратора-
DISABLE_AUTHОтключение Bearer/Link авторизации (для внешней авторизации)false
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

DISABLE_AUTH=false

# Интеграции
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 - Количество ошибок Redis
  • rabbitmq_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 на уровне горутин
  • Логирование всех операций безопасности
  • Возможность отключения авторизации для разработки/тестирования (DISABLE_AUTH=true)

Интеграция с внешним сервисом авторизации (Маппер)

Accelera HTTP Async Adapter поддерживает делегирование авторизации внешнему сервису, например API Gateway или Маппер. В этом режиме проверка Bearer/Link токенов полностью отключается - авторизация выполняется на уровне внешнего сервиса.

Включение режима внешней авторизации

DISABLE_AUTH=true

Архитектура

┌─────────────────┐
│ Клиентское      │
│ приложение      │
└────────┬────────┘


┌─────────────────────────────────┐
│ API Gateway / Маппер            │
│ (выполняет авторизацию)         │
│                                 │
│ - Проверка токенов              │
│ - Аутентификация                │
│ - Контроль доступа              │
└────────┬────────────────────────┘
         │ (доверенная сеть)

┌─────────────────────────────────┐
│ Accelera HTTP Async Adapter     │
│ (DISABLE_AUTH=true)             │
│                                 │
│ - Без проверки токенов          │
│ - Обработка запросов            │
│ - Отправка в RabbitMQ           │
└─────────────────────────────────┘

Преимущества

  • Централизованная авторизация на уровне API Gateway/Маппера
  • Единая точка контроля доступа для всех микросервисов
  • Упрощение логики адаптера
  • Гибкость в выборе методов аутентификации
  • Совместимость с существующей инфраструктурой

БЕЗОПАСНОСТЬ:

  • Связь между Маппером и Accelera Adapter должна быть защищена (private network, VPN, firewall)
  • Accelera Adapter не должен быть доступен напрямую из внешней сети
  • Вся авторизация и валидация должна выполняться на уровне Маппера

На этой странице