Self Hosting é para o seu projeto? Pilares da hospedagem de aplicações, IaaS, PaaS, Kubernetes e Serverless

Michel Oliveira
14 min read
Self Hosting é para o seu projeto? Pilares da hospedagem de aplicações, IaaS, PaaS, Kubernetes e Serverless

Introdução

Decidir entre self hosting, PaaS ou serverless não é apenas uma escolha de custo. Cada modelo impacta diretamente confiabilidade, velocidade de entrega, escalabilidade, segurança e necessidade de especialização da equipe. Para os times, a decisão deve levar em conta tradeoffs técnicos, operacionais e financeiros.

Siglas e Acrônimos

  • IaaS: Infrastructure as a Service – modelo em que o provedor fornece infraestrutura (VMs, rede, armazenamento) e o usuário gerencia o sistema operacional e aplicações.
  • K8s: Kubernetes – plataforma open-source para orquestração de containers, automatizando deploy, scaling e operação de aplicações containerizadas.
  • PaaS: Platform as a Service – provedor oferece plataforma completa, incluindo runtime, middleware e ferramentas de deploy, reduzindo complexidade operacional.
  • FaaS: Function as a Service – modelo serverless em que funções isoladas são executadas sob demanda, escalando automaticamente e cobrando por invocação. Em alguns cloud providers, pode oferecer infraestrutura dedicada para funções críticas ou com requisitos de performance específicos.
  • HA: High Availability – arquitetura de alta disponibilidade, minimizando downtime e garantindo continuidade do serviço.
  • Lock-In: Dependência de um provedor ou plataforma específica, dificultando migração para outro serviço ou ambiente sem esforço técnico e custo significativo.
  • HPA: Horizontal Pod Autoscaler – Kubernetes ajusta dinamicamente número de pods com base em métricas de carga.
  • VPA: Vertical Pod Autoscaler – Kubernetes ajusta recursos (CPU/memória) de pods existentes conforme utilização.
  • CSI: Container Storage Interface – padrão de interface para volumes persistentes em containers.
  • CI/CD: Continuous Integration / Continuous Deployment – práticas de integração e deploy contínuo para automação de testes e entrega.
  • RTO: Recovery Time Objective – tempo máximo tolerável para recuperação após falha.
  • RPO: Recovery Point Objective – quantidade máxima de dados que pode ser perdida em caso de falha.
  • SLA: Service Level Agreement – acordo de nível de serviço que define disponibilidade, tempo de resposta, suporte e penalidades, ajudando a medir risco e confiabilidade de provedores e serviços.

Modelos de hospedagem

Self Hosting / IaaS

  • Provedores: Hetzner, Linode, DigitalOcean, AWS EC2, Azure VMs, etc.
  • Prós: controle total sobre o sistema operacional, tuning de desempenho, menor custo previsível em workloads contínuos, flexibilidade em arquiteturas customizadas.
  • Contras: alta responsabilidade operacional: patching, backups, monitoramento, segurança e recuperação de desastres.

Plataformas Self-Hosted

Ferramentas como Coolify, CapRover e Dokku abstraem parte da complexidade, oferecendo:

  • Deploy via Git.
  • Gerenciamento de certificados TLS.
  • Integração com bancos e caches.
  • Painéis de observabilidade básicos.

Tradeoff: menos complexidade, mas ainda requer expertise em segurança, backup e scaling.

PaaS

  • Exemplos: Azure App Service, AWS Elastic Beanstalk, Container Apps.
  • Prós: abstração de infraestrutura, CI/CD simplificado, deploy rápido, escalabilidade automática, observabilidade integrada.
  • Contras: lock-in significativo, limites de configuração, custos podem escalar rapidamente.

Managed Kubernetes

  • Exemplos: AKS (Azure), EKS (AWS), GKE (Google Cloud).
  • Prós: control plane gerenciado, integração com serviços nativos, HPA/VPA, escalabilidade e resiliência.
  • Contras: ainda exige conhecimento em Kubernetes, custos mais altos, complexidade de troubleshooting.

