IMG_20210526_170345199

Tudo o que fazemos é em busca de conexão, qualquer pessoa que vive aqui na Terra nesse minúsculo grão de areia flutuando no Universo está em busca de h´se conectar.

Ao se conectar com um outro Ser ganhamos a capacidade de cooperar, integrar, unir, trocar e criar.

E falando em cooperação e conexão também podemos falar da Facilita.social. 

A Facilita tem como seu propósito estimular e provocar a cooperação e conexão principalmente diante do nosso novo normal-virtual.

O Big Bang

Uma semana atrás eu e Sérgio sentamos pra descobrir os números de custo que envolve cada partida com sua enorme variedade e possibilidades.

Numa planilha conseguimos ter mais clareza de como os custos estão atualmente e qual seria o impacto ao ser escalonado.

Escalonar significa fazer a plataforma ter a capacidade de receber milhares de partidas e participantes simultaneamente sem explodir tudo.

Hoje a plataforma não está preparada para escalonar, ou seja, ter milhares de acessos simultâneos.

Depois de muita pesquisa, percebemos que várias mudanças estruturais precisavam ser feitas.

Conheça o presente e crie o futuro

Para entender a mudança é necessário compreender como funciona atualmente a plataforma e ter em mente aonde queremos chegar.

A plataforma é basicamente composta por 3 grandes componentes:

  1. O site: é onde você tem contato com a plataforma, onde joga, arrasta as cartas, e interage com todas as funcionalidades dentro da partida.
  2. O servidor: é um computador hospedado na nuvem, sua função é intermediar todos os dados vindo através do site, e manter todas as participantes sincronizadas, simulando uma partida como se estivéssemos no mundo real, só que virtual/online.
  3. Banco de dados: é onde guarda-se dados importantes como os jogos e baralhos disponíveis, as cartas, participantes conectadas e etc.

“Certo Felipe acho que entendi essa parte, mas é daí?”

Daí que cada vez que você arrasta uma carta, o site envia uma mensagem pro servidor.

O servidor checa se esse movimento é válido e depois repassa a todos os participantes.

Essa relação entre os participantes usando o site e o servidor é muitas vezes chamada de cliente-servidor, cliente-mestre e escravo-mestre.

Sim, tu leu direito, escravo-mestre vem do inglês (slave-master).

Pra ser mais preciso a terminologia slave-master é mais usada entre servidor-servidor, sendo slave secundário.

Mas ainda assim essa relação centralizada é algo a se refletir.

Cliente-Servidor, sistema centralizado
Cliente-Servidor, sistema centralizado

Como pode ver na figura, esse é um sistema centralizado e dependente do servidor (mestre) para que os participantes se comuniquem (arrastem cartas, distribuem e etc).

Esse tipo de topologia / configuração é presente na maioria dos sites e plataformas no mundo.

Porque ter um mestre (servidor) tem vários benefícios, sendo o principal deles: Ter o controle.

Ter controle dos dados e ações pode trazer congruência, coerência e aplicar as regras de negócio de forma simples, fazendo tudo funcionar como o esperado, evitando vários bugs.

Bugs?

Bugs: São problemas que não permitem que o sistema funcione como deveria ou como esperávamos, apresentando um comportamento inesperado e às vezes fatal pro sistema.

Aliás Bugs vem do inglês e significa Inseto, antigamente os computadores usavam válvulas enormes que aqueciam e isso atraia insetos, e às vezes ocorriam curto-circuitos e as coisas param de funcionar, por isso até hoje é usada essa expressão.

O princípio da melhoria contínua

Até aqui tudo bem, tudo bonito e funcionando bem.

Mas eu não estava feliz com o desempenho da plataforma, sabia que poderia ser melhorado e precisava, já que queríamos escalonar.

Para se ter uma idéia, a cada carta modificada na partida, sincronizamos os dados de TODAS as cartas, mesmo aquelas que não haviam sido modificadas (arrastada, virada etc).

Isso não parece certo, não é mesmo?

E não é, funcionando dessa forma temos vários problemas:

  1. Aumenta e muito a carga no servidor
  2. Envia dados desnecessários aos outros participantes
  3. Aumenta a lentidão durante a partida de forma exponencial proporcionalmente ao número de baralhos e cartas na partida.

Para que possamos ter a possibilidade de escalar a aplicação, ou seja, suportar milhares de conexões simultâneas,  precisamos mudar toda a lógica de como a plataforma atualmente funciona.

Precisamos tirar da camada do servidor: os dados das salas, jogadores online, cartas e baralhos para uma camada adentro, para um banco de dados em memória.

E aí entra o banco de dados Redis.

Com essa implementação estaríamos aptos a escalar a aplicação, mas isso não resolvia o problema da sincronização dos dados.

Sincronizando

Após muitas horas de pesquisa, encontrei uma solução similar ao que o Google Docs usa.

Comecei a implementar algo que basicamente fazia o seguinte: 

