As redes agora são mais rápidas que os discos?

119

Esta é uma questão de design de software

Eu costumava trabalhar na seguinte regra para velocidade

cache memory > memory > disk > network

Com cada etapa sendo 5-10 vezes a etapa anterior (por exemplo, a memória cache é 10 vezes mais rápida que a memória principal).

Agora, parece que o gigabit ethernet tem latência menor que o disco local. Assim, talvez as operações para ler de um grande DB na memória remota sejam mais rápidas que as leituras de disco locais. Isso parece heresia para um temporizador antigo como eu. (Eu passei algum tempo construindo um cache local no disco para evitar ter que fazer viagens de ida e volta na rede - daí a minha pergunta)

Alguém tem alguma experiência / números / conselhos nesta área?

E sim, eu sei que a única maneira real de descobrir é construir e medir, mas eu estava pensando sobre a regra geral.

editar :

Estes são os dados interessantes da resposta principal:

  • Ida e volta no mesmo datacenter 500.000 ns

  • Procura de discos 10.000.000 ns

Isso é um choque para mim; Meu modelo mental é que uma viagem de ida e volta da rede é inerentemente lenta. E não é - é 10x mais rápido que um disco 'round trip'.

Jeff attwood postou este v bom blog no tópico link

    
por pm100 22.02.2011 / 00:46

13 respostas

129

Aqui estão alguns números que você provavelmente está procurando, conforme citado por Jeff Dean, um membro do Google:

Numbers Everyone Should Know

L1 cache reference                             0.5 ns
Branch mispredict                              5 ns
L2 cache reference                             7 ns
Mutex lock/unlock                            100 ns (25)
Main memory reference                        100 ns
Compress 1K bytes with Zippy              10,000 ns (3,000)
Send 2K bytes over 1 Gbps network         20,000 ns
Read 1 MB sequentially from memory       250,000 ns
Round trip within same datacenter        500,000 ns
Disk seek                             10,000,000 ns
Read 1 MB sequentially from network   10,000,000 ns
Read 1 MB sequentially from disk      30,000,000 ns (20,000,000)
Send packet CA->Netherlands->CA      150,000,000 ns
  

É a partir de sua apresentação intitulada Desenhos, Lições e Conselhos de Construção de Grandes Sistemas Distribuídos e você pode obtê-lo aqui:

A palestra foi dada em Sistemas Distribuídos em Larga Escala e Middleware (LADIS) 2009 .

Outras informações

É dito que o gcc -O4 envia e-mails para Jeff Dean uma reescrita.

por 22.02.2011 / 08:38
19

Existem muitas variáveis quando se trata de rede vs. disco, mas, em geral, o disco é mais rápido.

Os barramentos SATA 3.0 e SAS são de 6 Gbps, contra 1 Gbps de rede menos sobrecarga de protocolo. Com o RAID-10 15k SAS, a rede parecerá lenta. Além disso, você tem o cache de disco e também a possibilidade de discos rígidos de estado sólido, que, dependendo do cenário, também podem aumentar a velocidade. O acesso aleatório aos dados sequenciais desempenha um fator, bem como o tamanho do bloco no qual os dados estão sendo transferidos. Tudo depende do aplicativo que está sendo usado para acessar o disco.

Agora, eu nem sequer toquei no fato de que o que quer que você esteja transportando pela rede está indo ou vindo do disco de qualquer maneira ... então ....... novamente, o disco é mais rápido.

    
por 22.02.2011 / 02:41
10

Bem, isso depende se o recurso de rede tem os dados que você está solicitando prontamente disponíveis (na memória ou similar) ou se, por sua vez, ele apenas os leu de um disco.

Em qualquer caso, o rendimento pode ser maior em alguns casos, mas acredito que a latência será maior.

    
por 22.02.2011 / 00:51
2

IMX o disco ainda é mais rápido. A taxa de transferência teórica da rede é alta, mas na prática você não chega perto disso.

