Construindo uma plataforma de arquitetura multilocatário para escalar o Emmy

Em uma postagem anterior, compartilhamos como o Crowd Favorite ajudou a National Academy of Television Arts & Sciences (NATAS) a lidar com um aumento enorme de 570% nos usuários de suas competições do Emmy Award, graças à sua plataforma personalizada desenvolvida pela Laravel, a Orthicon.
Hoje, vamos dar uma olhada nos bastidores da tecnologia por trás dele. Mais especificamente, veremos como os desenvolvedores do Crowd Favorite usaram o Laravel para construir a arquitetura multilocatário do Orthicon, que suporta dezenas de competições regionais distintas do Emmy a partir de uma única e robusta base de código.
Por que multilocação?

Uma arquitetura multilocatário permite que uma única instância de aplicativo atenda a vários grupos distintos de usuários (ou "locatários"), mantendo seus dados, configurações e experiências de usuário logicamente isolados e seguros.
Esse era o desafio que a NATAS enfrentava. Eles não organizam apenas uma competição do Emmy Awards. Eles supervisionam diversos capítulos regionais, cada um hospedando sua própria competição com usuários, jurados, prazos de inscrição, regras específicas e até mesmo branding exclusivos. Tradicionalmente, isso exigiria lidar com inúmeras instâncias isoladas de aplicativos, um cenário repleto de sobrecarga de gerenciamento, implementações inconsistentes de recursos e esforços duplicados.
A Crowd Favorite sabia que uma abordagem mais inteligente e escalável era essencial. A NATAS precisava realizar várias competições do Emmy (ou locatários, muitas vezes simultaneamente) sem a dor de cabeça de provisionar e manter aplicativos separados para cada uma.
A resposta? Eles desenvolveram o Orthicon com base em uma arquitetura multilocatária cuidadosamente projetada e construída em Laravel.
Por que multilocação com Laravel?
O Laravel entregou as ferramentas que os desenvolvedores do Crowd Favorite precisavam:
- Contêiner de serviço
- Eloquent ORM (mapeador objeto-relacional)
- Um amplo ecossistema
Com esses recursos, eles puderam usar os pontos fortes inerentes do Laravel para construir um sistema que fosse poderoso e fácil de desenvolver.
Como o Crowd Favorite orquestrou a multilocação na Orthocon

A equipe da Crowd Favorite aproveitou os pontos fortes do Laravel para construir uma arquitetura multilocatário para a plataforma Orthicon. Veja como eles fizeram isso funcionar:
Identificação do inquilino: a abordagem do token leve
A Crowd Favorite projetou o aplicativo Orthicon com multilocação leve em mente. Cada solicitação recebida é associada de forma eficiente ao seu respectivo locatário (concorrente) usando um token exclusivo, normalmente passado por um cabeçalho HTTP personalizado. O middleware Laravel personalizado , processado no início do ciclo de vida da solicitação, é responsável por inspecionar esse cabeçalho, identificar o locatário correto com base no token e recuperar sua configuração específica.
Uma vez resolvido, esse objeto locatário é elegantemente vinculado ao contêiner de serviço do Laravel como uma instância singleton. Essa etapa crucial torna o
currentTenant
contexto globalmente acessível durante toda a duração da solicitação dentro do Orthicon, permanecendo perfeitamente encapsulado e gerenciado pelo framework.
Isolamento de dados: usando escopos globais do Eloquent

Com o locatário identificado e disponível no contêiner, garantir a separação rigorosa dos dados dentro do Orthicon era fundamental. A Crowd Favorite empregou com maestria
os escopos globais do Eloquent
. Eles definiram uma
TenantScope
classe específica. Esse escopo é então aplicado a todos os modelos relevantes do Eloquent com dados específicos do locatário.
Internamente, o
apply
método deste escopo verifica a presença do
currentTenant
contêiner de serviço. Se um locatário for identificado, o escopo modifica automaticamente qualquer consulta de saída ao banco de dados para esse modelo, adicionando uma
WHERE tenant_id = ?
cláusula que insere dinamicamente o ID do locatário atual.
Esta solução elegante, incorporada à camada ORM, garante que cada competição interaja apenas com seu próprio conjunto de dados dentro do Orthicon, sem que os desenvolvedores precisem adicionar manualmente as condições de locatário a cada consulta. Isso permitiu que o Crowd Favorite usasse um único banco de dados com uma
tenant_id
coluna nas tabelas relevantes, evitando a complexidade de gerenciar bancos de dados separados por locatário.
Para necessidades de relatórios, os dados entre locatários ainda podem ser agregados desabilitando ou ignorando programaticamente o escopo global quando necessário.
Configuração dinâmica e serviços específicos do locatário

Muitos aspectos de cada competição gerenciada pela Orthicon precisavam ser únicos: fusos horários, buckets de armazenamento S3 para inscrições, menus de navegação personalizados, notificações localizadas, traduções e até mesmo detalhes de cobrança.
O Crowd Favorite aproveitou
os provedores de serviços
do Laravel e seus recursos de configuração dinâmica. Uma vez
currentTenant
resolvido o problema, os provedores de serviços puderam definir programaticamente valores de configuração específicos do locatário em tempo de execução (por exemplo, atualizando o bucket S3 de destino para uploads de arquivos).
Eles também podiam vincular condicionalmente diferentes implementações de serviços com base no locatário, ou carregar arquivos de idioma específicos do locatário e visualizar compositores. Isso garantiu que os principais sistemas do Laravel, como armazenamento de arquivos ( Flysystem ), notificações e localização, funcionassem perfeitamente dentro do contexto do locatário ativo na plataforma Orthicon.
Cache e filas com reconhecimento de locatário

O desempenho e o processamento em segundo plano também exigiram conscientização dos inquilinos dentro da Orthocon.
- Cache : O cache do Laravel foi configurado para usar prefixos ou tags específicos de cada locatário. Essa estratégia inteligente permitiu que o Crowd Favorite limpasse o cache de uma competição (por exemplo, limpando todas as entradas de cache marcadas com o ID de um locatário específico) sem afetar o desempenho ou a integridade dos dados de outros locatários ativos simultaneamente.
-
Filas
: Tarefas em segundo plano, cruciais para tarefas como processar um grande número de entradas ou gerar relatórios, foram projetadas para carregar o contexto do locatário. Normalmente, o contexto
tenant_id
era passado para a tarefa quando despachada. Quando a tarefa é processada por um trabalhador de fila, geralmente em um processo separado, a tarefa resolve ou reassocia o contexto do locatário com base nesse ID armazenado, garantindo que todas as operações dentro da tarefa sejam executadas com base nos dados e na configuração corretos do locatário.

Autorização granular: funções e permissões em nível de locatário

Cada competição regional precisava de controle total sobre as funções de seus usuários e níveis de acesso dentro do Orthicon. O Crowd Favorite utilizou a camada de autorização do Laravel (portões e políticas) para definir permissões que eram intrinsecamente vinculadas ao locatário atual. Isso proporcionou um controle preciso sem um sistema complexo de funções globais, permitindo que cada competição gerenciasse sua própria equipe de forma eficaz e independente.
Núcleo multilocação desacoplado
A principal escolha arquitetônica da Crowd Favorite para o Orthicon foi implementar a multilocação como um módulo central abstrato e desacoplado. Essa camada lida com a identificação de locatários, o escopo de dados e a alternância de contexto, permanecendo completamente independente da lógica de domínio do aplicativo (os recursos específicos para gerenciar as competições do Emmy).
Essa separação é comum em aplicativos Laravel bem estruturados e facilita a reutilização e a manutenção do código. A lógica central de multilocação não se confunde com os recursos de negócios, tornando todo o sistema Orthicon mais limpo e fácil de evoluir.
Benefícios da Multilocação: Agilidade e Foco
Os desenvolvedores do Crowd Favorite criaram este aplicativo Laravel cuidadosamente para que o NATAS pudesse atingir os seguintes objetivos:
- Inicie várias competições rapidamente: isso geralmente é possível com apenas alguns cliques de configuração no Orthicon, e não com novas implantações de servidor.
- Implemente novos recursos e atualizações universalmente: a Orthicon tem uma base de código e um pipeline de implantação que beneficia todos os locatários.
- Mantenha a integridade e a segurança dos dados: cada competição opera em seu próprio sandbox seguro dentro da plataforma.
- Foco na missão: a NATAS pode se concentrar em celebrar a excelência na indústria global de mídia, enquanto a Crowd Favorite garante que a tecnologia Orthicon "simplesmente funcione" perfeitamente em segundo plano.
O que vem a seguir: Construindo sobre a fundação da Orthon
Com o Laravel como base da plataforma multilocatária escalável Orthicon, a Crowd Favorite e a NATAS têm amplo espaço para inovação futura. Elas já estão explorando melhorias para o Orthicon, como processamento e manuseio avançados de vídeos de inscrição, ferramentas de julgamento assistidas por IA e painéis em tempo real para administradores de competições. Graças à arquitetura flexível, esses novos recursos podem ser desenvolvidos e implementados com eficiência em todas as competições.
O trabalho da Crowd Favorite na plataforma Orthicon é uma demonstração poderosa de como usar o Laravel para construir soluções sofisticadas, escaláveis e sustentáveis para necessidades empresariais complexas. Não se trata apenas de escrever código; trata-se de arquitetar sistemas que capacitem os usuários e cresçam junto com suas ambições.
Confira a documentação do Laravel e comece a construir.