A cada modificação feita nas cartas, eu enviava somente a modificação e no cliente aplicava a modificação.

Isso funcionava, na maioria das vezes.

Ainda precisamos do mestre e muito código precisava ser produzido e mantido, além de deixar a plataforma engessada e dependente do servidor, será que vale a pena?

Quando se é a única solução disponível, sim.

Mas no caso não era a única, felizmente.

Adeus Mestres, Bem vindo Pessoas

Você já deve ter ouvido falar de P2P, Peer-To-Peer, Ponta-a-ponta. se não então vou lhe apresentar

P2P é uma tecnologia revolucionária.

Nem tanto no sentido tecnológico, mas num sentido filosófico, cultural e sistêmico.

Porque nos permite sair da lógica cliente-mestre para ir de encontro com a pessoa-pra-pessoa.

Isso significa que não precisamos mais de um mestre.

Podemos todos nós sermos mestres de nós mesmos e aprendermos a trocar e se comunicar diretamente com esses outros mestres.

Nota: Até mesmo o Whatsapp, Telegram e outros serviços e mensageiros ainda dependem de um servidor-mestre.

Conexão num sistema distribuído
Conexão num sistema distribuído

Essa figura mostra a diferença das conexões e interações.

Aqui saímos do sistema centralizado e estamos em direção a um sistema descentralizado e até mesmo distribuído.

Uma imagem vale mais do que mil palavras.

Diferenças entre sistema centralizado, descentralizado e distribuído
Diferenças entre sistema centralizado, descentralizado e distribuído

A Fonte da Verdade

No sistema centralizado tínhamos o servidor-mestre no centro sendo também conhecido como a fonte da verdade. Sim, nós chamamos assim mesmo só que em inglês (source of truth).

Fonte da verdade porque era no servidor que os dados se concentram, qualquer cliente que desejava saber o estado atual dos dados poderiam perguntar ao mestre e ele responderia.

Mas agora num sistema distribuído, quem dispõe da verdade?

Ou seja, qual estado é o correto?

Qual é o verdadeiro?

Se tem mais de uma verdade, mais de um estado, como lidamos com isso?

Um deveria se sobrepor ao outro?

E aqui começamos uma grande jornada numa mudança de paradigma.

Okay. Temos um problema, e parece que é um dos grandes.

Isso significa um novo ótimo desafio! 😄

Resolução de conflitos

Diante esse desafio, consultei o Hadrien que faz parte do time da Facilita.

Ele me indicou um caminho e fui às pesquisas.

Foram dezenas de horas assistindo vídeos, mais de 100 páginas de artigos matemáticos com fórmulas bizarras e mais 1 tonelada de códigos lidos, pra basicamente entender essa sigla:

CRDT – Conflict-free Resolution Data Types

Que basicamente quer dizer: tipo de dados que não entram em conflitos, ou que se resolvem sozinhos.

Essa tecnologia permitiu que projetos colaborativos, como editores de texto pudessem ser usados de forma offline, sem um servidor que precise checar as modificações e diferenças nos arquivos e ainda assim preservando as modificações de todas as pessoas.

“Mas o Google Docs, também funciona offline, ele usa esse tal de CRDT?”

Então, não. Mesmo que você possa usar o Docs offline, você ainda precisa do servidor mestre para coletar todas as alterações das pessoas e decidir quais devem permanecer.

Existem ainda muitas outras implicações na diferença entre os 2 modelos, esses detalhes podem ficar para um outro artigo.

Onde paramos? Ah sim! Depois de muito estudo, fui colocar a mão na massa.

Apanhei, apanhei e apanhei.

Por mais que eu soubesse que já sabia o que eu precisava saber, eu sabia que ainda não sabia de algo importante. (rs)

Faltava algo, meu código funcionava, mas não exatamente como eu esperava.

Dividir pra conquistar

Comecei a “dividir pra conquistar”: quebrei partes do códigos em partes menores para conseguir compreender onde algo estava me escapando.

E nada, nada parecia fazer sentido.

Eu revisitava vídeos, artigos e as fórmulas malucas e sentia que uma mudança de paradigma precisava acontecer dentro de mim, antes de virar código.

Eu sentia que ainda estava preso no velho padrão de escravos-mestre.

Falar para se compreender

Larguei o teclado e fui conversar com Helena.

Comecei explicar à ela, onde estava enroscado.

“O problema é que se 2 participantes perderem a conexão e moverem, cada um, uma carta pro mesmo lugar, as cartas vão estar em conflito.” – eu explicando.

Newton já nos dizia que 2 corpos não podem ocupar o mesmo espaço ao mesmo tempo.

CRDT garante que no final uma das pessoas vença o conflito e a outra perca.

Mas se a carta de quem perdeu estava na área que representa mão dela na plataforma, como faço pra identificar a carta e fazê-la retornar para mão?

