IDs dos status do Twitter irão mudar

Conforme anunciado por Matt Harris (evangelista de desenvolvedores no Twitter) no grupo de desenvolvedores do Twitter, a partir das 14 horas (horário de Brasília) do dia 23 (terça-feira), as IDs dos status dos tweets não serão mais sequenciais. Irá entrar em ação um novo serviço de geração de IDs chamado Snowflake.

Para a maioria dos desenvolvedores essas mudanças não serão percebidas e não serão necessárias mudanças nos aplicativos que fazem uso da API do Twitter. Parâmetros com max_id e since_id continuarão funcionando como esperado. No entanto, não será mais possível contar o número de tweets subtraindo um ID do outro.

Alguns pontos-chaves sobre a mudança:

  • Os IDs dos status serão únicos;
  • Os IDs dos status serão sempre incrementados. Tweets criados a tarde terão ID maior do que aqueles criados de manhã;
  • A ordem dos IDs será mantida, permitindo a ordenação por IDs. A precisão da ordenação será de cerca de 1 segundo, o que significa que tweets criados no mesmo segundo não terão nenhuma ordem;
  • Todos os métodos existentes na API continuarão funcionando do mesmo jeito de antes;
  • Os IDs dos status anteriores permanecerão inalterados;
  • Haverá um salto notável no valor numérico dos IDs dos status quando as mudanças ocorrerem.

Snowflake

Floco de neveO serviço Snowflake usa números inteiros de 64 bits sem sinal, que serão gerados com base no tempo. Eles são compostos de um carimbo de tempo, um número de trabalho e um número de sequencia.

Um dos motivos da criação do Snowflake foi que, conforme o Twitter se afasta do banco de dados MySQL em direção ao banco de dados Cassandra, é preciso uma nova maneira para gerar IDs. Isso por que o Cassandra não gera IDs sequencias, e nem deveria. 

Alguns dos requisitos do Snowflake são:

  • Geração mínima de 10.000 IDs por segundo por processo;
  • Taxa de resposta de 2 ms (mais latência da rede);
  • Por se tratar de um serviço de alta disponibilidade, as máquinas que geram os IDs não devem ser coordenadas umas com as outras;
  • Os IDs devem ter um tamanho de 64 bits.

A solução para atender esses requisitos foi:

  • Servidor Thrift (framework para o desenvolvimento de serviços escaláveis em várias linguagens) escrito na linguagem Scala
  • IDs compostos de:
    • tempo: 41 bits
    • ID configurado da máquina: 10 bits (permite o uso de 1024 máquinas)
    • número de sequencia: 12 bits (muda a cada 4096 por máquina)

Deve-se usar o protocolo NTP (Network Time Protocol) para manter os relógios das máquinas precisos. Se o relógio da máquina atrasar, por exemplo, o Snowflake irá se recusar a gerar novos IDs enquanto o horário da máquina não for maior que o horário da última vez que um ID foi gerado. 

O Snowflake é um software livre sob a Licença Apache, por isso qualquer desenvolvedor pode usá-lo. O código-fonte está disponível no GitHub.

Twitpocalypse

Há algum tempo atrás o Twitter mudou o tamanho dos IDs dos status de inteiros de 32 bits (sem sinal) para inteiros de 64 bits (sem sinal). Isso por que estava próximo o temido Twitpocalypse, que aconteceria quando os IDs dos status atingissem o limite máximo de um número inteiro de 32 bits: 4.294.967.295.

Mas, por enquanto, o Twitpocalypse está longe de acontecer. Isso por que um inteiro de 64 bits (sem sinal) tem um valor máximo de 18.446.744.073.709.551.615. Grande não?

Clebersander Rech
Clebersander Rech (Cleber)
Analista de Sistemas
Curitiba, PR, Brasil