Serverless / FaaS

  • Exemplos: AWS Lambda, Azure Functions.
  • Prós: escala automática instantânea, custo por invocação, ideal para workloads event-driven.
  • Contras: cold starts, limites de timeout/memória, lock-in extremo, dificuldade de portabilidade.

Tradeoffs e decisão estratégica

flowchart LR SelfHosting[Self Hosting / IaaS] --> Controle[Controle Total] SelfHosting --> Operacao[Alta Responsabilidade Operacional] PaaS[Plataformas Gerenciadas / Serverless] --> Conveniencia[Alta Conveniência] PaaS --> LockIn[Lock-In e Limites] ManagedK8s[Managed Kubernetes] --> Equilibrio[Equilíbrio entre Controle e Conveniência]

Escalabilidade por modelo de hospedagem

ModeloEscalabilidadeConfiabilidadeObservações
Self Hosting / IaaSManual ou semi-automáticaDepende totalmente do time; risco de downtime ao provisionar ou ajustar VMs/containers.Escalar significa provisionar mais VMs ou containers; pode usar scripts, Terraform, Ansible ou Kubernetes self-hosted. Escalabilidade limitada ao orçamento e capacidade de operação do time.
Plataformas Self-Hosted (Coolify, CapRover, Dokku)LimitadaDepende da infraestrutura subjacente; menos risco que IaaS puro, mas ainda manual.Algumas abstrações permitem scaling horizontal de containers, mas infraestrutura subjacente ainda precisa ser provisionada manualmente.
Managed KubernetesAutomática e configurávelAlta confiabilidade do control plane; escalabilidade quase transparente, sujeito a quotas do provedor e configuração correta do cluster.HPA/VPA, Cluster Autoscaler e integração com storage/infra do provedor permitem escalabilidade quase transparente.
PaaSAutomáticaAlta confiabilidade; plataforma gerencia runtime, scaling e HA.Apps podem escalar horizontalmente e verticalmente conforme demanda; limites e políticas definidas pelo provedor. Excelente para workloads web e APIs.
Serverless / FaaSAutomática, elástica e granularMuito alta; escalabilidade instantânea e isolada por função, mas sujeito a cold starts, limites de timeout, memória e concorrência.Cada invocação de função é independente, escala instantaneamente conforme demanda; billing granular por invocação. Limites de memória, timeout e concorrência podem restringir cargas extremas.

Insights

  • A escala horizontal (mais instâncias ou pods) é a forma mais comum de lidar com aumento de demanda; quase todos os modelos modernos suportam isso, mas o esforço varia.
  • A escala vertical (mais CPU/memória por instância) é limitada em VMs self-hosted e serverless, mas mais simples em PaaS ou Kubernetes gerenciado com VPA.
  • Serverless é o modelo mais elástico, mas com trade-offs de cold starts, limites de execução e lock-in.
  • Managed Kubernetes oferece um equilíbrio: escalabilidade automática, mas ainda exige configuração do cluster, quotas de nodes e monitoramento para evitar overscaling.

Kubernetes Self-Hosted na Hetzner

Hetzner oferece integrações com custo competitivo e rede estável, ideal para clusters self-hosted com autoscale.

  • Provisionamento: Terraform, Ansible ou Pulumi.
  • Control Plane: multi-master HA ou k3s para simplificação.
  • Hetzner Cloud Controller Manager: provisiona load balancers, IPs flutuantes e volumes automaticamente.
  • Cluster Autoscaler: ajuste automático de nodes baseado em workload.
  • Storage: CSI driver Hetzner para volumes persistentes.
  • Observabilidade e GitOps: ArgoCD/Flux + Prometheus/Grafana + Velero para backups são possíveis.

Diagrama de arquitetura K8s autoscalável na Hetzner

graph TD subgraph Hetzner[Hetzner Cloud] LB[Load Balancer] CP[Control Plane - Pode ser HA] NodePool[Pool de Nodes Kubernetes escaláveis] Storage[Volumes Persistentes CSI] end LB --> NodePool NodePool <--> CP NodePool --> Storage

Coolify / CapRover / Dokku em VMs IaaS (Self Hosted)

