Cluster grafite / carbono retornando dados incompletos

3

Tentando configurar um cluster de grafite / carbono. Eu tenho um balanceador de carga elástico que direciona o tráfego entre dois nós no meu cluster, cada um com um aplicativo da Web, retransmissão e cache.

Neste exemplo, enviei 1000 contagens de Metric1 para o cluster.

Aqui está um diagrama:

Oproblema

Comovistoacimanodiagrama,cadaservidorarmazenaaproximadamentemetadedacontagemrealdamétrica.Quandoconsultadopeloaplicativodaweb,eleretornaapenasametadedacontagemreal.Deacordocom esta fantástica postagem , esse é o comportamento esperado, porque o aplicativo da Web retorna o primeiro resultado que ele vê . Isso implica (e está documentado) que somente as contagens completas devem ser armazenadas nos nós (no meu exemplo, um ou ambos os nós devem ter 1000).

Então, meu problema parece ser o particionamento e a replicação impróprios da contagem. No meu exemplo acima, quando uma nova contagem chega da web, ela pode ser redirecionada para o NodeA ou o NodeB. Eu tinha assumido que as contagens podem entrar no cluster através de qualquer relé. Para testar essa suposição, removi o balanceador de carga do cluster e direcionei todas as contagens de entrada para o relé do NodeA. Isso funcionou: a contagem total apareceu em um nó e, em seguida, foi replicada para o segundo, e a contagem completa foi retornada corretamente do aplicativo da Web.

Minha pergunta

O carbon-relay parece funcionar como um balanceador de carga em nível de aplicativo. Isso é bom, mas estou preocupado que, quando o tráfego de entrada se tornar muito grande, usar um único carbon-relay como um balanceador de carga se tornará um gargalo e um único ponto de falha. Eu preferiria usar um balanceador de carga real para distribuir uniformemente o tráfego de entrada pelos relés do cluster. No entanto, carbon-relay parece não funcionar bem, daí o problema ilustrado acima.

  • Por que o cluster de retransmissão dividiu o Metric1 entre os dois caches no cenário acima? (Quando um balanceador de carga distribuiu a entrada em diferentes relés?)
  • Posso usar um balanceador de carga elástica na frente do meu cluster de grafite / carbono? Eu configurei mal meu cluster para esse propósito?
  • Se eu não puder, devo colocar meu primário carbon-relay em sua própria caixa para funcionar como um balanceador de carga?
por David Elner 24.09.2013 / 00:34

2 respostas

2

Acontece que DESTINATIONS da minha configuração apontou para o carbon-cache s em vez do outro carbon-relay , por meio de um erro de digitação da porta #. Corrigir a configuração para realmente representar o diagrama mostrado na pergunta parecia resolver o problema: os dados agora aparecem em forma completa em cada nó (após a replicação).

Como uma observação, no entanto, estou agora sofrendo de um problema de resultados inconsistentes da API de renderização do aplicativo Web, conforme detalhado em esta questão . Pode ou não estar relacionado à configuração detalhada acima.

    
por 24.09.2013 / 21:53
0

O que você tem é um problema de autoridade. Usando o Whisper, cada banco de dados de séries temporais precisa pertencer a um único daemon de cache de carbono, ou você se depara com os problemas de consistência que está vendo. O relé de carbono tenta resolver esse problema enviando a mesma série temporal consistentemente para o mesmo terminal. Você pode fazer isso com o mecanismo de regras baseado em regex ou usando hashing consistente.

Minha recomendação seria não sobrecarregar o problema, escalar até que você não possa mais, e só então escalar. Temos um único relé de carbono que lida com 350.000 métricas a cada 60 segundos sem problemas em um único núcleo de EP Westmere de 5 anos de idade. Se você estiver usando hashing consistente, é uma operação de muito baixo custo para descobrir onde rotear uma métrica downstream. Se você estiver usando uma massa de regras de regex, haverá muitas correspondências de strings e poderá atingir um mural de desempenho muito mais rápido.

O banco de dados do Whisper não tem desempenho especial. Com toda a probabilidade, você vai atingir um gargalo de desempenho de E / S muito antes de o relé começar a causar problemas. Você está pensando demais em sua arquitetura.

Se e quando você realmente precisar se expandir além do que um único nó é capaz de fornecer, você pode rotear para um relé específico baseado na lógica de gerenciamento de configuração do cliente ou pode configurar um ELB que direcione para vários relés cada uma delas é executada no mesmo conjunto de regras e métricas de rota para os mesmos pontos de extremidade. Acredito que isso exigiria que você usasse correspondência baseada em regex, mas o hashing consistente também funcionaria se seus relés fossem da mesma versão; Eu nunca testei essa abordagem.

    
por 24.09.2013 / 18:15