Nos Bastidores com Patrik Potocki

blog post header image

“Queremos entregar uma plataforma de alto desempenho que suporte parceiros de todos os tamanhos: a escalabilidade é extremamente importante, tanto do ponto de vista tecnológico quanto de custo. Além de ser escalável, a plataforma deve ser autossuficiente e ter flexibilidade para que possamos testar novas soluções e continuar evoluindo. Parte de oferecer uma ótima plataforma é ter grande visibilidade, e queremos monitoramento e alertas proativos para garantir que sempre saibamos exatamente o que está acontecendo.”

Minha História em Resumo: Jogos, Sapatos, Aviões e Plataformas

Meu interesse por tecnologia começou muito cedo, influenciado pelo meu pai, que sempre foi apaixonado por computadores. No início, eu somente jogava, mas (como qualquer um que cresceu nos primórdios dos jogos de computador sabe) nada funcionava perfeitamente, então rapidamente aprendi a depurar e solucionar problemas.

Mais tarde, fui apresentado à programação e me apaixonei por ela. Comecei com ASP Classic e logo migrei para o ecossistema .NET.

Passei quase 10 anos no mundo Microsoft/.NET, iniciando minha carreira na equipe de e-commerce de uma das maiores empresas de calçados da Suécia. Depois, entrei no setor de aviação, que foi muito divertido e desafiador. Durante períodos promocionais, havia picos enormes de usuários, o que nos obrigava a enfrentar desafios interessantes de escalabilidade.

Para ser um desenvolvedor bem-sucedido, é essencial estar sempre aprendendo. Caso contrário, seu conhecimento se tornará obsoleto rapidamente.

Pessoalmente, leio muitos blogs para ter uma visão geral de diferentes soluções e novas ideias. Não me aprofundo nos detalhes até que realmente precise, mas quando surgem desafios, lembro: "Ok, li sobre algo que pode ser exatamente o que precisamos." A partir daí, mergulhamos no assunto e descobrimos o que funciona melhor para nós.

Há quatro anos, entrei para a Fast Track como Tech Lead. Acompanhei praticamente toda a trajetória da empresa, desde a construção de sites de cassino white label em PHP até o lançamento do Fast Track CRM com Golang.

Trabalhando com Tecnologia que Realmente me Empolga

Tive o privilégio de estar aqui desde o começo, projetando toda a infraestrutura da Fast Track do zero. Sempre fui muito curioso sobre sistemas distribuídos, CI/CD (integração contínua e entrega contínua) e automação, e como esses conceitos poderiam ser aplicados para construir sistemas altamente escaláveis.

Quando você é um desenvolvedor, quer trabalhar no ambiente mais otimizado e divertido possível. Meu objetivo era criar um ambiente onde a equipe pudesse avançar rapidamente, mantendo a estabilidade como prioridade, e inovar com rapidez. Também queria garantir que nossa equipe de desenvolvimento pudesse focar no desenvolvimento em si, sem se preocupar com lançamentos ou configurações de máquinas virtuais.

"Estou extremamente motivado pela capacidade da Fast Track de se adaptar rapidamente às mudanças."

Cada cliente possui uma única instância. No modelo que utilizávamos antes, isso significava que qualquer trabalho precisaria ser duplicado manualmente para cada cliente. Com poucos clientes, isso era gerenciável, mas conforme crescemos, vimos que se tornaria algo extremamente trabalhoso.

Decidimos reformular tudo e impulsionar a organização em uma nova direção. Após alguns testes, chegamos a um novo stack tecnológico:

  • Mudança do PHP para Golang no back-end
  • Introdução do Vue.js como framework front-end
  • Migração da hospedagem de Rackspace para AWS
  • Uso do Terraform para infraestrutura como código
  • Introdução do Docker/Kubernetes para orquestração de contêineres
  • Manutenção do MySQL como banco de dados principal
  • Continuação do uso do RabbitMQ como sistema de mensagens
  • Uso do Bitbucket/Github para controle de versão
  • Redis para cache
  • Elastic/Kibana/Grafana para logging