Plataformas self-hosted como Coolify, CapRover e Dokku facilitam o deploy de aplicações em VMs IaaS, oferecendo integração com Git, gerenciamento de bancos de dados, certificados TLS, logs, rotas e serviços auxiliares.

  • Essas ferramentas reduzem a complexidade operacional inicial, permitindo que equipes pequenas ou com menos experiência em infraestrutura façam deploys rápidos e consistentes.

Trade-offs:

  • Escalabilidade limitada e dependente da infraestrutura subjacente.
  • Backup, monitoramento e segurança continuam sob responsabilidade do time.
  • Customizações avançadas podem exigir conhecimento técnico adicional ou acesso direto à VM.

São ideais para times que buscam agilidade e conveniência, mantendo controle sobre a infraestrutura sem a necessidade de montar toda a stack manualmente.

Kubernetes Gerenciado (Managed Kubernetes)

Kubernetes Gerenciados, como AKS (Azure), EKS (AWS) e GKE (Google Cloud), abstrem grande parte da complexidade operacional de um cluster Kubernetes, mas ainda mantém nuances importantes para os times:

  • Control Plane Gerenciado: O provedor mantém o master/control plane atualizado (se ativado, muitas vezes com zero downtime e com recovery em falha), aplicando patches de segurança e garantindo alta disponibilidade (HA) sem intervenção do usuário.
  • Atualizações e Patches:
    • Control plane: atualizações podem ser automáticas e patching gerenciado pelo provedor.
    • Nodes: dependendo do serviço, o provedor pode oferecer atualizações automáticas ou o time precisa aplicar patches manualmente via node pools.
  • Provisionamento de Nodes: Criação e gerenciamento de pools de nodes, escalabilidade horizontal (HPA) e vertical (VPA) configuráveis. Autoscaling pode ser automático, com nodes adicionados/removidos conforme demanda.
  • Segurança:
    • Autenticação e RBAC integrados.
    • Atualizações regulares de segurança para o control plane.
    • Policies de network e integração com serviços de identity do provedor.
  • Backup e Recuperação: Geralmente o provedor garante HA do control plane, mas backups de volumes e estado da aplicação (etcd) podem precisar ser gerenciados pelo time.
  • Integração com Serviços Nativos: Load balancers, storage classes, monitoramento, logging e serviços de identidade já integrados.
  • Tradeoffs:
    • Menor overhead operacional comparado a clusters self-hosted.
    • Maior custo do que manter VMs próprias.
    • Customizações profundas do control plane limitadas.
    • Lock-in parcial no provedor.

Kubernetes Gerenciado oferece um ponto intermediário entre self-hosted e PaaS/serverless, equilibrando controle sobre workloads e conveniência operacional. Para workloads críticos, ainda é essencial entender como o provedor aplica patches, atualizações e como configurar alertas e políticas de autoscaling e segurança.

Nível de Serviço ou SLA (Service Level Agreement)

O SLA define os níveis de serviço que um provedor se compromete a entregar, incluindo disponibilidade, suporte e tempo de resposta a incidentes. Entender o SLA é crítico para avaliar risco e planejamento de continuidade.

  • Disponibilidade Garantida: expressa em percentual (ex.: 99,9%). Impacta diretamente o downtime tolerável.
  • Tempo de Resposta a Incidentes: SLA pode definir prazos para abertura e resolução de tickets críticos.
  • Suporte: nível de suporte incluso e canais disponíveis (chat, telefone, email).
  • RTO e RPO: frequentemente atrelados a SLA, definindo tolerância a downtime e perda de dados.
  • Penalidades: cláusulas de compensação caso o provedor não cumpra os níveis acordados.
  • Monitoramento e Alertas: disponibilidade de métricas, logs e dashboards para acompanhamento do SLA.
  • Diferenças entre modelos:
    • IaaS Self-Hosted: SLA do provedor sobre a infraestrutura, não cobre a aplicação.
    • Managed Kubernetes: SLA cobre control plane e nodes (dependendo do provedor); workloads ainda precisam de monitoramento e backups (alguns provedores oferecem nativamente).
    • PaaS/Serverless: SLA cobre plataforma completa, incluindo runtime, escalabilidade e serviços nativos, reduzindo responsabilidade operacional.

