Qual é a latência DENTRO de um data center? Peço isso assumindo que existem ordens de magnitude de diferença


17

Estou tentando descobrir algo que simplesmente não consigo encontrar uma boa resposta.

Se eu disser que um cache REDIS (ou algum cache externo na memória) localizado em um datacenter e um servidor de aplicativos no mesmo datacenter, qual será a velocidade da conexão de rede (latência, taxa de transferência) para leitura de dados entre essas duas máquinas?

A "velocidade" da rede, por exemplo, ainda será pelo menos uma ordem de magnitude superior à velocidade da RAM que está buscando meus dados fora do cache no REDIS?

Minha pergunta final é: ter tudo isso guardado na memória do REDIS realmente fornece algum utilitário? Em contraste com se o REDIS estava colocando tudo isso em cache em um SSD? A memória é cara. Se a rede não é realmente um gargalo DENTRO do datacenter, a memória tem valor. Caso contrário, isso não acontece.

Acho que minha pergunta geral é: apesar das vastas incógnitas nos datacenters e da incapacidade de generalizar, bem como das variações, estamos falando de ordens de magnitude suficientes entre a latência da memória em um sistema de computador e até as melhores redes internas de um CD que a memória latências reduzidas não fornecem uma melhoria significativa no desempenho? Eu entendo que existem muitas variáveis, mas quão perto é? É tão próximo que essas variáveis ​​são importantes? Por exemplo, adote uma postura hiperbólica, uma unidade de fita é MUITO mais lenta que a rede, portanto, a fita não é ideal para um cache.


11
Também depende do número de viagens de ida e volta por transação; esse é o problema real que você serializou em uma sequência de consultas. Uma interface de consulta mais complexa, um procedimento do lado do servidor ou um cache denormalizwd pode reduzir o impacto.
Eckes

Respostas:


19

Existem várias versões dos "gráficos de latência que todos deveriam conhecer", como:

O fato é que, na realidade, há mais do que apenas latência. É uma combinação de fatores.

Então, qual é a latência da rede em um data center? Latência, bem, eu diria que é "sempre" abaixo de 1ms. É mais rápido que a RAM? Não. É perto da RAM? Acho que não.

Mas a questão permanece, é relevante. Esse é o dado que você precisa conhecer? Sua pergunta faz sentido para mim. Como tudo tem um custo, você deve obter mais memória RAM para que todos os dados possam permanecer na memória RAM ou é bom ler do disco de tempos em tempos.

Sua "suposição" é que, se a latência da rede for mais alta (mais lenta) que a velocidade do SSD, você não estará obtendo todos os dados na RAM, pois terá a lentidão na rede.

E parece que sim. Mas você também precisa levar em consideração a simultaneidade. Se você receber 1.000 solicitações de dados de uma só vez, o disco pode fazer 1.000 solicitações simultâneas? Claro que não, então quanto tempo levará para atender a essas 1.000 solicitações? Comparado com a RAM?

É difícil reduzi-lo a um único fator, como cargas pesadas. Mas sim, se você tivesse uma única operação em andamento, a latência da rede é tal que você provavelmente não perceberia a diferença entre SSD e RAM.

Assim como até o disco de 12 Gbps aparecer no mercado, um link de rede de 10 Gbps não seria sobrecarregado por um único fluxo, pois o disco era o gargalo.

Mas lembre-se de que seu disco está fazendo muitas outras coisas, seu processo não é o único na máquina, sua rede pode levar coisas diferentes etc.

Além disso, nem todas as atividades do disco significam tráfego de rede. A consulta ao banco de dados proveniente de um aplicativo no servidor de banco de dados é apenas um tráfego de rede muito mínimo. A resposta do servidor de banco de dados pode ser muito pequena (um único número) ou muito grande (milhares de linhas com vários campos). Para executar a operação, um servidor (servidor de banco de dados ou não) pode precisar fazer várias buscas, leituras e gravações em disco, mas apenas enviar um pequeno pedaço de volta pela rede. Definitivamente, não é um disco de rede RAM individual.


Até agora, evitei alguns detalhes da sua pergunta - especificamente, a parte Redis.

O Redis é um armazenamento de estrutura de dados em memória de código aberto (licenciado pela BSD), usado como banco de dados, cache e intermediário de mensagens. - https://redis.io/

OK, então isso significa que tudo está na memória. Desculpe, este disco SSD rápido não o ajudará aqui. Os Redis podem manter os dados no disco, para que possam ser carregados na RAM após uma reinicialização. Isso é apenas para não "perder" dados ou precisar repovoar um cache frio após uma reinicialização. Portanto, neste caso, você terá que usar a RAM, não importa o quê. Você precisará ter RAM suficiente para conter seu conjunto de dados. RAM insuficiente e acho que o seu sistema operacional utilizará swap- provavelmente não é uma boa ideia.


