Executando verificação de segurança...
1

Pitch: Estou criando um runtime open source para SaaS multi-tenant com isolamento real

Olá, pessoal.

Me chamo Péricles, também uso Pec Rodrigues. Trabalho principalmente como freelancer fullstack, brand designer e produtor de jogos, especialmente voltados para educação.

Estou construindo o Ehecoatl, um runtime backend open source pensado para aplicações SaaS e white-label onde o isolamento entre clientes não deveria depender apenas do código da aplicação.

A ideia central é simples:

cada tenant deve rodar como um ambiente mais isolado, em vez de ser separado apenas por uma coluna tenant_id e algumas validações no código.

A experiência que estou buscando é:

menos fricção para provisionar, operar e monitorar tenants; mais segurança para experimentar customizações sem aumentar demais o raio de impacto.

O problema

Muitas aplicações SaaS começam com multi-tenancy lógico:

  • um backend compartilhado;
  • um runtime compartilhado;
  • um único processo;
  • separação entre clientes feita principalmente no código.

Isso funciona em muitos casos, principalmente no início. Mas conforme o produto cresce, esse modelo pode ficar frágil:

  • um erro em um tenant pode afetar outros;
  • uma customização mal feita pode quebrar o serviço inteiro;
  • um plugin ou app customizado pode acessar mais do que deveria;
  • ambientes white-label ficam mais difíceis de governar com segurança.

A abordagem do Ehecoatl

O Ehecoatl não tenta substituir frameworks como Laravel, NestJS, Express ou outros. Ele atua em outra camada: runtime e infraestrutura para aplicações multi-tenant.

Em vez de tratar multi-tenancy apenas como uma preocupação da aplicação, o Ehecoatl tenta tratar isso também como uma preocupação operacional.

Cada tenant pode ter:

  • processo próprio
  • usuário restrito no sistema
  • diretório próprio
  • configuração de domínio própria
  • regras de rede próprias
  • apps/workers isolados dentro do tenant

Exemplo simplificado:

supervisor Ehecoatl
 ├── processo do tenant A
 │   └── apps/workers isolados
 ├── processo do tenant B
 │   └── apps/workers isolados
 └── processo do tenant C
     └── apps/workers isolados

A proposta não é prometer o mesmo nível de isolamento de uma VM completa ou de uma stack de containers bem configurada. A proposta é reduzir risco operacional e oferecer limites mais fortes por padrão para SaaS multi-tenant com economia de recursos e agilidade de gerenciamento.

Por que estou postando aqui

O projeto ainda está em fase inicial, mas já estou servindo o próprio site e sistema de newsletter do Ehecoatl, e docs nesse sistema como uma forma de comprovação do funcionamento.

Algumas perguntas:

  1. Você usaria isolamento por processo em um projeto SaaS multi-tenant?
  2. Em quais cenários essa abordagem faz sentido, e em quais ela deixaria de ser uma boa opção?
  3. Esse modelo faz sentido para produtos white-label ou agências que gerenciam aplicações para múltiplos clientes na experiência de vocês? A minha experiência aponta que sim, mas é bastante limitada a projetos menores.
  4. O que vocsê esperariam de um runtime multi-tenant antes de confiar nele?
  5. Você preferiria isso como runtime independente, complemento de framework ou camada de deploy?

GitHub: https://github.com/ehecoatl/core
Docs: https://docs.ehecoatl.com.br
Website: https://ehecoatl.com.br

Qualquer crítica de arquitetura, segurança, DX ou posicionamento é muito bem-vinda.

Carregando publicação patrocinada...
4

separação entre clientes feita principalmente no código.

Multitenant DEVE APLICAR FORTEMENTE em RLS.

Se toda a garantia de isolamento está na mão do dev lembrar de usar uma coluna o produto merece fracassar.

Todos os bancos decentes oferecem uma camada de segurança que não retorna nenhum dado se você esquecer de definir quem está acessando.

Em vez de tratar multi-tenancy apenas como uma preocupação da aplicação, o Ehecoatl tenta tratar isso também como uma preocupação operacional.

Uso muito uma abordagem de "Whale tenants", vi alguem postaer isso no linkedin há muitos anos atrás e sempre adoto essa prática:

Clientes pequenos que não geram um tiket médio muito alto -> separação lógica no mesmo banco

Clientes empresariais com contratos grandes -> infraestrutura dedicada

Toda a aplicação é construída a suportar esses 2 tipos ao mesmo tempo

1

Show de bola! Não conhecia o termo, vou pesquisar mais a respeito, vou revisar o posicionamento também pra entender e comunicar melhor em qual cenário essa solução de isolamento por processo realmente pode ser um tradeoff positivo pra direcionar também as contribuições da comunidade nessa direção mais sólida e aplicável.