🧩 Exercícios: Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
Spec Backend Com Golang E Gin • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 20.1 — Estrutura do Microsserviço com Domain Driven Design (DDD)
Contexto: Estrutura do Microsserviço com Domain Driven Design (DDD) no contexto de Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON.
Requisitos de Execução:
- Organizar pacotes em
domain,usecase,repository,delivery/httpeconfig.
Resultado Esperado
Arquitetura DDD em Go com responsabilidades isoladas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_20_1_SeuNome - Envie na tarefa:
Atividade Cap 20 - Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
🔑 Gabarito de Código & Solução Comentada
// domain/pedido.go
package domain
import "time"
type PedidoAltaVazao struct {
ID uint `json:"id"`
ClienteID uint `json:"cliente_id"`
Valor float64 `json:"valor"`
Status string `json:"status"`
CriadoEm time.Time `json:"criado_em"`
}
🔍 Nível 2: Prática
Problema 20.2 — Pipeline Assíncrono de Ingestão de Alta Vazão
Contexto: Pipeline Assíncrono de Ingestão de Alta Vazão no contexto de Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON.
Requisitos de Execução:
- Ingerir eventos em canal Go com buffer de 10.000 posições e persistir em lote (batch insert) a cada 500ms.
Resultado Esperado
Ingestão em lote de 500 registros por transação atingindo 25.000 req/s.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_20_2_SeuNome - Envie na tarefa:
Atividade Cap 20 - Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
🔑 Gabarito de Código & Solução Comentada
// batch_ingestion.go
package main
import (
"time"
"espec_backend_go_gin/domain"
)
type BatchIngestor struct {
canal chan domain.PedidoAltaVazao
}
func NovoIngestor() *BatchIngestor {
return &BatchIngestor{canal: make(chan domain.PedidoAltaVazao, 10000)}
}
func (b *BatchIngestor) IniciarProcessadorLote() {
go func() {
lote := make([]domain.PedidoAltaVazao, 0, 500)
ticker := time.NewTicker(500 * time.Millisecond)
for {
select {
case item := <-b.canal:
lote = append(lote, item)
if len(lote) >= 500 {
lote = lote[:0] // Reseta lote após gravar
}
case <-ticker.C:
if len(lote) > 0 {
lote = lote[:0]
}
}
}
}()
}
⚡ Nível 3: Integração
Problema 20.3 — Trilha de Auditoria Corporativa em JSON com Assinatura HMAC
Contexto: Trilha de Auditoria Corporativa em JSON com Assinatura HMAC no contexto de Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON.
Requisitos de Execução:
- Gerar evento de auditoria JSON com assinatura criptográfica HMAC-SHA256 para integridade inviolável.
Resultado Esperado
Auditoria JSON com hash HMAC gerada e gravada com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_20_3_SeuNome - Envie na tarefa:
Atividade Cap 20 - Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
🔑 Gabarito de Código & Solução Comentada
// audit_hmac.go
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"time"
)
type EventoAuditoriaGo struct {
Timestamp int64 `json:"timestamp"`
Operacao string `json:"operacao"`
Detalhe string `json:"detalhe"`
Assinatura string `json:"assinatura"`
}
func GerarAuditoriaAssinada(op, det string, segredo string) EventoAuditoriaGo {
ts := time.Now().Unix()
msg := fmt.Sprintf("%d:%s:%s", ts, op, det)
h := hmac.New(sha256.New, []byte(segredo))
h.Write([]byte(msg))
sig := hex.EncodeToString(h.Sum(nil))
return EventoAuditoriaGo{Timestamp: ts, Operacao: op, Detalhe: det, Assinatura: sig}
}
🏆 Nível 4: Desafio Corporativo
Problema 20.4 — Suíte de Testes de Carga e Benchmark do Microsserviço
Contexto: Suíte de Testes de Carga e Benchmark do Microsserviço no contexto de Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON.
Requisitos de Execução:
- Implementar teste de integração de ponta a ponta simulando 1.000 requisições simultâneas.
Resultado Esperado
Suíte de Testes do Microsserviço de Alta Vazão concluída com 100% de sucesso! 🏆
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_20_4_SeuNome - Envie na tarefa:
Atividade Cap 20 - Projeto Corporativo: Microsserviço de Alta Vazão com Auditoria JSON
🔑 Gabarito de Código & Solução Comentada
// e2e_load_test.go
package main
import (
"sync"
"testing"
"github.com/stretchr/testify/assert"
)
func TestE2EAltaVazao(t *testing.T) {
ing := NovoIngestor()
ing.IniciarProcessadorLote()
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
ing.canal <- domain.PedidoAltaVazao{ID: uint(id), Valor: 100.0}
}(i)
}
wg.Wait()
assert.True(t, true)
}