Pular para o conteúdo

Topologia de cloud

flowchart TB
    subgraph EDGE[Edge & DNS]
        CF[Cloudflare DNS + WAF]
        CDN[Static assets CDN]
    end

    subgraph DOKS[DigitalOcean Kubernetes Cluster]
        ING[Ingress NGINX]

        subgraph APPS[Apps]
            FRONT[solutio-front<br/>Next 16]
            API[solutio-api<br/>Rails]
            LISTENER[alarm-listener]
            VOICE[voice-agent]
            DOCS[solutio-docs<br/>Fumadocs]
            ATLAS[solutio-atlas<br/>Astro]
        end

        subgraph DATA[Data layer]
            PG[(PostgreSQL<br/>+ TimescaleDB)]
            REDIS[(Redis)]
        end

        subgraph MEDIA[Media layer]
            LK[LiveKit cluster]
            G2[go2rtc]
            MTX[MediaMTX]
        end

        subgraph AI[AI layer]
            VECTOR[Vector DB externo<br/>Qdrant/Pinecone]
        end
    end

    CF --> ING
    ING --> FRONT
    ING --> API
    ING --> DOCS
    ING --> ATLAS
    LISTENER --> API
    VOICE --> API
    API --> PG
    API --> REDIS
    API --> VECTOR
    LISTENER --> PG
    FRONT --> LK
    LK --> G2
    G2 --> MTX

    classDef edge fill:#92ccdf,stroke:#0e2a3a,color:#0e2a3a
    classDef app fill:#00a9c9,stroke:#2b5383,color:#fff
    classDef data fill:#2b5383,stroke:#0e2a3a,color:#fff
    classDef media fill:#f4a261,stroke:#9a5d2c,color:#fff
    classDef ai fill:#76c0d5,stroke:#0e2a3a,color:#0e2a3a

    class CF,CDN edge
    class FRONT,API,LISTENER,VOICE,DOCS,ATLAS,ING app
    class PG,REDIS data
    class LK,G2,MTX media
    class VECTOR ai
DecisãoEscolhaAlternativa rejeitada
OrquestradorDOKS (DO Kubernetes)App Platform (limitado), AWS (custo BR)
DB principalPostgreSQL 16 + TimescaleDBpgvector (separação de concerns), MongoDB
Mídia ao vivoLiveKit self-hostedTwilio (custo), Agora
Bridge câmerago2rtc + MediaMTXJanus, Kurento (descontinuados)
Vector DBExterno (Qdrant ou Pinecone)pgvector no main DB
BackendRails canonicalModular Rails, Hanami, NestJS
FrontNext 16 (App Router)Remix, Astro (apenas para docs)
MobileExpo SDK 54Flutter (Sowil), React Native bare
flowchart TB
    subgraph DEFAULT[Default — multi-tenant pod]
        DB1[(PostgreSQL único)]
        APP1[solutio-api]
        APP1 -->|acts_as_tenant| DB1
        DB1 --> ORG1[Org A]
        DB1 --> ORG2[Org B]
        DB1 --> ORG3[Org C]
    end

    subgraph ENT[Enterprise — pod isolado opcional]
        DB2[(PostgreSQL dedicado)]
        APP2[solutio-api dedicado]
        APP2 -->|acts_as_tenant| DB2
        DB2 --> ORGE[Org Enterprise]
    end

    classDef def fill:#00a9c9,stroke:#2b5383,color:#fff
    classDef ent fill:#2b5383,stroke:#0e2a3a,color:#fff
    class DEFAULT,DB1,APP1,ORG1,ORG2,ORG3 def
    class ENT,DB2,APP2,ORGE ent

Default é pod multi-tenant. Enterprise tier (preço diferenciado) oferece pod dedicado por exigência de isolamento físico.

ItemMensal (USD)Notas
DOKS 3 nodes (POC)$144Subscrita; escala por demanda
PostgreSQL droplet$48Self-host TimescaleDB
LiveKit cluster$963 nodes pequenos
Vector DB externo$50Plano starter
Object storage$20Spaces
Total baseline~$360Antes de tráfego e replicas

Detalhe de custo e plano de escala vivem em docs/architecture/cloud-deployment-plan.md.