AIS Real-Time Processing System
Sistema de processamento em tempo real de mensagens AIS (Automatic Identification System) para rastreamento de embarcações marítimas no Porto de Santos.
Camada
Tecnologia
Versão
Backend
Laravel
11.x
PHP
PHP
8.2+
Database
PostgreSQL
15+
Cache/Queue
Redis + ReBloom
7.x
Parser
pyais
2.x (Python 3.11+)
LLM
Minimax.io
API v1
WebSocket
Laravel Reverb
1.x
Queue
Laravel Horizon
5.x
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Antenas │───▶│ Receiver │───▶│ Dedup 3L │───▶│ Parser │
│ (TCP/UDP) │ │ Service │ │ (Redis) │ │ (Python) │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Message Buffer (50 msgs / 2s) │
└─────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ PostgreSQL (Batch Insert) │
└─────────────────────────────────────────────────────────────────────────┘
│
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ API │ │ Analysis │ │ WebSocket│
│ REST │ │ (LLM) │ │ Events │
└──────────┘ └──────────┘ └──────────┘
Docker 24+
Docker Compose 2.x
Make (opcional)
# Clone e setup
git clone < repo-url>
cd ais-system
# Copiar configuração
cp src/.env.example src/.env
# Iniciar containers
docker-compose up -d
# Instalar dependências
docker-compose exec app composer install
# Rodar migrations
docker-compose exec app php artisan migrate --database=ais
# Iniciar receiver AIS
docker-compose exec app php artisan ais:listen
# Desenvolvimento
make up # Inicia containers
make down # Para containers
make logs # Ver logs
make shell # Acessa shell do container
# Servidor de desenvolvimento
docker-compose exec app php artisan serve --host=0.0.0.0
# Receiver AIS
docker-compose exec app php artisan ais:listen --antenna=1
# Workers
docker-compose exec app php artisan horizon
# Testes
docker-compose exec app php artisan test
docker-compose exec app php artisan test --filter=Dedup
docker-compose exec app php artisan test --testsuite=Integration
docker-compose exec app php artisan test --testsuite=Performance
Variáveis de Ambiente (.env)
# Database AIS
AIS_DB_CONNECTION = pgsql
AIS_DB_HOST = pgsql
AIS_DB_PORT = 5432
AIS_DB_DATABASE = ais_database
AIS_DB_USERNAME = ais_user
AIS_DB_PASSWORD = ais_secret
# Redis
REDIS_HOST = redis
REDIS_PORT = 6379
# Deduplicação
AIS_DEDUP_REDIS_TTL = 300
AIS_DEDUP_BLOOM_CAPACITY = 1000000
AIS_DEDUP_BLOOM_ERROR_RATE = 0.001
# Buffer
AIS_BUFFER_SIZE = 50
AIS_BUFFER_TIMEOUT = 2
# LLM Minimax
MINIMAX_API_KEY = your-api-key
MINIMAX_GROUP_ID = your-group-id
MINIMAX_MODEL = abab6.5-chat
# Analysis Trigger
AIS_ANALYSIS_INTERVAL = 180
AIS_ANALYSIS_BATCH_SIZE = 100
Método
Endpoint
Descrição
GET
/api/ais/messages
Lista mensagens AIS
GET
/api/ais/messages/{id}
Detalhes da mensagem
GET
/api/ais/messages/stats
Estatísticas
GET
/api/ais/vessels
Lista embarcações
GET
/api/ais/vessels/{mmsi}
Detalhes por MMSI
GET
/api/ais/vessels/{mmsi}/positions
Histórico de posições
GET
/api/ais/analysis
Lista análises LLM
POST
/api/ais/analysis/trigger
Trigger manual
GET
/api/ais/antennas
Lista antenas
POST
/api/ais/antennas
Cria antena
GET
/api/ais/system/health
Health check
GET /api/ais/messages?mmsi=123456789&type=1,3&from=2024-01-01&to=2024-01-31&per_page=50
GET /api/ais/vessels?search=CONTAINER&type=70
GET /api/ais/analysis?risk_level=high
Canal
Evento
Descrição
ais.messages
MessageBatchInserted
Novo batch inserido
ais.analysis
AnalysisCompleted
Análise LLM concluída
ais.receiver
ReceiverStatusChanged
Status do receiver
src/
├── app/
│ ├── Console/Commands/ # Comandos Artisan
│ ├── Events/AIS/ # Eventos WebSocket
│ ├── Http/
│ │ ├── Controllers/API/AIS/ # Controllers REST
│ │ └── Resources/AIS/ # API Resources
│ ├── Jobs/AIS/ # Jobs assíncronos
│ ├── Models/ # Eloquent Models
│ ├── Providers/ # Service Providers
│ └── Services/
│ ├── AI/ # Minimax LLM
│ └── AIS/ # Core AIS services
├── config/
│ ├── ais.php # Config AIS
│ └── database.php # Conexões DB
├── database/migrations/ # Migrations
├── python/
│ ├── ais_parser.py # Parser Python
│ └── requirements.txt # Deps Python
├── routes/api.php # Rotas API
└── tests/
├── Unit/ # Testes unitários
├── Feature/ # Testes de feature
├── Integration/ # Testes de integração
└── Performance/ # Testes de carga
Estratégia de 3 camadas para garantir zero duplicatas:
Camada 1 - Redis SET NX : TTL 5 min, O(1)
Camada 2 - Bloom Filter : 1M capacity, 0.1% FPR
Camada 3 - PostgreSQL : UPSERT ON CONFLICT
Métrica
Target
Throughput
>= 50 msgs/s
Latência E2E
< 500ms
Duplicatas
0%
API Response
< 100ms (p95)
Proprietary - All rights reserved.