Cerca de dois anos atrás eu tive problemas com disco rígido no meu laptop e o DMA acabou. Isso tornou o disco rígido drasticamente mais lento e, em particular, mais lento que a rede. Mas quando mudei para outro computador, voltei ao meu estado original do disco rígido mais rápido que a Internet.

    
por 22.02.2011 / 00:50
2

Minha experiência com redes gigabit é que, dado o servidor certo, você pode superar o desempenho local em termos de taxa de transferência e latência. Veja Testes de rede: estamos obtendo desempenho de gigabit?

Para todos os efeitos práticos, recomendo tratar network & armazenamento local como equivalente e use apenas caches de memória.

A advertência padrão, como você mencionou, é verdadeira, pois não há regras gerais; e, na verdade, na maioria das vezes, um deve estar trabalhando com servidores bem configurados e usando métricas para avaliar o melhor método de transferência de dados.

Se você estiver usando uma máquina low-end com um disco rígido lento, provavelmente será mais rápido usar uma conexão de rede gigabit para um servidor com um storage array rápido.

Da mesma forma, se você estiver trabalhando com duas máquinas de hardware quase idêntico, a latência e a sobrecarga de rede tornariam o armazenamento local mais rápido; é senso comum mesmo.

    
por 22.02.2011 / 01:18
2

Depende. Se a sua E / S for basicamente acesso aleatório, sua taxa de transferência fixa provavelmente não será tão alta se comparada à largura de banda da rede que pode estar disponível. No entanto, a maior parte do tráfego de rede é gerada por processos que envolvem E / S. Se o conjunto de trabalho de qualquer processo que estiver gerando o tráfego de rede couber no cache, ele não será restringido pela largura de banda do disco. Se o cache for burlado, o disco se tornará um gargalo.

Eu trabalho em sistemas de data warehouse, e a consulta DW canônica é uma varredura de tabela. Se sua consulta atingir mais do que alguns por cento das linhas na tabela de fatos (ou partição), uma varredura de tabela ou partição usando E / S sequencial será mais eficiente do que um plano de consulta de acesso aleatório usando pesquisas de índice e pesquisas.

O armazenamento em rede (ou seja, SANs) tende a não funcionar bem em cargas de trabalho de streaming, a menos que seja ajustado adequadamente. Se a SAN estiver sendo usada para um ambiente de consolidação de propósito geral, ela quase certamente será ajustada de modo bastante suboptimizado para uma carga espiculada e de fluxo contínuo, como um data warehouse. Eu vi um white paper do fornecedor sugerir que você precisa de cerca de 3x o número de discos para obter a mesma taxa de transferência em uma SAN que não esteja ajustada para E / S de streaming e para uma que seja.

Minha experiência é compatível com isso. Na verdade, nunca implantei um data warehouse em um ambiente de consolidação em que eu não pudesse executar o mesmo processo ETL com mais rapidez no meu PC de mesa. Eu também tive vendas Representantes de um grande fornecedor de equipamentos SAN dizem que muitos de seus clientes usam armazenamento de conexão direta para o sistema DW porque as SANs não são rápidas o suficiente.

O armazenamento em rede é pelo menos uma ordem de grandeza mais cara por IOPS do que o armazenamento de anexação direta para cargas de trabalho de acesso aleatório e mais próximo de duas ordens de magnitude mais caras para a transmissão.

    
por 27.02.2013 / 22:11
1

A experiência que tenho com isso é que quando você está em uma conexão de 1Gbit e tenta baixar um arquivo, seu disco rígido é normalmente o gargalo. Uma coisa que você deve ter em mente é que você precisa configurar uma conexão primeiro, o que também leva tempo. Então, para enviar grandes pedaços de rede de dados pode realmente ser mais rápido que o disco.

    
por 22.02.2011 / 00:49
1

Sim, em geral, as redes agora ficam mais rápidas do que os discos rígidos, mas isso pode aumentar com o tempo.

Acho que, portanto, sou

