Pular para conteúdo

Aula 17 - Diagramação Avançada de Componentes e Implantação 🏗️

Objetivo Pedagógico

Objetivo: Conceber especificações formais de arquitetura de software utilizando Diagramas de Componentes e Diagramas de Implantação da UML 2.5 e relacioná-los aos níveis de Container e Deployment do C4 Model.


📑 1. Fundamentos Teóricos & Análise Técnica

A Unified Modeling Language (UML 2.5) provê a semântica gráfica padrão para modelar os aspectos estáticos e dinâmicos de sistemas complexos. Na dimensão estrutural física e lógica, dois diagramas são indispensáveis: 1. Diagrama de Componentes: - Modela a organização e as dependências entre os módulos de software substituíveis e autônomos (Componentes). - Portas e Interfaces: Interfaces Providas (Provided Interfaces - notação de pirulito / ball) representam os serviços expostos pelo componente, enquanto Interfaces Requeridas (Required Interfaces - notação de soquete / socket) representam os contratos que o componente consome de terceiros. 2. Diagrama de Implantação (Deployment Diagram): - Modela a arquitetura física de hardware e infraestrutura de execução: - Nós (Nodes): Dispositivos computacionais físicos ou virtuais (servidores, instâncias EC2, nós de cluster Kubernetes). - Ambientes de Execução (Execution Environments): Softwares de sistema que hospedam artefatos (contêineres Docker, JVM, servidores web). - Artefatos (Artifacts): O resultado concreto da compilação e empacotamento (arquivos .jar, imagens OCI, bundles JavaScript) alocados dentro dos nós. 3. Convergência com o C4 Model: - Os Diagramas de Componentes UML alinham-se ao Nível 3 (Component) do C4 Model, enquanto os Diagramas de Implantação correspondem com precisão ao Diagrama de Deployment do C4.

📐 Arquitetura Conceitual & Diagrama de Fluxo

graph TD
    subgraph Nó Fisico: Servidor de Aplicação AWS us-east-1
        subgraph Runtime: Cluster Kubernetes Worker
            CompApp["Componente: OrderService (Imagem Docker OCI)"]
            PortIn["Interface Provida: REST API (Porta 8080)"]
            PortOut["Interface Requerida: Conexão PostgreSQL (Porta 5432)"]
            PortIn --> CompApp
            CompApp --> PortOut
        end
    end
    subgraph Nó de Banco: AWS RDS Aurora Multi-AZ
        DBEngine["Instância PostgreSQL Primária"]
    end
    PortOut -.-> DBEngine
    style CompApp fill:#e1f5fe,stroke:#01579b
    style PortIn fill:#fff3e0,stroke:#e65100
    style PortOut fill:#f3e5f5,stroke:#7b1fa2
    style DBEngine fill:#e8f5e9,stroke:#2e7d32

🔍 Pilares e Diretrizes Técnicas

Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Contratos por Interfaces Providas e Requeridas: Desacoplamento formal entre módulos que garante a intercambialidade de implementações. - Mapeamento Físico de Artefatos em Nós: Visibilidade inequívoca sobre onde cada binário ou contêiner é fisicamente executado em produção. - Comunicação de Protocolos de Rede: Especificação explícita de protocolos de transporte (TCP, TLS, gRPC) nas arestas de conexão entre nós. - Alinhamento com Arquitetura de Nuvem: Modelagem da resiliência através da distribuição de nós em múltiplas Zonas de Disponibilidade (Multi-AZ).


🛠️ 2. Implementação Prática em UML 2.5, Arquitetura de Software e C4 Model

Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:

// deployment_component_diagram.mermaid (Diagrama de Componentes e Implantação Físico-Lógica)
graph TB
    subgraph CloudEnv["Infraestrutura de Nuvem (VPC Protegida)"]
        subgraph K8sCluster["Cluster Kubernetes EKS"]
            subgraph PodFrontend["Pod: Web App"]
                CompWeb["Component: React SPA (Nginx Container)"]
            end
            subgraph PodBackend["Pod: Core API"]
                CompAPI["Component: NestJS Order Engine"]
                IntREST["Provided Interface: /api/v1 (HTTP/2)"]
                IntQueue["Required Interface: AMQP Connection"]
            end
        end
        subgraph ManagedServices["Serviços Gerenciados Cloud"]
            CompQueue["Broker: RabbitMQ Cluster"]
            CompDB["Database: PostgreSQL RDS Aurora"]
        end
    end

    CompWeb --> IntREST
    IntREST --> CompAPI
    CompAPI --> IntQueue
    IntQueue --> CompQueue
    CompAPI -->|Conexão TCP/SSL 5432| CompDB

💡 Análise Passo a Passo do Código

  1. Encapsulamento em Subgrafos: Representa as fronteiras físicas de containers, clusters Kubernetes e VPCs de nuvem.
  2. Interfaces Requeridas e Providas: Explicita formalmente os canais de entrada e saída do componente central de negócio.
  3. Rotulação de Protocolos e Portas: Documenta para a equipe de infraestrutura e redes exatamente quais portas devem ser abertas em firewalls.

🎯 3. Próximos Passos & Sequência Didática