12 KiB
12 KiB
MY Network v2.0 - Distributed Content Protocol
🌐 Обзор
MY Network - это распределенная система для управления и синхронизации контента между нодами. Протокол обеспечивает:
- P2P сеть для обмена данными между нодами
- Автоматическую синхронизацию контента
- Load balancing на основе метрик нагрузки
- Веб-интерфейс мониторинга в хакерском стиле
- Совместимость с существующей инфраструктурой
🚀 Быстрый запуск
Минимальный запуск для тестирования:
# 1. Установить зависимости
pip install -r requirements_new.txt
# 2. Запустить минимальный сервер
python start_my_network.py
Откройте http://localhost:8000/api/my/monitor/ для мониторинга.
Запуск с существующей системой:
# 1. Использовать совместимые файлы
cp docker-compose.compatible.yml docker-compose.yml
cp .env.compatible .env
# 2. Запустить через Docker
docker-compose up -d
# 3. MY Network автоматически интегрируется
🏗️ Продакшен развертывание
Автоматическое развертывание:
# Сохранить переменные окружения
export DOMAIN="your-domain.com"
export EMAIL="admin@your-domain.com"
# Запустить скрипт развертывания (требует root)
sudo bash deploy_my_network.sh
Скрипт автоматически установит:
- ✅ Nginx с SSL (Let's Encrypt)
- ✅ Docker и Docker Compose
- ✅ Firewall и безопасность
- ✅ Systemd сервисы
- ✅ Мониторинг и health checks
Ручное развертывание:
# 1. Создать production .env
cp .env.example .env.production
# Отредактировать настройки
# 2. Запустить продакшен контейнеры
docker-compose -f docker-compose.prod.yml up -d
# 3. Настроить nginx
sudo cp nginx.conf /etc/nginx/sites-available/my-network
sudo ln -s /etc/nginx/sites-available/my-network /etc/nginx/sites-enabled/
sudo systemctl restart nginx
📊 Мониторинг и управление
Веб-интерфейс:
- Основной мониторинг: http://your-domain/api/my/monitor/
- ASCII статус: http://your-domain/api/my/monitor/ascii
- API документация: http://your-domain/api/docs
API эндпоинты:
Информация о ноде:
# Статус ноды
curl http://localhost:8000/api/my/node/info
# Подключенные пиры
curl http://localhost:8000/api/my/node/peers
# Статус синхронизации
curl http://localhost:8000/api/my/sync/status
Управление пирами:
# Подключиться к пиру
curl -X POST http://localhost:8000/api/my/node/peers/connect \
-H "Content-Type: application/json" \
-d '{"address": "http://peer-node:8001"}'
# Отключиться от пира
curl -X DELETE http://localhost:8000/api/my/node/peers/PEER_ID
Синхронизация:
# Запустить синхронизацию
curl -X POST http://localhost:8000/api/my/sync/start
# Реплицировать контент
curl -X POST http://localhost:8000/api/my/content/HASH/replicate \
-H "Content-Type: application/json" \
-d '{"target_nodes": ["node1", "node2"]}'
Системные команды:
# Управление сервисом
sudo systemctl start my-network
sudo systemctl stop my-network
sudo systemctl restart my-network
sudo systemctl status my-network
# Просмотр логов
sudo journalctl -u my-network -f
tail -f /var/log/my-network/app.log
# Проверка здоровья
/opt/my-network/health_check.sh
# Docker команды
docker-compose logs -f my-network-app
docker-compose ps
🔧 Конфигурация
Основные настройки (.env):
# MY Network Configuration
MY_NETWORK_ENABLED=True
MY_NETWORK_NODE_ID=unique-node-id
MY_NETWORK_P2P_PORT=8001
MY_NETWORK_API_PORT=8000
# Bootstrap ноды (JSON массив)
MY_NETWORK_BOOTSTRAP_NODES=["http://bootstrap1:8001", "http://bootstrap2:8001"]
# Настройки синхронизации
SYNC_MAX_CONCURRENT=5
SYNC_TIMEOUT=300
SYNC_RETRY_ATTEMPTS=3
# Настройки пиров
PEER_HEALTH_CHECK_INTERVAL=60
PEER_CONNECTION_TIMEOUT=30
MAX_PEER_CONNECTIONS=50
Bootstrap конфигурация (bootstrap.json):
{
"version": "2.0",
"network_id": "my-network-main",
"bootstrap_nodes": [
{
"node_id": "bootstrap-1",
"address": "https://bootstrap1.my-network.com:8001",
"public_key": "...",
"trusted": true
}
],
"consensus": {
"algorithm": "raft",
"election_timeout": 5000,
"heartbeat_interval": 1000
}
}
🌍 Архитектура сети
Компоненты:
- Node Service - основной сервис ноды
- Peer Manager - управление подключениями
- Sync Manager - синхронизация контента
- Bootstrap Manager - управление bootstrap конфигурацией
Протокол взаимодействия:
Нода A Нода B
| |
|--- Handshake ---------> |
|<-- Auth Response ------- |
| |
|--- Content List ------> |
|<-- Missing Content ---- |
| |
|--- File Transfer -----> |
|<-- Confirmation ------- |
Состояния контента:
- Local - только на текущей ноде
- Syncing - в процессе синхронизации
- Replicated - скопирован на другие ноды
- Verified - проверена целостность
🔒 Безопасность
Встроенные механизмы:
- TLS шифрование для всех соединений
- Проверка хешей для целостности файлов
- Аутентификация пиров через public key
- Rate limiting для предотвращения DDoS
- Firewall правила для ограничения доступа
Рекомендации:
# Настроить firewall
sudo ufw allow 8000:8010/tcp
sudo ufw allow 8000:8010/udp
# Включить fail2ban
sudo systemctl enable fail2ban
# Регулярные бэкапы
0 2 * * * /opt/my-network/backup.sh
📈 Мониторинг и алерты
Метрики:
- Количество подключенных пиров
- Статус синхронизации
- Использование ресурсов
- Время отклика
- Ошибки сети
Health checks:
# HTTP health check
curl -f http://localhost:8000/health
# MY Network specific
curl -f http://localhost:8000/api/my/health
# Detailed status
curl http://localhost:8000/api/my/network/stats
Prometheus интеграция:
# prometheus.yml
scrape_configs:
- job_name: 'my-network'
static_configs:
- targets: ['localhost:9090']
metrics_path: '/metrics'
🐛 Устранение неисправностей
Частые проблемы:
1. Нода не подключается к пирам:
# Проверить сетевые соединения
netstat -tulpn | grep 8001
# Проверить firewall
sudo ufw status
# Проверить логи
tail -f /var/log/my-network/app.log
2. Синхронизация не работает:
# Проверить статус синхронизации
curl http://localhost:8000/api/my/sync/status
# Перезапустить синхронизацию
curl -X POST http://localhost:8000/api/my/sync/start
# Проверить доступность целевых нод
curl http://target-node:8001/api/my/health
3. Высокое использование ресурсов:
# Проверить использование CPU/памяти
docker stats my-network-app
# Ограничить ресурсы
docker update --memory=2g --cpus=2 my-network-app
# Настроить параметры синхронизации
echo "SYNC_MAX_CONCURRENT=2" >> .env
Диагностические команды:
# Проверить все компоненты
curl http://localhost:8000/api/my/health | jq
# Список активных соединений
curl http://localhost:8000/api/my/node/peers | jq
# Статистика сети
curl http://localhost:8000/api/my/network/stats | jq
# ASCII статус (для консоли)
curl http://localhost:8000/api/my/monitor/ascii
🔄 Обновление системы
Обновление без downtime:
# 1. Подготовить новую версию
git pull origin main
# 2. Собрать новый образ
docker-compose build my-network-app
# 3. Rolling update
docker-compose up -d --no-deps my-network-app
# 4. Проверить статус
curl http://localhost:8000/health
Миграция данных:
# Экспорт данных
docker exec my-network-db mysqldump -u root -p mymusic > backup.sql
# Миграция схемы (если нужно)
docker exec my-network-app python -m alembic upgrade head
# Импорт данных
docker exec -i my-network-db mysql -u root -p mymusic < backup.sql
📚 Дополнительная документация
- MY_ARCHITECTURE.md - детальная архитектура системы
- MY_PROTOCOL.md - спецификация протокола
- MY_NODE_SPEC.md - технические характеристики нод
- MY_MONITORING.md - руководство по мониторингу
🤝 Вклад в проект
Структура проекта:
my-uploader-bot/
├── app/
│ ├── core/
│ │ └── my_network/ # MY Network компоненты
│ │ ├── node_service.py
│ │ ├── peer_manager.py
│ │ ├── sync_manager.py
│ │ └── bootstrap_manager.py
│ ├── api/
│ │ └── routes/ # API маршруты
│ │ ├── my_network_routes.py
│ │ └── my_monitoring.py
│ └── templates/ # Web интерфейс
│ └── my_network_monitor.html
├── bootstrap.json # Bootstrap конфигурация
├── start_my_network.py # Быстрый запуск
└── deploy_my_network.sh # Продакшен деплой
Development workflow:
# 1. Создать ветку для фичи
git checkout -b feature/my-feature
# 2. Разработка с hot reload
python start_my_network.py --debug
# 3. Тестирование
pytest tests/test_my_network.py
# 4. Создать pull request
git push origin feature/my-feature
📞 Поддержка
Если у вас возникли вопросы или проблемы:
- Проверьте Troubleshooting
- Посмотрите логи:
tail -f /var/log/my-network/app.log - Проверьте health check:
curl http://localhost:8000/api/my/health - Создайте issue с подробным описанием проблемы
MY Network v2.0 - Distributed Content Protocol Decentralized content distribution made simple