Quando um aplicativo está em execução, significa que a máquina host está funcionando, enquanto o trabalho na rede precisa de um protocolo comum, verificando a disponibilidade do ponto, a segurança do canal ... e se os colegas usam plataformas diferentes, é mais difícil conseguir o que você pode fazer em uma única máquina.

Eu prefiro olhar para isso em termos de trade-offs ao invés de quem é o mais strong ...

    
por 22.02.2011 / 01:00
1

Você precisa descrever um caso de uso exato para essa comparação. Os discos rígidos têm tempo de busca + taxa de transferência e cache. As redes têm latência, taxa de transferência e sobrecarga de protocolo ...

Acho que sua memória cache original > memória > disco > ainda é uma realidade em geral, embora

    
por 22.02.2011 / 01:02
0

O disco está conectado à CPU via barramento SCSI, SAS ou IDE. Qual é uma rede interna que executa um protocolo específico - SCSI ou ATAPI. A Ethernet foi projetada para trabalhar em distâncias maiores e pode ser muito mais lenta que a SAS / SCSI / IDE. Então, qual deles é mais rápido, depende de quais tecnologias você está comparando. Se você comparar um HD de laptop de 20 anos com 10Gbps de armazenamento em RAM, o vencedor será sempre a rede. E quando você compra um armazenamento, precisa compará-lo com o preço e a capacidade de gerenciamento.

    
por 22.02.2011 / 03:13
0

Bem, há Light Peak que está apontando para uma velocidade de rede de 100GBps, que está se aproximando da RAM velocidades. Naturalmente, a rede só pode fornecer dados tão rapidamente quanto o remetente pode gerar os dados, ou seja, se o remetente está lendo os dados de um disco rígido, o receptor só obterá os dados na mesma velocidade que o disco lido, mesmo com uma rede super rápida.

    
por 22.02.2011 / 16:32
0

Uma coisa a ter em mente é que depende da rede. Digamos, por exemplo, você é responsável pelo desempenho em um site. É claro que este site está conectado a um servidor de banco de dados em uma rede local e também está conectado a internautas da Internet, que também é um tipo de rede.

Em muitos casos, um link dedicado pode ser configurado entre o servidor da Web e o servidor de banco de dados por meio de IPs estáticos e um cabo crossover ou automdx para manter a latência baixa e fornecer um link dedicado para o tráfego, já que você deseja muito rápido. O servidor de banco de dados faz todos os tipos de trabalho para manter o máximo possível do banco de dados na memória e, em muitos casos, geralmente obtém êxito para todo o conteúdo e alguns índices. As consultas a esse banco de dados serão tão rápidas ou até mais rápidas do que as consultas ao disco.

Por outro lado, certas tecnologias da web (asp.net webforms viewstate, estou olhando para você) gostam de empurrar um monte de informações de e para o navegador web do cliente como um cache (das sortes). Se esta é uma conexão lan local (e na defesa do asp.net webform isso é verdade a maior parte do tempo) não é tão ruim assim, mas na internet isso pode absolutamente matar o desempenho, de tal forma que você muitas vezes é muito melhor empurrar isso para um banco de dados ou disco local.

    
por 22.02.2011 / 21:21
0

Pessoalmente, acho que há vários fatores a serem considerados. Por exemplo, com que rapidez a memória ou disco que você está acessando localmente é o mesmo que você acessaria via rede? Se os dados remotos estivessem em um SSD muito rápido e fossem mais rápidos do que a rede gigabit instalada de ponta a ponta, o controle remoto poderia ser mais rápido para grandes arquivos de streaming.

No entanto, se você acessasse aleatoriamente pequenas unidades de dados e a rede não fosse perfeita ou tivesse muitos saltos e mais do que apenas acessá-los, eu apostaria que um cache local é mais rápido até mesmo do que um disco mecânico. dirigir quase 100% do tempo. Mas você levanta um ponto interessante e por quanto tempo precisará de armazenamento local de qualquer coisa se a velocidade da rede continuar crescendo?

    
por 27.02.2013 / 18:47