mirror of
https://github.com/davidalves04/Trabalho-Pratico-SD.git
synced 2025-12-08 20:43:32 +00:00
225 lines
6.0 KiB
Markdown
225 lines
6.0 KiB
Markdown
# ✅ Design do Formato de Serialização - CONCLUÍDO
|
|
|
|
**Data**: 22 de outubro de 2025
|
|
**Status**: ✅ Implementado e Testado
|
|
|
|
## Resumo da Implementação
|
|
|
|
Foi realizada uma análise completa e implementação de dois formatos de serialização para comunicação entre processos no sistema de simulação de tráfego distribuído:
|
|
|
|
1. **JSON (Gson)** - Recomendado
|
|
2. **Java Native Serialization** - Fallback
|
|
|
|
## Arquivos Criados
|
|
|
|
### Documentação
|
|
- ✅ `docs/SERIALIZATION_SPECIFICATION.md` - Especificação completa (design, comparação, justificativa)
|
|
- ✅ `docs/SERIALIZATION_DECISION.md` - Guia rápido de decisão
|
|
- ✅ `src/main/java/sd/serialization/README.md` - Guia de uso do pacote
|
|
|
|
### Código de Produção
|
|
- ✅ `MessageSerializer.java` - Interface comum para serialização
|
|
- ✅ `SerializationException.java` - Exceção customizada
|
|
- ✅ `JsonMessageSerializer.java` - Implementação JSON (Gson)
|
|
- ✅ `JavaMessageSerializer.java` - Implementação Java nativa
|
|
- ✅ `SerializerFactory.java` - Factory pattern para criação
|
|
|
|
### Exemplos e Testes
|
|
- ✅ `SerializationExample.java` - Demonstração de uso
|
|
- ✅ `SerializationTest.java` - Suite de testes unitários (14 testes, todos passando)
|
|
|
|
### Configuração
|
|
- ✅ `pom.xml` - Dependência Gson adicionada
|
|
|
|
## Decisão Final: JSON (Gson)
|
|
|
|
### Justificativa
|
|
|
|
**JSON foi escolhido como formato recomendado porque:**
|
|
|
|
1. **Debugging Superior** 🐛
|
|
- Mensagens legíveis em texto
|
|
- Logs compreensíveis
|
|
- Inspeção visual fácil
|
|
|
|
2. **Tamanho Otimizado** 📦
|
|
- 54% menor que Java Serialization (300 vs 657 bytes)
|
|
- Menos banda de rede
|
|
- Menor latência de transmissão
|
|
|
|
3. **Extensibilidade** 🚀
|
|
- Dashboard web futuro
|
|
- APIs REST potenciais
|
|
- Integração universal
|
|
|
|
4. **Segurança** 🔒
|
|
- Sem vulnerabilidades de desserialização
|
|
- Validação mais simples
|
|
- Menos vetores de ataque
|
|
|
|
5. **Performance Adequada** ⚡
|
|
- Diferença: 7 μs (irrelevante)
|
|
- Volume esperado: ~100-1000 msgs/s (ambos suportam)
|
|
- Impacto no sistema: < 0.1%
|
|
|
|
## Métricas de Performance
|
|
|
|
### Testes Realizados (1000 iterações)
|
|
|
|
| Métrica | JSON (Gson) | Java Native | Diferença |
|
|
|---------|-------------|-------------|-----------|
|
|
| Tamanho médio | 300 bytes | 657 bytes | **-54%** |
|
|
| Latência média | 40.79 μs | 33.34 μs | +7.45 μs |
|
|
| Throughput | ~24k msgs/s | ~30k msgs/s | Ambos > requisito |
|
|
| Legibilidade | ✅ Texto | ❌ Binário | - |
|
|
|
|
**Conclusão**: Diferença de performance é desprezível; vantagens do JSON compensam.
|
|
|
|
## Exemplos de Mensagens
|
|
|
|
### Vehicle Transfer (JSON)
|
|
```json
|
|
{
|
|
"messageId": "a3c5e7f9-1234-5678-90ab-cdef12345678",
|
|
"type": "VEHICLE_TRANSFER",
|
|
"senderId": "Cr1",
|
|
"destinationId": "Cr2",
|
|
"timestamp": 1729595234567,
|
|
"payload": {
|
|
"id": "V123",
|
|
"type": "LIGHT",
|
|
"entryTime": 15.7,
|
|
"route": ["Cr1", "Cr2", "Cr5", "S"],
|
|
"currentRouteIndex": 1,
|
|
"totalWaitingTime": 3.2,
|
|
"totalCrossingTime": 1.8
|
|
}
|
|
}
|
|
```
|
|
|
|
## Como Usar
|
|
|
|
### Básico
|
|
```java
|
|
// Criar serializer (JSON recomendado)
|
|
MessageSerializer serializer = SerializerFactory.createDefault();
|
|
|
|
// Serializar
|
|
byte[] data = serializer.serialize(message);
|
|
|
|
// Desserializar
|
|
Message msg = serializer.deserialize(data, Message.class);
|
|
```
|
|
|
|
### Configuração via Sistema
|
|
```bash
|
|
# Escolher tipo
|
|
java -Dsd.serialization.type=JSON -jar app.jar
|
|
|
|
# Debug mode (pretty print)
|
|
java -Dsd.serialization.json.prettyPrint=true -jar app.jar
|
|
```
|
|
|
|
## Validação
|
|
|
|
### Testes Unitários
|
|
✅ **14/14 testes passando**
|
|
|
|
Cobertura:
|
|
- ✅ Serialização/desserialização JSON
|
|
- ✅ Serialização/desserialização Java
|
|
- ✅ Validação de erros
|
|
- ✅ Tratamento de exceções
|
|
- ✅ Comparação de tamanhos
|
|
- ✅ Integridade de dados
|
|
- ✅ Factory pattern
|
|
- ✅ Round-trip completo
|
|
|
|
### Exemplo Executado
|
|
```
|
|
JSON size: 300 bytes
|
|
Java size: 657 bytes
|
|
Difference: 357 bytes (54.3% menor)
|
|
|
|
Performance:
|
|
JSON: 40.79 μs/operation
|
|
Java: 33.34 μs/operation
|
|
|
|
✅ Todos os testes bem-sucedidos
|
|
```
|
|
|
|
## Próximos Passos
|
|
|
|
### Integração no Sistema
|
|
|
|
1. **Comunicação entre Cruzamentos**
|
|
```java
|
|
// No sender (Cr1)
|
|
MessageSerializer serializer = SerializerFactory.createDefault();
|
|
byte[] data = serializer.serialize(message);
|
|
outputStream.write(data);
|
|
|
|
// No receiver (Cr2)
|
|
byte[] received = inputStream.readAllBytes();
|
|
Message msg = serializer.deserialize(received, Message.class);
|
|
```
|
|
|
|
2. **Dashboard Updates**
|
|
```java
|
|
// Serializar estatísticas
|
|
StatsUpdate stats = new StatsUpdate(...);
|
|
byte[] data = serializer.serialize(stats);
|
|
sendToDashboard(data);
|
|
```
|
|
|
|
3. **Logging e Debugging**
|
|
```java
|
|
// Logar mensagens (JSON é legível)
|
|
if (debugMode) {
|
|
String json = new String(data, StandardCharsets.UTF_8);
|
|
logger.debug("Sent message: " + json);
|
|
}
|
|
```
|
|
|
|
## Benefícios para o Projeto
|
|
|
|
1. **Desenvolvimento** 💻
|
|
- Debugging rápido e fácil
|
|
- Logs legíveis
|
|
- Menos tempo depurando problemas de serialização
|
|
|
|
2. **Manutenção** 🔧
|
|
- Código mais simples
|
|
- Evolução de protocolo facilitada
|
|
- Menos problemas de compatibilidade
|
|
|
|
3. **Extensibilidade** 📈
|
|
- Dashboard web nativo
|
|
- APIs REST futuras
|
|
- Integração com ferramentas
|
|
|
|
4. **Aprendizado** 📚
|
|
- Padrão da indústria
|
|
- Experiência com JSON
|
|
- Boas práticas de design
|
|
|
|
## Referências
|
|
|
|
- [Especificação Completa](./SERIALIZATION_SPECIFICATION.md)
|
|
- [Guia de Decisão](./SERIALIZATION_DECISION.md)
|
|
- [README do Pacote](../src/main/java/sd/serialization/README.md)
|
|
- [Código de Exemplo](../src/main/java/sd/serialization/SerializationExample.java)
|
|
- [Testes](../src/test/java/sd/serialization/SerializationTest.java)
|
|
|
|
## Conclusão
|
|
|
|
✅ **Formato de serialização definido e implementado**
|
|
✅ **JSON (Gson) escolhido como padrão**
|
|
✅ **Implementação completa e testada**
|
|
✅ **Documentação abrangente criada**
|
|
✅ **Pronto para integração no sistema distribuído**
|
|
|
|
---
|
|
|
|
**Próxima etapa recomendada**: Implementar camada de comunicação (sockets) usando os serializers criados.
|