SberCraft, CyberCode, Luxcity - você pode ter ouvido falar desses jogos ou até mesmo ter participado deles. Tudo isso é obra de Geecko. Os maiores projetos da Geecko reúnem 20 mil jogadores cada, enquanto até recentemente a empresa não contava com uma equipe dedicada para dar suporte à infraestrutura.
O posto de serviço da empresa Nikita Obukhov e a Diretora de Marketing Irina Fedorova falaram sobre o incidente, que se tornou um dos argumentos para pensar seriamente em mudanças de infraestrutura, passando para K8s e contratando uma equipe de DevOps.
O que esta dentro:
- perda de controle sobre o Facebook,
- uma onda repentina de tráfego na noite de sexta-feira,
- Concessão do Microsoft Azure, Cloud Moving and Transformation Challenges.
Vai!
Geecko — DevRel . IT- , : , , -.
Geecko
Em que motor são feitos os jogos, quais são eles tecnicamente?
Nikita: Nossos jogos são exclusivamente baseados em navegador. Usamos nossos próprios desenvolvimentos e bibliotecas comprovadas para trabalhar com Canvas, mapas, isometria. Usamos JS / TS, uma estrutura Vue.js para uma IU da web típica.
Ainda não estamos escrevendo para plataformas móveis - na melhor das hipóteses, oferecemos suporte a permissões móveis. Mas isso nem sempre é necessário - na maioria de nossos jogos, você precisa escrever código, e escrever código de um telefone móvel é uma conveniência.
Quão exigentes são os jogos de CPU e memória?
Nikita: Em nossos jogos, precisamos escrever código e precisamos executar esse código.
Oferecemos suporte a 12 idiomas: compilados e interpretados em diferentes ambientes. Executamos o código nos recursos do nosso servidor: a carga no processador e na memória é intensa.
Também executamos serviços LSP que fornecem código de preenchimento automático para nosso IDE online. Eles também requerem CPU e principalmente memória: quando há muitos jogadores, a carga aumenta significativamente.
Onde os jogos são hospedados?
Nikita: Sempre foram nuvens. Agora, o provedor principal é o Azure (o Geecko recebeu uma concessão da Microsoft para o uso gratuito da nuvem). Lançamos todos os novos projetos lá - e, o que é importante para nós, nós os lançamos no Kubernetes. Toda a nova infraestrutura é baseada em Kubernetes e Docker.
Qual provedor você tinha antes e por que decidiu mudar?
Nikita: Fomos e ainda somos representados na DigitalOcean e Yandex.Cloud. Eles são bons provedores, mas a Microsoft acabou sendo o programa de concessão mais adequado para nós.
Quanto você gastava em servidores antes e agora?
Nikita: Seis meses atrás, gastávamos cerca de 30 mil rublos por mês, agora esse número se aproxima dos 100 mil. O crescimento está relacionado ao número de projetos: não paramos os antigos, eles continuam funcionando e recebem inscrições orgânicas. Lançamos regularmente novas atividades: em um mês podemos lançar três projetos - por exemplo, uma batalha, um jogo e um encontro.
A Microsoft Grant cobre todos os custos?
Nikita: Nossos custos de infraestrutura não chegaram a zero: não podemos transportar tudo de uma vez, isso não é economicamente viável. Portanto, mais dois provedores de nuvem continuam trabalhando conosco, sua participação está simplesmente diminuindo.
Backups em outras áreas geográficas, recuperação de desastres de recursos em outra nuvem - tudo isso é importante.
No geral, os custos gerais são reduzidos. O serviço de execução de código tem o maior consumo de recursos e, graças à concessão, seus custos no próximo ano serão zero. Se uma série de condições forem atendidas, o subsídio será estendido por um segundo ano.
Captura de tela do jogo Cybercode
Aumento do tráfego do Facebook na sexta-feira
Você já passou por uma situação em que um influxo de usuários interrompeu a produção?
Nikita: Sim, uma vez houve um incidente próximo a este. Recebemos uma tarefa de uma empresa internacional: encontrar muitos desenvolvedores que falam inglês.
Por design, os jogadores devem completar a missão coletivamente enquanto estão no mesmo mapa. O mapa tem dimensões finitas, então é impossível colocar todos nele. Dividimos os usuários em grupos de 100 pessoas, cada uma das quais vive no máximo cinco dias - este é o ciclo do jogo para completar a missão. Durante este tempo, os participantes ganham ou perdem.
Esperávamos que até 10 dessas cartas estivessem ativas ao mesmo tempo, ou seja, até 1000 jogadores. Mas, na verdade, havia mais de 2.000 jogadores ou 20 cartas no pico.
Por que isso aconteceu? Por que tantos usuários de repente entraram no jogo?
Irina: A história aconteceu no início de março, quando o Facebook começou a bloquear de forma massiva e espontânea contas de publicidade por inconsistência com a política de anunciantes. Muitas empresas perderam seus escritórios de publicidade, inclusive nós: nosso escritório principal e os dois escritórios de backup caíram. E tudo isso no exato momento em que tínhamos que promover o jogo.
O Facebook é um dos principais canais de promoção, pois é fácil selecionar um público e segmentá-lo com base nos dados disponíveis. E por 12 dias inteiros perdemos o acesso a esse canal. Quando o devolvemos com suor, sangue e lágrimas, tivemos que alcançar o KPI - 4500 registros de líquidos para certas geolocalização, principalmente na Europa.
Não houve escolha a não ser forçar o orçamento: aceleramos nossas campanhas publicitárias.
O que significa "empurrar com o orçamento"?
Irina: Se gastamos inicialmente 300-500 dólares por dia, então passamos de 1000.
Você tem que entender que normalmente as campanhas publicitárias são treinadas por vários dias e então começam a funcionar da forma mais lucrativa possível. Mas nosso orçamento de publicidade estava maior do que o normal, então a campanha aprendeu mais rápido e no segundo dia começou a girar indicadores muito legais. Em algum ponto, perdemos o controle dela.
Estávamos contando com uma certa taxa de conversão, mas acabou sendo mais simples devido ao overclock do Facebook. Se a taxa de conversão média nesses jogos for de cerca de 8%, no momento de pico ela atingiu 15%.
Frio!
Irina: Sim, foi então que entendemos o que significa um grande orçamento de publicidade. É verdade que isso só funciona no caso do Ocidente - na Rússia simplesmente não há público para gastar tanto dinheiro.
E, claro, tudo aconteceu na sexta-feira. Clássico! Na sexta-feira à noite, recebo uma mensagem da Nikita informando que temos tanto tráfego que precisamos fazer algo a respeito.
Como Nikita sabia disso? De onde veio esse sinal?
Nikita: Temos notificações automáticas de carregamento do servidor. É assim que parecia:
Um alerta vem de que a máquina virtual (8 núcleos, 32 GB de memória) está carregada em 90% na CPU no valor limite de 50%.
Isso não é crítico, pois o serviço continua a funcionar. Para os jogadores, isso significa que eles pressionam o botão "Executar código" e esperam o dobro do tempo para a execução. Mas também significa que se novos jogadores continuarem entrando, a situação vai piorar, até o tempo de inatividade.
Como resultado, o pior resultado foi evitado - o serviço não caiu completamente?
Nikita: Felizmente, tudo acabou bem.
Claro, se a situação tivesse surgido no meio da jornada de trabalho, não teríamos nos preocupado em nada - aí você pode reagir rapidamente. Mas não sexta à noite. Na sexta à noite, você vai a um bar e recebe esta mensagem no seu telefone. Mas para consertar tudo, não basta estar ao telefone.
Como você administrou a situação?
Irina: Acabamos de reduzir o custo das campanhas publicitárias em quase 70%.
Você voltou ao assunto mais tarde?
Irina: Não, eles não o trouxeram para o mesmo estado, porque a situação era imprevisível: o Facebook estava aumentando e aumentando a conversão a cada dia. Se estivéssemos girando na mesma velocidade por mais uma semana, talvez a conversão fosse ainda maior. Mas vitórias heróicas não eram necessárias, então restauramos um nível confortável. Descobriram-se cerca de 10 mapas carregados e o serviço funcionou silenciosamente.
Nikita: Deve-se notar que há outros lados da questão: tentamos responder prontamente às mensagens dos jogadores. Quanto mais jogadores, mais solicitações de suporte eles geram. Queríamos manter um alto nível de serviço e não estávamos prontos para aumentar a quantidade de suporte tão rapidamente. Decidimos que seria mais sensato fazer tudo de maneira mais tranquila e previsível do que atingir o pico no fim de semana.
Desta vez, você decidiu sufocar a campanha publicitária e, assim, salvou a situação. Como você geralmente resolve um problema de dimensionamento do ponto de vista técnico?
Nikita: Estamos ampliando com o lançamento de instâncias adicionais do serviço.
Nesse caso, não é Kubernetes e não há escala automática. É necessário iniciar um clone de máquina virtual em modo semi-manual - você tem que esperar até meia hora enquanto a VM é recriada a partir da imagem. Depois disso, você precisa verificar se a VM está funcionando conforme o esperado e se todos os serviços nela aumentaram: servidores LSP, executores de código. Depois disso, equilibramos o tráfego para novas máquinas e continuamos a monitorar a carga de trabalho e os códigos de status.
Captura de tela do jogo SberCraft
Conclusões e planos
Como você reorganizou seu trabalho após esse incidente?
Nikita: Descobrimos a melhor forma de planejar o marketing: quanto investimento faz a quantidade de registros.
No nível técnico, estamos firmemente convencidos de que precisamos de uma nova maneira de escalar o serviço de execução de código, idealmente - escalonamento automático.
Tornamos o serviço de execução de código sem estado (independente do sistema de armazenamento), fazemos pequenas mudanças na arquitetura e mudamos a infraestrutura - introduzimos o mesmo Kubernetes no qual outros serviços são executados.
Mas, no caso de um serviço de execução de código, o esquema é mais complicado - não é tão fácil traduzi-lo quanto os outros. Ainda estamos verificando se tudo está funcionando como deveria.
No momento, o código está sendo executado no DigitalOcean e será executado na nuvem Azure. No Kubernetes.
Você está usando o Kubernetes como um serviço (serviço do Azure Kubernetes)?
Nikita: Sim. Estamos usando o Kubernetes como um serviço e também considerando a opção do Cloud Functions.
Como é o AWS Lambda?
Nikita: Sim, todos os principais fornecedores os têm. Eles permitem que você pague exatamente o mesmo que você paga pela execução de códigos. Mas existem limitações técnicas nas capacidades dos ambientes de tempo de execução.
Quem está no comando da infraestrutura agora?
Nikita: Minhas qualificações e qualificações de desenvolvedores de back-end nem sempre são suficientes, porque DevOps e SRE são uma área muito ampla. E deixar os desenvolvedores de back-end encarregados de incidentes não é muito correto. Por isso, no início do ano, contamos com uma equipe de DevOps terceirizada - os caras com quem trabalhamos anteriormente em outros negócios.
Por que você começou a colaborar com a equipe de infraestrutura e DevOps?
Nikita: O incidente com o jogo foi o catalisador para mudanças que reconhecemos há muito tempo, mas não tivemos oportunidade de implementar.
A empresa cresceu, casos semelhantes começaram a ocorrer, que confirmaram: sim, galera, vocês precisam de engenheiros de DevOps, vocês precisam fazer uma infraestrutura que seja mais fácil de escalar.
A tarefa estava totalmente cumprida há dois meses, quando recebemos uma bolsa do Azure. Até agora, muitos serviços foram movidos para a nova nuvem.
Por que você decidiu terceirizar em vez de contratar pessoas?
Nikita: Por experiência própria, sabemos que DevOps é uma área difícil de recrutar. E aqui descobriu-se que existem caras comprovados, e a forma de trabalhar com um empreiteiro é muito conveniente para nós.
Bem, e o mais importante: adquirimos não um engenheiro, mas toda uma equipe que monitora a disponibilidade dos serviços 24 horas por dia e está pronta para responder a um incidente antes que ele seja descoberto pelos usuários.
A equipe DevOps está configurando tudo do zero ou usando o que era, incluindo monitoramento?
Nikita: Nós escolhemos o caminho do deslocamento. Iniciamos novos projetos em uma nova infraestrutura, migramos os principais serviços para lá e deixamos os projetos sob suporte na antiga. Tudo é novo para novos projetos, inclusive o monitoramento.
A peculiaridade da transformação é que é preciso repensar a arquitetura do serviço. Nós entendemos como isso pode ser mudado para obter novas qualidades.
Portanto, o trabalho também está acontecendo no lado do back-end: iremos refatorar o código, atualizar a arquitetura, mas em uma quantidade bastante moderada.
Então você está configurando novos processos de CI / CD agora?
Em primeiro lugar, estamos reestruturando organizacionalmente. Temos um novo papel, correspondendo à equipa dedicada, e as formas de comunicação, definindo tarefas mudaram.
Tínhamos processos de CI / CD, eles apenas começaram a passar para a nova infraestrutura. Claro, eles estão melhorando, mas não mudam fundamentalmente.
Captura de tela do jogo SberCraft
Que conclusão global você tirou para si mesmo?
Nas diferentes fases da vida de um projeto, as coisas são diferentes. Seis meses atrás, não estaríamos prontos para a equipe de DevOps. Mas agora podemos nos comunicar com eles de forma muito mais substantiva. Compreendemos claramente nossas dores e chegamos aos caras com uma lista de perguntas e sugestões sobre como fazer algo. Acabou sendo uma boa colaboração: juntos chegamos a decisões de alta qualidade e bem fundamentadas.
Há muito trabalho pela frente. O serviço de execução de código no processo de migração, e como o mais complexo de nossos serviços, exigirá muito envolvimento. Por algum tempo teremos as duas versões do serviço em produção e balancearemos o tráfego entre elas. Quando entendermos que está tudo bem, mudaremos completamente para o Azure.
, . , .
, , , .
21 «» , .
:
— ,
— ,
— ,
— ,
— .
Databricks, Mail.ru Cloud Solutions TangoMe.