Skip to content

Multi-tenant

Multi-tenancy (ou multi-inquilinato) é uma arquitetura de software onde uma única instância de uma aplicação atende a múltiplos clientes (tenants). Cada cliente compartilha a mesma infraestrutura e código, mas seus dados e configurações são isolados e invisíveis para os outros clientes.

No nosso ecossistema (Teleconsulta e Telediagnóstico), somos uma aplicação multi-tenant, atendendo diferentes frentes como SOS, IASEP, Piauí, etc., em uma única plataforma.


1. Por que usamos Multi-tenant?

A. Facilidade de Manutenção

Em vez de atualizar 10 versões diferentes da aplicação para 10 clientes, atualizamos apenas uma vez e todos recebem a melhoria ou correção simultaneamente.

B. Escalabilidade

Podemos adicionar um novo cliente (ex: "Saúde AM Digital") apenas criando novas configurações no banco de dados, sem precisar subir novos servidores ou repositórios de código.

C. Eficiência de Custos

Compartilhamos os mesmos recursos de infraestrutura (banco de dados, cache, storage), reduzindo drasticamente o custo operacional.


2. Multi-tenant no Front-end

No front-end, o desafio é garantir que a aplicação se comporte de forma diferente dependendo do cliente logado, sem que o código se torne um emaranhado de ifs.

Estratégias principais:

  1. Whitelabeling (Tematização): Uso de Design Tokens para mudar cores, logos e fontes baseados no tenant.
  2. Feature Flags: Ativar ou desativar funcionalidades específicas por cliente (ex: o cliente A tem chat, o cliente B não).
  3. Configurações Dinâmicas: Obter via API as regras de negócio específicas daquele tenant (ex: horários de atendimento, tipos de especialidades).
  4. Isolamento de Dados: Garantir que o Front-end nunca peça dados de um tenant B estando logado no tenant A (geralmente controlado via JWT e IDs de tenant nos headers).

3. Exemplos Práticos

✅ Como fazer (Abstração por Contexto)

Use o estado global ou um Provider de Configuração para gerenciar as regras do tenant.

tsx
function Header() {
  const { tenant } = useTenant(); // Hook que sabe qual cliente está logado

  return (
    <header>
      <Logo src={tenant.logoUrl} />
      <Text>{tenant.welcomeMessage}</Text>
      {tenant.features.hasVideoCall && <VideoButton />}
    </header>
  );
}

❌ Como não fazer (Hardcoding de Clientes)

Nunca escreva o nome do cliente diretamente no código para tomar decisões.

tsx
function Header() {
  // ⛔ RUIM: Se entrar um novo cliente, você precisa mudar o código de UI
  const isPiaui = window.location.hostname.includes('piaui');

  return (
    <header>
      {isPiaui ? <LogoPiaui /> : <LogoPadrao />}
      {isPiaui && <Button>Telefone do Piauí</Button>}
    </header>
  );
}

4. O Impacto na Arquitetura

O conceito de Multi-tenant reforça a necessidade de uma Camada de Aplicação robusta que saiba injetar o ID do tenant em todas as requisições de API de forma transparente para o desenvolvedor, e uma Camada de Tela que seja agnóstica a quem é o cliente final.


5. Veja também