Avaliar SLA ajuda a decidir o tradeoff entre controle operacional vs conveniência e entender riscos reais antes de migrar workloads críticas.

Dependência e Especialização do Time

A escolha do modelo de hospedagem impacta diretamente quanto conhecimento especializado é exigido do time e o nível de responsabilidade sobre a operação.

ModeloEspecialização do TimeObservações
Self Hosting / IaaSAltaResponsável por toda a operação da infraestrutura.
Plataformas Self-Hosted (Coolify, CapRover, Dokku)Média-AltaParte da complexidade é abstraída, mas ainda necessário conhecimento técnico para monitoramento, segurança e scaling.
Managed KubernetesMédia-Alta (geralmente alta inicialmente)O provedor gerencia o control plane e parte da infraestrutura, mas o time mantém expertise para workloads, CI/CD e segurança.
PaaS / ServerlessMédia (geralmente alta inicialmente)Maior parte da operação gerenciada pelo provedor com as configurações fornecidas. O time pode focar na aplicação e na lógica de negócio.

Suporte do Cloud Provider x Nível de Serviço

ModeloSLA / Nível de ServiçoSuporte do ProvedorObservações
Self Hosting / IaaSInfraestrutura apenas (uptime VMs, rede)Variável (depende do provider)Time interno responsável por patching, backups, monitoramento e recovery.
Plataformas Self-Hosted (Coolify, CapRover, Dokku)Não há SLA formal (das plataformas)Limitado, community-drivenEquipe interna mantém uptime e recuperação.
Managed KubernetesControl plane e muitas vezes, nodesDepende do plano contratado; pode incluir troubleshooting do clusterProvedor garante atualizações e HA do control plane, workloads ainda são responsabilidade do time.
PaaS / ServerlessPlataforma completa (runtime, escalabilidade, serviços nativos)Robusto, muitas vezes 24/7Alta conveniência operacional: o time foca na aplicação, enquanto o provedor gerencia patching, scaling, backups e recovery.

Em resumo, quanto mais abstrata a solução, menor a necessidade de especialização em infraestrutura, permitindo que o time concentre esforços em desenvolvimento e operação da aplicação.

Insights:

  • Quanto mais abstrato o modelo (PaaS/Serverless), menor a necessidade de especialistas em infraestrutura dedicados.
  • Soluções self-hosted ou IaaS exigem conhecimento profundo, tornando o time um ponto crítico do sistema.
  • Managed Kubernetes fornece equilíbrio: parte da complexidade operacional é removida, mas ainda exige know-how do time para configuração, segurança e recovery.
  • Estratégias de documentação, automação (IaC, pipelines, GitOps) aumentam a eficiência mesmo em modelos complexos.

Níveis de responsabilidade - Time x Provedor de Infraestrutura

  • Quanto maior o nível, maior a responsabilidade do time sobre a infraestrutura.
  • Quanto menor o nível, maior o acoplamento com o provedor (lock-in).
flowchart TB A["🟪 Nível 4: Self Hosting / IaaS - Time gerencia toda a infraestrutura"] B["🟨 Nível 3: Self Hosting com Coolify, CapRover, Dokku - Time gerencia plataforma e infraestrutura"] C["🟦 Nível 2: Managed Kubernetes - Provedor gerencia control plane, time cuida de workloads e configuração do cluster"] D["🟩 Nível 1: PaaS / Serverless - Provedor gerencia infraestrutura, time foca na configuração da plataforma e deploy da aplicação"] D --> C --> B --> A

Checklist de decisão

  1. Requisitos técnicos: latência, compliance, IOPS, GPUs, localização dos dados, RTO/RPO.
  2. Habilidades da equipe: experiência em Kubernetes, automação, redes, observabilidade.
  3. Custos reais e lock-in: modelar uma prévia orçamentária incluindo planejamento de SRE/DevOps, considerando que soluções com alto lock-in podem reduzir o esforço operacional, mas aumentam a dependência do provedor e os custos de migração; soluções com baixo lock-in exigem mais horas de SRE/DevOps para manutenção e automação, mas oferecem maior flexibilidade futura.
  4. Protótipo de deploy: testar PaaS e self-hosted para medir esforço.
  5. Segurança e conformidade: lacunas de controle interno vs provedor.
  6. Automação: IaC, observabilidade, backups, testes de recovery.
  7. Plano de rollback/migração: contingência caso o modelo inicial falhe.