Essa stack foi escolhida para criar novas oportunidades de eficiência. Claro, também tivemos que considerar fatores práticos: boas práticas para orçamento, a escolha do Golang sobre o .NET Core (foi uma disputa acirrada) para evitar depender de produtos da Microsoft que não atendiam todas as nossas necessidades, entre outros.

Estou extremamente motivado pela disposição e capacidade da Fast Track de se adaptar rapidamente às mudanças. Isso, combinado com a excelente equipe de tecnologia que temos, nos permitiu reconstruir toda a plataforma do zero e fazer essa transição para a nova stack em menos de um ano. No geral, estamos muito satisfeitos com o que construímos. Sempre há espaço para melhorias – por exemplo, gostaríamos de migrar tudo do Bitbucket para o GitHub para ganhar mais eficiência – mas, no momento, essa stack nos permite escalar com facilidade.

Aprendendo: Golang é Elegante e Super Estável

Já trabalhei com diversas linguagens. Algumas são rápidas, mas bagunçadas (ASP/Python), outras são completas, mas menos eficientes em termos de recursos (.NET/Java/Swift). Golang encontra um equilíbrio perfeito: é limpo, simples e rápido, tem ótimas ferramentas embutidas e uma sintaxe muito agradável.

Uma das grandes vantagens do Golang é a padronização do código. Isso significa que, mesmo em projetos enormes como o Kubernetes, o código ainda é fácil de entender e revisar. Isso facilita muito para outros desenvolvedores ao fazer code reviews.

Rodando Golang em produção há 4 anos, posso afirmar que é a stack mais estável e leve com a qual já trabalhei, além de exigir a menor quantidade de configuração para atingir um estado "performático".

Curiosamente, poucos membros da nossa equipe tinham experiência prévia com Golang. Mesmo assim, a transição foi tranquila e todos adoraram a linguagem.

Se você ainda não experimentou Golang, recomendo fortemente que o faça.

O Que Estamos Construindo? Fast Track CRM: Um Olhar nos Bastidores

Uma das perguntas mais frequentes que recebemos é: “Como o Fast Track CRM funciona?”

A base tecnológica do Fast Track CRM é muito simples e eficiente. Criamos um mecanismo capaz de processar eventos em tempo real e distribuir instruções para outros serviços com base neles. Todo o processo ocorre em cerca de 100ms (ou menos!).

A plataforma utiliza um mecanismo de regras que avalia eventos recebidos, verifica elegibilidade no modelo de dados e distribui instruções de maneira estruturada. Chamamos isso de Atividade, que consiste em Trigger (evento que ativa a ação), Segmento (grupo de jogadores elegíveis) e Ações (exemplo: envio de e-mail ou crédito de bônus)

Nesse nível, não tem relação direta com iGaming em si, pois o foco é construir de forma verdadeiramente escalável. O que torna nossa plataforma uma solução poderosa para operadores de iGaming são as camadas que adicionamos sobre essa base e ao seu redor.

"O setor se move rápido, e estamos bem posicionados para nos adaptar a cada novo desafio que nossos parceiros enfrentam."

O que torna nossa plataforma específica para a indústria de iGaming é, antes de tudo, o fato de que a desenvolvemos exclusivamente para operadores de iGaming. Temos experiência direta com os desafios de gerenciar CRM e iniciativas de engajamento de jogadores no jogo online e trabalhamos continuamente para combinar os processos certos com a tecnologia certa para enfrentá-los.

Tudo o que fazemos coloca nossos parceiros no centro. Seja criando Lifecycles para orquestrar engajamentos complexos ou integrando seus próprios motores de bônus, estamos sempre focados em oferecer a melhor solução. A indústria evolui rapidamente, e estamos em uma posição ideal para nos adaptar a cada novo desafio que nossos parceiros possam enfrentar.

Excelente adequação à arquitetura orientada a serviços

Utilizamos uma arquitetura orientada a serviços em nossa plataforma. Isso significa que ela é composta por vários serviços independentes; por exemplo, um serviço de distribuição de SMS cuida do envio de mensagens e um serviço de bônus gerencia a concessão de recompensas.

Nossa plataforma é formada por diversos serviços, desde APIs de integração até distribuidores de e-mail.

Esse tipo de arquitetura permite uma evolução rápida, facilitando a experimentação de novas tecnologias e a implementação de inovações em um ambiente controlado. É possível testar algo novo em um serviço específico sem precisar aplicá-lo a todo o sistema. Dessa forma, recursos mais arriscados podem ser experimentados primeiro em serviços menos críticos. Um exemplo perfeito disso foi a implementação do Kafka como complemento ao RabbitMQ em poucas semanas.

Essa estrutura também facilita a depuração de problemas. Se uma fila de e-mails parar, por exemplo, é possível identificar rapidamente que o problema está no distribuidor de e-mails e focar na solução.

O aspecto mais importante ao construir serviços é garantir que cada um seja independente e “possua seus próprios dados”. Caso precise compartilhar informações, isso pode ser feito via API ou expondo os dados relevantes para que outros serviços possam “assinar” essas mensagens.

Toda a nossa plataforma roda em Kubernetes e todos os nossos serviços são imagens Docker, o que a torna extremamente escalável.

Mas a arquitetura orientada a serviços tem seus desafios

"Reconstruímos partes essenciais da plataforma inúmeras vezes."

Desde que entrei na Fast Track, vi a empresa e nossa plataforma evoluírem constantemente. A realidade é que já reconstruímos partes fundamentais da plataforma várias vezes. Tenho muito orgulho do que nossa equipe conseguiu realizar em tão pouco tempo.

Uma das mudanças mais impactantes foi a transição do uso de máquinas virtuais para Kubernetes.

O Kubernetes nos proporcionou um nível de eficiência e automação que antes não era possível. Em vez de configurar manualmente todos os nossos serviços, agora simplesmente dizemos ao Kubernetes o que queremos e como queremos que funcione, e ele garante que tudo rode conforme planejado. Ele também reinicia serviços automaticamente caso algo dê errado e faz autoescalonamento conforme necessário. Isso nos economiza muito tempo.

Mas nem tudo são flores. Há dois desafios na arquitetura orientada a serviços que são bastante complicados, especialmente ao operar com single tenancy: rastreabilidade e deploys.

Estamos constantemente aprimorando a forma como lidamos com esses desafios.

Para os deploys, decidimos investir em ferramentas próprias de implementação. Hoje, criamos pacotes de release, fazemos mudanças na infraestrutura e lançamos todos os nossos ambientes através de um único portal. Agora isso funciona muito bem, mas foi um processo que exigiu tempo para ser aperfeiçoado.

Também investimos em um sistema robusto de logs com Elastic e Kibana, o que nos proporciona uma ótima visibilidade. Atualmente, apenas em raras ocasiões o rastreamento do fluxo de mensagens e instruções entre diferentes serviços ainda pode ser um pouco complicado.

O que eu leio tarde da noite

Como mencionei, a chave para o sucesso é estar sempre aberto ao aprendizado contínuo. Estas são algumas das fontes que utilizo para me manter atualizado:

  • Hacker News
  • Reddit, acompanhando subreddits como Golang, AWS
  • Medium e muitos outros blogs específicos de programação – gosto particularmente dos blogs de tecnologia da Netflix e de emgenharia dp Spotify.
  • Newsletters e atualizações da AWS, Google Cloud e Azure

Estamos contratando

A Fast Track tem a melhor equipe de tecnologia com a qual já trabalhei, e acredito que nossa cultura desempenha um papel essencial na nossa capacidade de atrair os melhores talentos.

Atualmente, temos várias vagas abertas na área de tecnologia. Se você tem interesse em trabalhar conosco, confira as oportunidades abaixo:

Trabalhe na Fast Track