Obrigado. Isso é realmente útil. De fato, existem muitas variações contextuais aqui que têm alguma influência nisso. Se ignorarmos cargas pesadas por um momento, parece pela sua resposta que, de fato, a latência da rede é o gargalo, portanto, a latência adicional de SSD versus RAM não é significativa o suficiente para importar. Mas agora, se levarmos em conta as cargas pesadas, as diferenças de latência do SSD em relação à RAM começarão a se agravar e, agora, a RAM brilhará. É disso que se trata então?
Neeraj Murarka

11
É difícil reduzi-lo a um único fator de cargas pesadas. Mas sim, se você tivesse uma única operação em andamento, a latência da rede é tal que você provavelmente não perceberia a diferença entre SSD e RAM. Assim como até o disco de 12 Gbps aparecer no mercado, um link de rede de 10 Gbps não seria sobrecarregado por um único fluxo, pois o disco era o gargalo. Mas lembre-se de que seu disco está fazendo muitas outras coisas, seu processo não é o único na máquina etc.
ETL

11
Observe também que há muitos outros fatores a serem considerados além da latência, em particular que a maioria dos serviços reais precisa executar várias instâncias do programa do servidor em máquinas diferentes, portanto, "tudo na RAM localmente" normalmente não é uma opção prática.
chrylis -on strike-

Mas um link de rede de 10g é de baixo custo. Meus servidores estão conectados ao meu backbone com 200gigabit (sim, links 2x100g).
TomTom

3

Existem muitas camadas de cache nos sistemas de computador. Inserir um na camada de aplicativo pode ser benéfico, armazenando em cache as consultas de API e de banco de dados. E possivelmente dados temporários, como sessões de usuário.

Armazenamentos de dados como o Redis fornecem esse serviço em uma rede (rápida) ou soquete UNIX (ainda mais rápido), como se você usasse um banco de dados.

Você precisa medir o desempenho do seu aplicativo, mas vamos fazer um exemplo. Digamos que uma solicitação de usuário comum faça 5 consultas de API com 50 ms cada. 250 ms é a latência detectável pelo usuário. Contraste para armazenar em cache os resultados. Mesmo se o cache estiver em uma zona de disponibilidade diferente na cidade (não é o ideal), os hits provavelmente são de 10 ms no máximo. O que seria uma aceleração de 5x.

Na realidade, os sistemas de banco de dados e armazenamento também têm seus próprios caches. No entanto, geralmente é mais rápido obter um resultado pré-buscado do que passar pelo mecanismo de banco de dados e pelas camadas do sistema de armazenamento novamente. Além disso, a camada de armazenamento em cache pode reduzir significativamente a carga do banco de dados por trás dela.

Para um exemplo desse cache em produção, não procure além do blog de infraestrutura Stack Overflow sobre arquitetura . Centenas de milhares de solicitações HTTP que geram bilhões de acessos Redis são bastante significativas.

A memória é cara.

A DRAM nos tempos de acesso de 100 ns é aproximadamente 100x mais rápida que o armazenamento permanente em estado sólido. É relativamente barato para esse desempenho. Para muitas aplicações, um pouco mais de RAM compra velocidade e tempo de resposta valiosos.


Você pode esclarecer como calculou que cada uma dessas 5 consultas da API leva 50 ms cada? Isso está sob o disfarce do aplicativo que está acessando o banco de dados e fazendo a consulta e calculando o conjunto de resultados, versus apenas um cache na cidade que, por acaso, armazenou em cache a própria string de consulta como a chave e possui uma cópia em cache desse resultado conjunto?
Neeraj Murarka

11
Eu inventei esses números, mas sim. Fazer uma consulta e calcular um resultado novamente provavelmente será mais lento do que obter esse resultado pré-calculado. Implementações como o Redis tendem a ficar na memória por simplicidade e velocidade. Atravessar uma rede IP ou transporte de soquete UNIX também pode ser bastante rápido. Tudo isso dito, esse material de armazenamento em cache não é necessário para todos os designs.
John Mahowald

Entendido. Eu acho que eu entendo mais ou menos. Parece que em muitos casos, mas não o tempo todo, mesmo atravessando o datacenter para um cache próximo que talvez esteja no mesmo estado dos EUA (ou província canadense etc.) (talvez a região seja uma boa semântica) pode ser uma grande vantagem sobre o processo que tenta recalcular o valor algoritmicamente a partir de seu próprio banco de dados local, se de fato resultar em um acerto no cache. Mas, então, o cache que pode estar remoto, não oferece muito valor por estar na memória. Também pode ser baseado em SSD.
Neeraj Murarka

11
O datacenter remoto é o pior caso; idealmente, a camada de cache fica a menos de 1 ms de seus clientes. Talvez a mesma zona de disponibilidade ou mesmo no mesmo host. Você pode armazenar em cache em um armazenamento persistente, se desejar. Ou você pode usar esse armazenamento de estado sólido para o banco de dados primário, acelerar todas as consultas e possivelmente não precisar de uma camada de armazenamento em cache. Existem vários projetos possíveis.
John Mahowald
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.