artesaos/content-request

Aplicações multi-tenant (multi-cliente) e práticas de escalonamento

Closed this issue · 10 comments

Aplicações multi-tenant (multi-cliente) e práticas de escalonamento

Se fala muito de aplicações "para um único cliente". Mas quando um projeto passa a ser um PRODUTO ( SaaS )? Onde cada cliente terá sua "Organização" e cada usuário terá suas atribuições e afins.

Tópicos como:

  • Como segmentar isso no banco
  • Cache
  • Infra
  • ACL

Um tema muito bom e igualmente complexo.
No final acho que não há muita "receita" será necessário elaborar os cenários mais comuns.

Single Database / Multi Tenant

Uma base de dados para todos os tenants

Multi Database / Single Tenant

Múltiplas bases de dados, uma para cada tenant.

Multi Database / Multi tenant

Múltiplas bases de dados, cada base com múltiplos tenants

A maior dificuldade são nas regras de monetização, distribuição e provisionamento do projeto.

@vinicius73 realmente um tema complexo.
O cenário "mais comum"... se posso dizer assim, seria o single db/multi tenant.

Concordo com o @3runoDesign, o cenário mais comum ao meu ver é o de _single db/multi tenant_

Vamos falar sobre isso no hangout de hoje, que é sobre escalabilidade

Em minhas pesquisas, encontrei este plugin: https://github.com/dlimars/laravel-tenant-subdomain

Não testei ainda, mas parece legal.

Eu já testei (mas foi teste bem basico mesmo) o http://orchestraplatform.com/docs/latest/components/tenanti.

Mandei o link direto da documentação para facilitar um pouco.

Seguindo o cenário "Single Database / Multi Tenant" onde tenho o webmaster/Gerente do local/Usuários.

Para criar APIs como vocês geralmente trabalham?

  • Agora no laravel 5.2 tem o multi auth vocês criam um guard para cada tipo de usuário ou controla tudo em um único guard com ACL?
  • E os repositórios exemplo ProductRepository, vocês criam uma para cada tipo de usuário ou trabalha as regras tudo dentro do mesmo repositório?

Gostaria de um exemplo e discussão sobre multi-database/single-tenant principalmente usando o package de ACL Defender.

Atualmente tenho uma app com single-database/multi-tenant e já está muita pesada e talvez não segura, apenas identificando o dados do cliente/tenant com um coluna company_id em cada tabela(to enjoado e achando porco isso).

Quero individualizar os bancos de dados de cada empresa, e deixar em um banco master apenas informações globais mesmo, tais como cadastro de empresas/tenants, roles, users, já as outras tabelas de módulos (financeiro, comercia, fiscal, etc) em bancos tenants.

Esta modelagem até que já tenho, o que está me ferrando os neurônios na parte de acl, Pois quero algo já pronto como package(Defender) não sei se modifico/customizo o Defender pra suportar tenant, talvez adicionar uma coluna na role (tenant_id) identificando de qual tenant é a role e tals.

Alguém ai com experiencia parecida?

Estou precisando entender melhor esse cenário e esses conceitos, vocês teriam algum material no youtube para indicar ?