Um dos desafios em trabalhar com sistemas distribuídos, como a arquitetura de microsserviços, é garantir a unicidade dos identificadores (IDs) em várias partes do sistema.
Imagine que diferentes serviços estão rodando em servidores distintos e precisam criar IDs únicos para recursos que estão sendo criados ao mesmo tempo.
Como garantir que esses IDs não vão colidir ou causar inconsistências?
Em um sistema tradicional, é fácil gerar IDs sequenciais usando a função de autoincremento do banco de dados.
Mas em um sistema distribuído, isso se torna um problema!
Embora os IDs sequenciais do banco de dados sejam fáceis de trabalhar, eles não são apropriados para microsserviços, pois exigem um ponto central para garantir a ordem e a unicidade.
É aqui que entram os IDs distribuídos (ou IDs universais), que garantem unicidade sem a necessidade de um ponto central de controle.
Então, deixa eu te mostrar alguns dos principais tipos de IDs distribuídos que resolvem esse problema.
UUID v4
O UUID (Universally Unique Identifier) é muito utilizado em sistemas distribuídos. Ele gera um identificador único de 128 bits, com uma probabilidade extremamente baixa de colisão, mesmo sem centralização.
A versão mais comum, UUID v4, é simples de usar, mas não há ordem temporal, ou seja, os IDs não podem ser ordenados cronologicamente.
UUID v7
A versão 7 do UUID traz uma ordenação temporal ao ID. Ela foi projetada para combinar a vantagem dos UUIDs com uma característica importante: o timestamp embutido no próprio ID.
Isso facilita a ordenação dos registros sem perder a unicidade distribuída, mas como ele ainda é relativamente novo, não é suportado por todas as bibliotecas e frameworks.
TSID
O TSID (Time-Sorted ID) também gera IDs distribuídos ordenados por tempo, mas com uma representação numérica.
Ele é ideal para sistemas que precisam de IDs compactos, ordenados temporalmente, com eficiência de armazenamento e uma forma numérica, além de ser mais amigável para exibir diretamente na interface do usuário.
A parte ruim é que pode precisar de uma biblioteca específica para gerar esses IDs, porque ele não é muito suportado como os UUIDs.
ULID
O ULID (Universally Unique Lexicographically Sortable Identifier) combina unicidade com a necessidade de IDs que podem ser ordenados alfabeticamente.
Ele é útil em sistemas onde a ordenação é importante e onde um padrão mais “legível” pode ser benéfico.
Os ULIDs são codificados em Base32, o que os torna mais compactos e legíveis que os UUIDs. Porém, para usá-lo você também pode precisar de uma biblioteca externa.
KSUID
O KSUID (K-Sortable Globally Unique ID) é uma alternativa ao ULID que também gera IDs distribuídos e ordenados por tempo.
Ele codifica o timestamp no início do ID, o que garante que as inserções ordenadas ocorram de forma eficiente.
Apesar de ser excelente para bancos de dados que precisam de performance em consultas ordenadas, ele é menos utilizado e menos suportado que o ULID ou UUID.
Conclusão
Em resumo, se você está lidando com sistemas distribuídos, IDs como UUID v4, UUID v7, TSID, ULID e KSUID são ótimas escolhas, pois mantêm a unicidade sem a necessidade de coordenação central, e exceto o UUID v4, todos eles oferecem ordenação temporal.
Por outro lado, os IDs sequenciais tradicionais são mais apropriados para sistemas centralizados e com menos exigência de escalabilidade.
Quer entender melhor e aprender como implementar alguns tipos de IDs distribuídos em microsserviços com Java e Spring?
Este é um dos assuntos que será coberto em nossa formação Especialista Microsserviços, que estamos desenvolvendo.
Para receber informações quando uma nova turma for aberta, entre para a lista de espera.
Entrar na lista de espera do Especialista Microsserviços
Um abraço.
Olá,
o que você achou deste conteúdo? Conte nos comentários.