Skip to content

MuratovER/messenger

Repository files navigation

Messenger - Real-time Messaging Application

Tests

Современное приложение для обмена сообщениями в реальном времени с поддержкой WebSocket соединений.

🚀 Основные возможности

  • Real-time messaging - мгновенный обмен сообщениями через WebSocket
  • Аутентификация - JWT токены с refresh механизмом
  • Групповые чаты - создание и участие в групповых беседах
  • Уведомления о прочтении - статус доставки и прочтения сообщений
  • Высокая производительность - оптимизированная архитектура
  • Мониторинг - встроенная система мониторинга и алертов

🔧 Улучшения производительности и надежности

Производительность

  • Connection Pooling - пул соединений для PostgreSQL
  • Redis кэширование - кэширование часто запрашиваемых данных
  • Rate Limiting - ограничение частоты запросов
  • Async/await - полностью асинхронная архитектура
  • Optimized WebSocket - оптимизированные WebSocket соединения
  • Connection cleanup - автоматическая очистка мертвых соединений

Надежность

  • Retry Logic - повторные попытки для критических операций
  • Health Checks - проверка состояния сервисов
  • Error Handling - улучшенная обработка ошибок
  • Graceful Shutdown - корректное завершение работы
  • Database Transactions - транзакционная целостность
  • Connection Validation - валидация соединений

Безопасность

  • Password Validation - валидация сложности паролей
  • Input Sanitization - санитизация пользовательского ввода
  • Token Blacklisting - черный список токенов
  • CORS Configuration - настройка CORS для продакшена
  • Rate Limiting - защита от DDoS атак
  • Secure Headers - безопасные HTTP заголовки

Отказоустойчивость

  • Circuit Breaker - защита от каскадных сбоев
  • Load Balancing Ready - готовность к балансировке нагрузки
  • Monitoring & Alerts - мониторинг и алерты
  • Graceful Degradation - постепенная деградация при сбоях
  • Backup Strategies - стратегии резервного копирования

📋 Требования

  • Python 3.11+
  • PostgreSQL 13+
  • Redis 6+
  • Docker (опционально)

🛠 Установка

1. Клонирование репозитория

git clone <repository-url>
cd messenger

2. Установка зависимостей

cd src
poetry install

3. Настройка окружения

cp example_env .env
# Отредактируйте .env файл с вашими настройками

4. Настройка базы данных

# Создайте базу данных PostgreSQL
createdb messenger

# Примените миграции
alembic upgrade head

5. Запуск Redis

# Локально
redis-server

# Или через Docker
docker run -d -p 6379:6379 redis:7-alpine

6. Запуск приложения

# Разработка
uvicorn main:app --reload --host 0.0.0.0 --port 8000

# Продакшен
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4

🔧 Конфигурация

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

# Основные настройки
ENVIRONMENT=local  # local, test, production, showroom
SECRET=your-super-secret-key-here
SESSION_MIDDLEWARE_SECRET=your-session-secret

# База данных
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DB=messenger

# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0

# CORS
CORS_ALLOW_ORIGIN_LIST=http://localhost:3000,https://yourdomain.com

# Производительность
DB_POOL_SIZE=20
DB_MAX_OVERFLOW=30
REDIS_POOL_SIZE=10
WORKERS_COUNT=4

# Безопасность
PASSWORD_MIN_LENGTH=8
PASSWORD_MAX_LENGTH=128
RATE_LIMIT_ENABLED=true
RATE_LIMIT_REQUESTS_PER_MINUTE=60

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

После запуска приложения документация доступна по адресам:

🔌 WebSocket API

Подключение

ws://localhost:8000/ws/{chat_id}?token=Bearer {jwt_token}

Отправка сообщения

{
  "type": "new_message",
  "data": "Текст сообщения"
}

Отметка о прочтении

{
  "type": "mark_as_read",
  "message_id": 123
}

🧪 Тестирование

Покрытие кода

Текущее покрытие тестами: 64%

# Запуск всех тестов
pytest

# Запуск с покрытием
pytest --cov=src --cov-report=term-missing

# Запуск с HTML отчетом
pytest --cov=src --cov-report=html

# Запуск только unit тестов
pytest -m unit

# Запуск только integration тестов
pytest -m integration

# Запуск тестов с детальным отчетом
pytest --cov=src --cov-report=term-missing --cov-report=html --cov-report=xml

Структура тестов

tests/
├── auth/                    # Тесты аутентификации
│   └── test_integration/    # Интеграционные тесты
├── chat/                    # Тесты чатов
│   └── test_integration/    # Интеграционные тесты
├── unit/                    # Unit тесты
├── integration/             # Общие интеграционные тесты
├── websocket/              # WebSocket тесты
└── factories/              # Фабрики для тестовых данных

Типы тестов

  • Unit тесты - тестирование отдельных функций и классов
  • Integration тесты - тестирование взаимодействия компонентов
  • WebSocket тесты - тестирование real-time функциональности
  • API тесты - тестирование HTTP эндпоинтов

Запуск тестов в CI/CD

# Установка зависимостей
poetry install

# Запуск тестов с покрытием
poetry run pytest --cov=src --cov-report=xml --cov-report=term-missing

# Проверка минимального покрытия (опционально)
poetry run pytest --cov=src --cov-fail-under=60

Обновление бейджа покрытия

Бейдж покрытия автоматически обновляется при каждом push в main ветку. Для ручного обновления:

  1. Через shields.io (рекомендуется):

    • Перейдите на https://shields.io/
    • Выберите "Coverage" бейдж
    • Укажите URL вашего репозитория
    • Скопируйте URL бейджа и обновите в README
  2. Через GitHub Actions (если настроен CI/CD):

    - name: Generate coverage badge
      uses: schneegans/dynamic-badges-action@v1.6.0
      with:
        auth: ${{ secrets.GIST_SECRET }}
        gistID: your-gist-id
        filename: coverage.json
        label: coverage
        message: ${{ steps.coverage.outputs.coverage }}%
        namedLogo: pytest
        color: brightgreen

Дополнительные ресурсы

📊 Мониторинг

Health Check

curl http://localhost:8000/health

Метрики производительности

curl http://localhost:8000/metrics

🚀 Развертывание

Docker Compose

docker-compose up -d

Kubernetes

kubectl apply -f k8s/

🔍 Отладка

Логирование

Приложение использует Loguru для логирования. Логи включают:

  • HTTP запросы и ответы
  • WebSocket соединения
  • Ошибки и исключения
  • Метрики производительности

Профилирование

# Профилирование памяти
python -m memory_profiler main.py

# Профилирование CPU
py-spy top -- python main.py

📈 Производительность

Бенчмарки

  • HTTP API: ~5000 RPS на одном ядре
  • WebSocket: ~10000 одновременных соединений
  • Latency: <50ms для 95% запросов
  • Memory: ~100MB на 1000 активных соединений

Оптимизации

  • Connection pooling для БД
  • Redis кэширование
  • Асинхронная обработка
  • Оптимизированные SQL запросы
  • Сжатие WebSocket сообщений

🔒 Безопасность

Рекомендации для продакшена

  1. Используйте сильные секретные ключи
  2. Настройте HTTPS
  3. Ограничьте CORS origins
  4. Включите rate limiting
  5. Настройте мониторинг безопасности
  6. Регулярно обновляйте зависимости

🤝 Вклад в проект

  1. Fork репозитория
  2. Создайте feature branch
  3. Внесите изменения
  4. Добавьте тесты
  5. Создайте Pull Request

📄 Лицензия

MIT License

🆘 Поддержка


Версия: 1.0.0
Последнее обновление: 2024

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages