Seletor de nó por hash de rendezvous
Atribua uma chave a um nó da sua lista: user:42 entre cache-a, cache-b e cache-c cai em cache-a e fica lá enquanto os nós e a semente não mudarem. A pontuação de cada nó aparece para você auditar a escolha. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Key
- user:42
- Nós
- cache-a, cache-b, cache-c
- Semente
- Selecionado
- cache-a
- Número de nós
- 3
O hash de rendezvous, também chamado highest random weight hashing, atribui cada chave a exatamente um nó do conjunto ativo sem anel de nós virtuais. Para cada nó candidato o algoritmo combina a chave com o identificador desse nó, ordena as pontuações e escolhe o vencedor. Quando um nó entra ou sai, só se movem as chaves que preferiam o nó que partiu ou que agora preferem o recém-chegado; o restante permanece, de modo que a taxa de acerto de cache e a propriedade de shards ficam estáveis sob mudanças de associação. Este seletor aceita uma chave de roteamento, uma lista de ids de nó, uma semente opcional de cluster e pesos positivos opcionais, e devolve o nó escolhido mais a tabela completa de pontuações para você auditar ou testar o posicionamento.
Como o hash de rendezvous escolhe um nó para uma chave
O consistent hashing popularizou a ideia de colocar chaves em um anel para que adicionar ou remover um nó remapeie apenas uma fração das chaves. O hash de rendezvous resolve o mesmo equilíbrio de carga com um contrato mais simples: para cada nó no conjunto de associação atual, calcula-se uma pontuação que depende só da chave e da identidade daquele nó, e seleciona-se o de maior pontuação. O nome clássico «highest random weight» reflete que o hash se comporta como um peso pseudorrandômico por par.
Como a pontuação do nó A nunca depende de B estar presente, remover B só afeta chaves para as quais B era o vencedor; todas as outras ainda preferem o mesmo sobrevivente. Adicionar um nó C só rouba as chaves que pontuam mais alto com C do que com o dono anterior. Essa disrupção mínima é o motivo pelo qual caches, POPs de borda e bancos fragmentados usam rendezvous quando desejam propriedade equilibrada sem manter um grande anel de nós virtuais.
Quando você fornece pesos positivos paralelos à lista de nós, o algoritmo passa a HRW ponderado: o hash é mapeado a um intervalo unitário u em (0,1] e a pontuação vira u elevado a um sobre o peso, para que nós mais pesados vençam com mais frequência e tudo continue determinístico. Empates — raros com 32 bits, porém possíveis — são desfeitos escolhendo o id de nó lexicograficamente menor para que dois clientes nunca discordem.
Onde um seletor de nó rendezvous agrega valor
Desenvolvedores de aplicações usam um seletor de nó por hash de rendezvous para fixar sessões de usuário, shards de objetos ou contadores de limite de taxa a um backend estável sem levantar anéis ZooKeeper nem grandes bibliotecas de consistent hashing. Equipes de CDN e de borda multi-região mapeiam chaves de conteúdo a POPs para que a afinidade de cache sobreviva ao scale-out. Frotas de jogos e IoT roteiam ids de dispositivo a workers de simulação e só remesham a fração que preferia um nó que saiu.
Pipelines de dados que particionam chaves no estilo Kafka entre consumidores podem simular offline mudanças de associação alimentando listas candidatas na mesma função pura que os workers chamarão.
Casos de uso
Afinidade de cache e de shards
Mapeie chaves de objeto ou de usuário a réplicas de cache ou shards de banco de dados para que mudanças de associação só remova as chaves que preferiam o nó adicionado ou removido.
Roteamento de borda multi-região
Escolha um POP ou worker de uma lista viva e saudável para cada chave de conteúdo, usando pesos opcionais quando a capacidade não é uniforme entre regiões.
Simulações offline de rebalanceamento
Alimente listas planejadas de nós no mesmo seletor determinístico em CI para medir quantas chaves se moveriam antes de mudar a associação em produção.
Perguntas frequentes
O que é hash de rendezvous (highest random weight)?
Pontua cada par (chave, nó) com um hash e escolhe a pontuação mais alta. Só se movem as chaves que preferiam um nó removido ou que preferem um recém-adicionado; o restante permanece.
Como selecionar um nó para uma chave?
Envie key e nodes (um ou mais ids de nó únicos). O campo selected da resposta é o nó vencedor.
Em que difere do consistent hashing?
O consistent hashing coloca chaves e nós virtuais em um anel. Rendezvous não precisa de anel nem nós virtuais: só a lista viva de nós e um hash de chave mais nó, o que simplifica atualizações de associação.
Os nós podem ter capacidades diferentes?
O método passa a HRW ponderado (u elevado a 1/peso) para que nós mais pesados vençam com mais frequência e permaneçam determinísticos.
O que acontece com as outras chaves quando um nó sai?
Elas ficam onde estavam. A pontuação de cada nó depende só da chave e daquele nó, então remover um nó move apenas as chaves que ele vencia, e adicionar um nó leva só as chaves que agora pontuam mais alto com ele.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/rendezvous-hash \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"key":"user:42","nodes":["cache-a","cache-b","cache-c"]}'const res = await fetch("https://api.kit.forhosting.com/dev/rendezvous-hash", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"key": "user:42",
"nodes": [
"cache-a",
"cache-b",
"cache-c"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/rendezvous-hash",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"key": "user:42",
"nodes": [
"cache-a",
"cache-b",
"cache-c"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/rendezvous-hash", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"key":"user:42","nodes":["cache-a","cache-b","cache-c"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"key":"user:42","nodes":["cache-a","cache-b","cache-c"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/rendezvous-hash", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"key": "user:42",
"nodes": [
"cache-a",
"cache-b",
"cache-c"
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.rendezvous_hash",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
A implementação parse pura é determinística no navegador e na API, não consome tokens de modelo e nunca acessa a rede.
Como o hash de rendezvous escolhe um nó para uma chave
Este endpoint implementa HRW sem pesos com uma mistura FNV-1a de 32 bits de semente opcional, chave e id de cada nó: o hash sem sinal é a pontuação, com comparações estáveis inteiras.
Contrato de entrada, formato da resposta e regras de validação
Essa tabela completa é intencional: harnesses de carga e revisões de código muitas vezes precisam provar por que uma chave aterrissou em um host específico. Combine o seletor com suas checagens de saúde — passe só ids saudáveis em nodes — para que hosts com falha saiam da corrida de pontuação sem lógica especial dentro do hash. Envie um corpo JSON com key (string não vazia após trim; alias object_key) e nodes (array de um a mil ids de nó distintos não vazios; alias members). A seed opcional (alias salt) é um sal de string prefixado à chave para que clusters independentes mapeiem a mesma chave de negócio de formas diferentes sem colidir na tabela de pontuações; omita-a ou passe string vazia se não houver sal. weights opcional é um array de números finitos positivos com o mesmo comprimento de nodes; omita-o para rendezvous de peso igual. Chaves vazias, listas vazias, entradas nulas, ids duplicados, pesos não positivos ou comprimentos que não batem falham com invalid_input e não são cobrados. Em sucesso a resposta ecoa key e seed, nomeia o nó selecionado, informa node_count, define method como rendezvous_hrw ou weighted_rendezvous_hrw e devolve scores: um array de objetos com node, weight, score e o inteiro hash subjacente, ordenado por score decrescente e depois nome de nó ascendente. Exemplo: key user:42 com nodes cache-a, cache-b, cache-c produz um único nome de cache selecionado que não muda até a associação ou a seed mudarem.
Onde um seletor de nó rendezvous agrega valor
Sites de conteúdo que competem por «rendezvous hashing» ou «highest random weight» se beneficiam de uma ferramenta gratuita no navegador cujas respostas batem byte a byte com a API paga. Como a implementação é parse pura de nível A, cada chamada bem-sucedida custa o preço base publicado US$ 0,002 sem tokens de modelo nem rede de saída; validação falha não consome saldo.
Perguntas técnicas
Quanto custa o seletor de nó por hash de rendezvous?
A ferramenta do navegador é gratuita. Pedidos de API usam saldo pré-pago do KIT a US$ 0,002 por chamada bem-sucedida; entrada inválida não é cobrada.