Recomendações

Perfil do TimeNecessidadesModelos RecomendadosObservações
Equipes maduras com expertise em infraestruturaControle, custo previsível, SLA flexívelSelf Hosting / IaaS, Kubernetes self-hostedIdeal para workloads não críticos, com portabilidade e controle total da infraestrutura.
Equipes menores ou com foco em velocidade de entregaAbstração de operação, menos dependência de especialistas dedicados, alto SLAPaaS, Managed Kubernetes, ServerlessMelhor para workloads web críticos, APIs e event-driven. Reduz overhead operacional e acelera deploys. Portabilidade alta dependendo da plataforma.
Todos os perfisTrade-offs de custo, lock-in e disponibilidadeAvaliar caso a casoSempre planejar rollback, contingência e estratégias de monitoramento antes de migrar workloads críticas.
  • Custo:
    • Self Hosting / IaaS: custo previsível em workloads contínuos, mas exige investimento em time e operação.
    • Plataformas Self-Hosted: custo ainda previsível, reduz overhead operacional, mas ainda demanda expertise.
    • Managed Kubernetes: custo mais alto que VMs próprias, mas reduz carga operacional por ser gerenciado em relação aos processos.
    • PaaS / Serverless: pode escalar rapidamente e se tornar caro em workloads de alta demanda, embora reduza esforço da equipe.

E não acaba por aí: mesmo escolhendo o modelo de hospedagem mais conveniente, pode ser necessário configurar firewalls, application gateways e outras camadas de proteção para garantir uma barreira mínima de segurança, controlando tráfego, prevenindo acessos não autorizados e protegendo suas aplicações contra ataques comuns. Além disso, recomenda-se implementar monitoramento contínuo, auditoria de logs, patching regular e políticas de privilégio mínimo, garantindo que a infraestrutura e as aplicações permaneçam seguras e resilientes.

E o Banco de Dados: Gerenciado ou Não?

A escolha entre bancos de dados gerenciados ou self-hosted é semelhante aos trade-offs da aplicação. Um banco gerenciado (RDS, Azure SQL, Cloud Spanner, MongoDB Atlas) cuida de backups, replicação, escalabilidade e patches, permitindo que o time foque em modelagem, queries e lógica de negócio, mas aumenta o lock-in e pode ter custo mais alto. Um banco self-hosted oferece controle total sobre tuning, versionamento e otimizações, mas exige que o time gerencie alta disponibilidade, failover, backup e segurança, aumentando a carga operacional e o risco de downtime se mal configurado.

Mas atenção: observe a latência do banco de dados, especialmente se ele estiver fora da nuvem onde a aplicação roda ou em outra rede no mesmo provedor. Mesmo bancos gerenciados podem ter respostas mais lentas devido à distância entre aplicação e dados, impactando a performance de queries e o tempo de resposta das operações.

Em resumo: gerenciado reduz operação e risco, self-hosted aumenta controle e flexibilidade.

Recomendação prática: Para workloads críticas e times menores, prefira bancos gerenciados; para equipes experientes que precisam de controle total e customização aceitando os trade-offs, self-hosted pode ser uma opção.

Conclusão

Não há modelo universal. A escolha depende de maturidade do time, perfil do workload, risco aceitável, orçamento e tolerância a dependências de provedor (lock-in).

Soluções PaaS e serverless geralmente aumentam lock-in, dificultando migração futura sem esforço técnico e custo significativo. Self-hosted e IaaS oferecem maior portabilidade, mas exigem mais operação interna. Managed Kubernetes oferece um ponto intermediário, reduzindo parte da complexidade enquanto mantém um nível de portabilidade relevante.

Referências

Conecte-se para transformar sua tecnologia!

Saiba mais e entre em contato: