Operar uma rede com dezenas de sites temáticos — como múltiplos portais regionais ou verticais especializadas de veículos clássicos — compartilhando uma única base de dados é um desafio clássico de arquitetura de software. O cenário parece atraente pela centralização das informações, mas rapidamente introduz gargalos críticos: sobrecarga em consultas concorrentes, risco de vazamento de dados entre portais e complexidade na manutenção das regras de negócio específicas de cada domínio.
Quando mais de 40 aplicações consom o mesmo banco relacional, qualquer query mal estruturada em uma ponta pode degradar a performance de toda a rede. Para construir essa estrutura com estabilidade técnica no Laravel, é necessário aplicar padrões sólidos de multi-tenancy e gerenciamento inteligente de conexões.
1. Identificação Dinâmica de Contexto via Middleware
Em vez de criar dezenas de deploys isolados com lógicas duplicadas, a abordagem técnica recomendada é unificar o codebase ou estabelecer microsserviços bem delimitados, resolvendo o domínio no nível de requisição.
Um middleware dedicado intercepta a requisição, analisa o host ($request->getHost()) e determina a identidade da aplicação atual. Essa identidade carrega configurações exclusivas: tema visual, escopos de inventário permitidos e credenciais de serviços externos.
php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use AppModelsPortal;
class ResolvePortalContext
{
public function handle(Request $request, Closure $next)
{
$portal = Portal::where(‘domain’, $request->getHost())
->remember(now()->addDay())
->firstOrFail();
app()->instance('currentPortal', $portal);
return $next($request);
}
}
2. Isolamento Lógico com Global Scopes no Eloquent
Em um ecossistema de carros clássicos, certos veículos podem pertencer a inventários compartilhados, enquanto outros devem ser visíveis apenas em portais específicos. Deixar a responsabilidade de filtrar o portal diretamente nos controllers é um convite a falhas de segurança.
A melhor prática consiste no uso de Global Scopes no Eloquent. Ao associar um escopo global ao modelo Vehicle, o Laravel anexa automaticamente as restrições necessárias em todas as operações de leitura:
php
namespace AppModelsScopes;
use IlluminateDatabaseEloquentBuilder;
use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentScope;
class PortalVehicleScope implements Scope
{
public function apply(Builder $builder, Model $model): void
{
if (app()->bound(‘currentPortal’)) {
$portal = app(‘currentPortal’);
$builder->whereHas(‘portals’, function ($query) use ($portal) {
$query->where(‘portals.id’, $portal->id);
});
}
}
}
3. Mitigação de Gargalos no Banco de Dados Central
Quando mais de 40 domínios disputam I/O no mesmo banco, as seguintes diretrizes são indispensáveis:
- Indexação Composta e Cirúrgica: Listagens de veículos frequentemente filtram por marca, década de fabricação e status. Os índices devem refletir a cardinalidade exata dos filtros mais frequentes.
- Cache por Tags no Redis: Não consulte o banco repetidamente para obter listas estáticas de modelos ou configurações do site. O cache distribuído com invalidação direcionada por tags (
Redis::tags(['portal_12', 'listings'])->remember(...)) reduz a carga no PostgreSQL ou MySQL em até 80%. - Read Replicas (Leitura e Escrita Separadas): Configure o arquivo
config/database.phpdo Laravel para direcionar selects pesados a réplicas de leitura, mantendo o primário reservado para operações transacionais de escrita.
Em sistemas que desenvolvo com alta dependência de concorrência e bancos compartilhados, a camada de banco de dados é sempre blindada por conexões gerenciadas (via PgBouncer ou ProxySQL) e camadas de leitura cacheadas, impedindo o esgotamento do pool de conexões sob picos de tráfego simultâneo em vários domínios.
Processo de Estruturação Recomendado
- Diagnóstico de Concorrência: Mapear o volume total de requisições agregadas de todos os domínios e a capacidade de processamento do banco de dados atual.
- Definição da Abordagem de Tenancy: Escolher entre tenancy por subdomínio/domínio único com base compartilhada ou particionamento de esquemas (schemas).
- Implementação de Camadas de Isolamento: Configuração de middlewares de contexto e Global Scopes nas entidades centrais.
- Otimização e Observabilidade: Monitoramento contínuo de slow queries, uso de APM (como Sentry ou New Relic) e implementação de cache agressivo com Redis.
Se a sua operação precisa escalar múltiplos domínios sobre uma infraestrutura unificada sem perder performance ou consistência de dados, uma avaliação arquitetural previne retrabalho e instabilidades severas. Entre em contato para uma consultoria técnica especializada na arquitetura do seu ecossistema Laravel.


