1

[Build in Public] Como desenvolver a arquitetura de um sistema?

Estou estudando mais sobre arquitetura recentemente e para colocar em prática resolvi registrar em um build in public o meu aprendizado e compartilhar um pouco de conhecimento.

Estou lendo o livro Fundamentos da Arquitetura de Software, então vou pegar alguns exemplos e conceitos dele. recomendo a leitura

Requisitos

Acredito que entender os requisitos de um sistema seja um ótimo ponto de partida.

No capítulo 5 é citado os Katas de Arquitetura como um método mais inteligente para arquitetos iniciantes praticarem e entenderem quais são os requisitos não funcionais:

Katas de arquitetura são exercícios práticos para treinar design de sistemas, onde a ideia é a mesma dos code katas: você não fica bom em arquitetura lendo sobre ela, mas repetindo o gesto muitas vezes em um ambiente sem consequência.

Resolvi aplicar esse kata no meu próprio projeto que venho desenvolvendo em paralelo. Segue o cenário que montei:

Descrição

Um sistema de IA que monitora câmeras de um estabelecimento e emite alertas para o segurança sobre possíveis furtos ou outras ocorrências.

Usuários

Minha meta é ter 1 estabelecimento real utilizando, mas vou pensar a arquitetura para algumas dezenas de usuários.

Requisitos

  • O usuário recebe um alerta da ocorrência junto do vídeo
  • O sistema deve permitir o download do vídeo
  • 3 tipos de usuários: Super_user (baixa vídeos, acesso aos relatórios, cria usuários), User (recebe alertas), Admin (cadastra câmeras, acesso aos relatórios, cria usuários)
  • User deve confirmar se é ocorrência ou falso positivo (essa confirmação serve pra ir treinando o modelo com o tempo)

Atributos

  • Escalabilidade: 1 cliente traz em média 20 câmeras
  • Robustez: o sistema deve ser capaz de se reconectar às câmeras automaticamente, para previnir contra quedas de rede e reinício de DVR
  • Reaproveitamento: mudar as regras da IA para diferentes clientes
  • Armazenamento: eventos validados ficam salvos por 30 dias, falsos positivos por 1 dia. O que não gera evento é excluído 1 minuto após o término do tempo de buffer

Tecnologias

Aqui vou listar as tecnologias que vou utilizar e vou linkar posts explicando como vou usá-las e os motivos pra escolher cada uma. Conforme eu for criando novos posts e desenvolvendo mais o projeto, vou editando este post aqui.

  • FFmpeg: decodificação e captura do stream RTSP das câmeras
  • YOLO + ByteTrack: detecção e rastreio de objetos nos frames
  • Motor de regras: decide se o que foi detectado vira um evento ou não
  • Docker: pra empacotar e rodar o agente em cada câmera/cliente

Se você já mexeu com arquitetura de sistemas parecidos ou tem dicas/críticas sobre essas decisões, sua ajuda vai ser muito bem vinda.

Carregando publicação patrocinada...