Skip to Content
ArquiteturaArquitetura Semântica

Arquitetura Semântica

Esta página descreve o modelo de dados do IronFlock: os ativos principais e como se relacionam entre si. Enquanto a Visão Geral da Arquitetura cobre as camadas físicas do sistema (edge, cloud, message broker), aqui o foco é na estrutura lógica — as relações entre projetos, dispositivos, apps e dados.

Visão Geral das Entidades

Conta ├─ App │ └─ Release └─ Projeto ├─ Dispositivo ─────────┐ │ └─ Componente Edge ├─ Grupo ───────────────┘ ├─ Instalação de Release ├─ Fleet Database │ └─ Tabelas de Dados ├─ Dashboard └─ Alarme

Ativos Principais

Conta

Uma conta é a identidade de nível superior — uma pessoa ou organização conectada ao IronFlock. Uma conta possui projetos e apps. Apps e projetos são filhos diretos de uma conta, mas existem independentemente um do outro.

App

Uma app é um pacote de software implantável. Apps pertencem a uma conta, não a um projeto — uma mesma app pode ser instalada em muitos projetos diferentes. Uma app não é executada por si só; serve como entrada de catálogo cujos releases podem ser instalados em dispositivos.

Release

Um release é uma compilação imutável e versionada de uma app. Apenas releases no estado READY podem ser instalados em dispositivos. Releases são imutáveis — para alterar o comportamento de uma app, um novo release é publicado.

Projeto

Um projeto é o limite principal de isolamento. Tudo dentro de um projeto — dispositivos, grupos, instalações, dados, dashboards, alarmes — é invisível para outros projetos. Cada projeto tem seu próprio realm WAMP no message broker, um Fleet Database dedicado e seu próprio conjunto de dispositivos, grupos, instalações, dashboards e alarmes.

Dispositivo

Um dispositivo é uma máquina Linux física ou virtual executando o agente IronFlock. Cada dispositivo pertence a exatamente um projeto. Um dispositivo hospeda os componentes edge dos releases instalados — os containers que rodam localmente no hardware. Um dispositivo pode hospedar componentes edge de múltiplos releases simultaneamente e pode ser membro de múltiplos grupos.

Grupo

Um grupo é uma coleção lógica de dispositivos dentro de um projeto, usado para operações em massa. Um dispositivo pode pertencer a múltiplos grupos (muitos para muitos). Quando um release é instalado em um grupo, cada dispositivo membro recebe uma instalação que pode herdar a configuração do grupo ou sobrescrevê-la localmente.

Instalação de Release

Uma instalação de release é a instância em execução de um release específico em um dispositivo específico. É a junção entre um dispositivo e um release dentro de um projeto. Quando instalada via grupo, cada instalação de dispositivo pode herdar ou sobrescrever a configuração do grupo, fornecendo padrões para toda a frota com exceções por dispositivo.

Instalação de Grupo ├─ Dispositivo A → herda do grupo ├─ Dispositivo B → herda do grupo └─ Dispositivo C → sobrescreve com configuração personalizada

Fleet Database

Cada projeto tem um Fleet Database dedicado — um banco de dados PostgreSQL com a extensão TimescaleDB para dados de séries temporais. Componentes edge nos dispositivos publicam telemetria via WAMP, o serviço FleetDB grava no banco de dados do projeto, e os dados podem ser consultados por dashboards, o serviço de consultas IA e ferramentas externas.

Dashboard

Um dashboard visualiza dados do Fleet Database do projeto. Dashboards pertencem a um projeto e podem combinar dados de múltiplas apps e dispositivos em uma única visualização.

Alarme

Um alarme é uma regra de alerta baseada em limiar dentro de um projeto. Alarmes monitoram dados no Fleet Database e disparam notificações quando as condições são atendidas.

Diagrama de Relacionamento de Entidades

┌──────────┐ │ Conta │ └──┬───┬───┘ │ │ │ │ possui 1:N │ ▼ │ ┌─────────────────────┐ │ │ App │ │ └────────┬────────────┘ │ │ contém 1:N │ ▼ │ ┌─────────────────────┐ │ │ Release │ │ └─────────────────────┘ │ ▲ │ │ referencia │ possui 1:N│ ▼ │ ┌──────────────────────────────────────────────────────────────────┐ │ Projeto │ │ │ │ ┌─────────────┐ N:N ┌──────────┐ │ │ │ Dispositivo │◆──────◆│ Grupo │ │ │ └──────┬──────┘ └────┬─────┘ │ │ │ hospeda │ instala em │ │ │ componentes edge │ dispositivos membros │ │ │ 1:N │ │ │ │ ▼ │ │ │ ┌──────────────┐ │ │ └───────────►│ Instalação │ (herda ou │ │ │ de Release │ sobrescreve grupo) │ │ └──────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ Fleet Database │ │ │ │ (TimescaleDB) │ │ │ │ ┌──────┐ ┌──────┐ │ │ │ │ │Tabela│ │Tabela│...│ │ │ │ └──────┘ └──────┘ │ │ │ └───────────────────────┘ │ │ ▲ │ │ │ consultado por │ │ ┌───────────┴───────────┐ │ │ │ Dashboard │ │ │ └───────────────────────┘ │ │ │ │ ┌───────────────────────┐ │ │ │ Alarme │ │ │ │ (monitora FleetDB) │ │ │ └───────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘

Resumo de Relacionamentos

RelacionamentoTipoDescrição
Conta → Projeto1:NUma conta possui múltiplos projetos
Conta → App1:NUma conta possui múltiplas apps (independentes de projetos)
App → Release1:NUma app contém múltiplos releases versionados
Projeto → Dispositivo1:NCada dispositivo pertence a exatamente um projeto
Projeto → Grupo1:NGrupos pertencem a um projeto
Dispositivo ↔ GrupoN:NUm dispositivo pode estar em múltiplos grupos; um grupo contém múltiplos dispositivos
Projeto → Fleet Database1:1Cada projeto tem seu próprio banco de dados dedicado
Projeto → Dashboard1:NDashboards pertencem a um projeto e consultam seu Fleet Database
Projeto → Alarme1:NAlarmes pertencem a um projeto e monitoram seu Fleet Database
Dispositivo → Instalação de Release1:NUm dispositivo hospeda componentes edge de múltiplas instalações de release
Instalação de Release → ReleaseN:1Cada instalação referencia uma versão de release específica
Last updated on