E se houver 3 pessoas movimentando cartas diferentes para um mesmo espaço? 3 conflitos consecutivos vão acontecer, o que fazer com os outros 2?

Não tem como usar “desfazer”…

Como eu resolvo esse conflito?

Como eu transfiro esse conflito pra quem tá jogando, pra que eles possam resolvê-los?

As conchas da praia

Uma parte de mim não quer resolver conflito alheio, outra parte acha que é possível resolver esse conflito.

Eu estava num grande conflito, imerso em confusão e agonia.

De repente notei que a Helena tinha trazido várias conchinhas da praia.

Respirei fundo e comecei do zero, me perguntando:

  1. Quais os passos para reproduzir o problema?
  1. Qual o resultado esperado? – essa é uma pergunta-chave.

Comecei a separar as conchinhas, pra minha sorte a Helena buscou pegar pares iguais de conchas.

Vai ter um GIF animado logo abaixo.

Separamos as conchas simulando a mesa da plataforma.

A ideia era fazer um espelhamento para simular nossas ações como se estivéssemos no navegador acessando o site e fazendo o movimento das cartas.

Então, coloquei uma carta-concha na minha mesa, e no da Helena apareceu uma cópia idêntica na mesma posição.

Até aqui tudo okay.

Agora iríamos simular uma desconexão de internet.

Eu movi uma carta-concha para um espaço vazio, e pedi que ela movesse uma carta-concha diferente da minha pra mesma posição.

Como ela estava desconectada, o espaço ainda estava vazio, para ela. 

Ela então moveu e aí eu fiz a pergunta:

“Qual o resultado esperado?”

Na minha cabeça os pensamentos como um turbilhão: 

  • Deu conflito..espaç…vazio… conexõ… teorema de…raiz quadrada de…

Helena disse: Um em cima do outro.

Eu: O que? Não…na.. não.. pode.. diz de novo.

Helena : Fica um sobre o outro.

Uma imagem animada (GIF) de conchas exemplificando a mesa e as cartas resolvendo os conflitos.

A força da Inclusão

E de repente o mundo parou, as palavras conflitos foram dissolvendo da minha mente, eu comecei a rir, e a rir…e estava incrédulo.

A resposta estava na Inclusão.

“Ouvir todas as vozes” – começava a me lembrar.

“Fazer parte, pertencimento”

“Considerar todas as verdades dos outros como sendo sua verdade”

Não há conflito quando concordamos que não há regras.

Quem disse que não poderia haver 2 cartas na mesma posição?

Na verdade, isso era uma funcionalidade que já queríamos adicionar na plataforma no futuro. 

E parece que chegou como consequência de pensar de uma nova forma, de ver as coisas de um novo ângulo, pelo ângulos dos outros.

Ali a resposta era mudar as regras do jogo, fazer o jogo se adaptar a essa nova realidade, a esse novo paradigma.

O ato de empilhar cartas em caso de conflito.

Eureka! 

Ou devo dizer Heleureka!?

O que há por vir?

A plataforma com seu novo paradigma P2P esta em fases de testes e quase pronta pra ser lançada.

Além do que já foi dito como mudanças, como capacidade de:

  1. Escalonar.
  2. Empilhar cartas em caso de conflitos.
  3. Sincronização sem conflitos em P2P.
  4. Sistema descentralizado/distribuído.

Também novas funcionalidades foram adicionadas e estão sendo testadas, como:

  1. Ver o mouse das pessoas passeando na mesa
  2. Plataforma de cara nova, com mais espaço na mesa e mão retrátil.
  3. Sistema de distribuição de cartas melhorada
  4. Baralho do GROK em inglês.
  5. Novo baralho CollabQuest.
  6. Novo baralho Oráculo da Rivi.

E coisas que já começaram a ser desenvolvidas, mas estão na fila de espera, como:

  1. Videoconferência dentro da plataforma.
  2. Internacionalização, a plataforma em outros idiomas.
  3. Sistema de criação de novas mesas dentro da partida, estilo breakout rooms do Zoom.

Espero que eu não tenha esquecido de algum, são tantas coisas.

Um pedido

E pra terminar esse quase documentário, eu gostaria de pedir a você que contribua com esse projeto, para que ela continue a florescer, crescer e atingir todo seu potencial.

Sugestões de como colaborar:

  1. Você pode assinar a Facilita
    1. Isso ajuda a pagar os custos de desenvolvimento e manutenção da plataforma.
  2. Você pode usar, testar, se divertir e nos dar feedback.
    1. Dar sugestões de melhoria, correção
  3. Você pode nos dizer: O que a plataforma precisa pra você se engajar?

Aprecio sua paciência por ler todo esse textão, e fico feliz em poder compartilhar esse diário da Facilita, e essa mudança de paradigma.

Até a próxima.

Que tal levar o poder dos jogos para seus encontros virtuais?

Conheça e assine nossa plataforma

Compartilhe esse texto com suas redes

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *