Esta é uma pergunta de design de software
Eu costumava trabalhar na seguinte regra para velocidade
cache memory > memory > disk > network
Com cada etapa sendo 5 a 10 vezes a etapa anterior (por exemplo, a memória cache é 10 vezes mais rápida que a memória principal).
Agora, parece que a Ethernet gigabit tem latência menor que o disco local. Portanto, talvez as operações de leitura de um grande banco de dados remoto na memória sejam mais rápidas que as leituras de disco local. Isso parece heresia para um velho temporizador como eu. (Passei algum tempo construindo um cache local no disco para evitar a necessidade de fazer viagens de ida e volta à rede - daí a minha pergunta)
Alguém tem alguma experiência / números / aconselhamento 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 superior:
Ida e volta no mesmo datacenter 500.000 ns
Procura de disco 10.000.000 ns
Isso é um choque para mim; meu modelo mental é que uma ida e volta da rede é inerentemente lenta. E não é - é 10x mais rápido que um disco 'ida e volta'.
Jeff attwood publicou este bom blog no tópico http://blog.codinghorror.com/the-infinite-space-between-words/
fonte
Respostas:
Aqui estão alguns números que você provavelmente está procurando, conforme citado por Jeff Dean, um companheiro do Google:
É da sua apresentação intitulada Designs, Lessons and Advice from Building Large Distributed Systems e você pode obtê-lo aqui:
A palestra foi proferida no Large Distributed Systems and Middleware (LADIS) 2009 .
Outras informações
Dizem que o gcc -O4 envia seu código por e-mail para Jeff Dean para reescrever.
fonte
Existem muitas variáveis quando se trata de rede x disco, mas, em geral, o disco é mais rápido.
Os barramentos SATA 3.0 e SAS têm 6 Gbps, contra uma rede de 1 Gbps menos sobrecarga de protocolo. Com o RAID-10 15k SAS, a rede vai parecer lenta. Além disso, você possui 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 a seqüencial de dados desempenha um fator, assim como o tamanho do bloco no qual os dados estão sendo transferidos. Tudo isso depende do aplicativo que está sendo usado para acessar o disco.
Agora, eu nem toquei no fato de que o que você está transportando pela rede está indo ou vindo do disco de qualquer maneira ... então ....... novamente, o disco é mais rápido.
fonte
Bem, isso depende se o recurso de rede tem os dados que você está solicitando prontamente disponíveis (na memória ou similares) ou se, por sua vez, apenas os leria a partir de um disco.
Em qualquer caso, a taxa de transferência pode ser maior em alguns casos, mas acredito que a latência será maior.
fonte
IMX o disco ainda é mais rápido. A taxa de transferência teórica da rede é alta, mas na prática você não se aproxima disso.
Há cerca de dois anos, tive problemas no disco rígido do meu laptop e o DMA saiu. Isso tornou o disco rígido muito mais lento e, em particular, mais lento que a rede. Mas quando mudei para outro computador, voltei ao meu estado original de disco rígido mais rápido que a Internet.
fonte
Minha experiência com redes de gigabit é que, dado o servidor certo, você pode superar o desempenho local em termos de taxa de transferência e latência. Consulte Testes de rede: estamos obtendo desempenho de gigabit?
Para todos os fins práticos, eu recomendaria tratar a rede e o armazenamento local como equivalentes e usar apenas caches de memória.
A advertência padrão, como você mencionou, é verdadeira, pois não há regras gerais; e que, na maioria das vezes, deve-se trabalhar com servidores bem configurados e usar 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, certamente será mais rápido usar uma conexão de rede gigabit com um servidor com uma matriz de armazenamento rápida.
Da mesma forma, se você estiver trabalhando com duas máquinas de hardware quase idêntico, a latência e a sobrecarga da rede tornariam o armazenamento local mais rápido; é senso comum realmente.
fonte
Depende. Se a sua E / S for principalmente de acesso aleatório, sua taxa de transferência plana provavelmente não será tão boa em comparação com a largura de banda da rede que poderia 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 esteja gerando o tráfego da rede se encaixar no cache, ele não será restringido pela largura de banda do disco. Se debitar o cache, 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 de 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 e pesquisas de índice.
O armazenamento em rede (ou seja, SANs) tende a não ter um bom desempenho nas cargas de trabalho de streaming, a menos que esteja ajustado adequadamente. Se a SAN estiver sendo usada para um ambiente de consolidação de uso geral, ela quase certamente será ajustada de maneira sub-ideal para uma carga pontiaguda de streaming, como um data warehouse. Vi um white paper de 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 está ajustada para E / S de fluxo contínuo e para uma que seja.
Minha experiência coincide com isso. De fato, nunca implantei um data warehouse em um ambiente de consolidação em que não consegui executar o mesmo processo ETL significativamente mais rápido no meu PC de mesa. Também tive representantes de vendas de um grande fornecedor de equipamentos SAN dizerem 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 magnitude mais cara por IOPS do que o armazenamento de conexão direta para cargas de trabalho de acesso aleatório e mais próximo de duas ordens de magnitude mais caras para streaming.
fonte
A experiência que tenho com isso é que, quando você está em uma conexão de 1 Gbit e tenta baixar um arquivo, seu disco rígido é geralmente o gargalo. Uma coisa que você deve ter em mente é que você deve configurar uma conexão primeiro, o que também leva tempo. Portanto, o envio de grandes partes da rede de dados pode ser realmente mais rápido que o disco.
fonte
Sim, em geral, as redes agora ficam mais rápidas que os discos rígidos, mas isso pode mudar com o tempo.
Penso, logo existo
Quando um aplicativo está sendo executado, significa que a máquina host está funcionando, enquanto o trabalho na rede precisa de um protocolo comum, verificando a disponibilidade dos pares, a segurança do canal ... e se os pares usam plataformas diferentes, é mais difícil conseguir o que você pode fazer em um computador. máquina única.
Prefiro olhar para isso em termos de trade-offs do que quem é o mais forte ...
fonte
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 ...
Eu acho que a sua memória cache original> memória> disco> rede ainda permanece verdadeira em geral embora
fonte
O disco está conectado à CPU via barramento SCSI, SAS ou IDE. Qual é uma rede interna executando um protocolo específico - SCSI ou ATAPI. A Ethernet foi projetada para funcionar em distâncias maiores e pode ser muito mais lenta que o SAS / SCSI / IDE. Então, qual é mais rápido, depende de quais tecnologias você está comparando. Se você comparar um HDD de laptop de 20 anos com um armazenamento de 10 Gbps de 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.
fonte
Bem, há o Light Peak, que visa a velocidade de rede de 100 GBps, que está chegando perto da velocidade da RAM. Obviamente, a rede só pode fornecer dados tão rapidamente quanto o remetente pode gerar os dados, ou seja, se o remetente estiver lendo os dados de um disco rígido, o receptor somente obterá os dados na mesma velocidade que o disco lido, mesmo com uma rede super rápida.
fonte
Uma coisa a ter em mente é que isso depende da rede. Digamos, por exemplo, que você é responsável pelo desempenho em um site. Obviamente, este site está conectado a um servidor de banco de dados em uma rede local e também a usuários da Internet, que também são um tipo de rede.
Em muitos casos, um link dedicado pode ser configurado entre o servidor Web e o servidor de banco de dados via IPs estáticos e um cabo cruzado ou automdx para manter a latência baixa e fornecer um link dedicado para o tráfego, pois você deseja que seja muito rápido. O servidor de banco de dados realiza todos os tipos de trabalho para manter o máximo possível do banco de dados na memória e, em muitos casos, geralmente é bem-sucedido em todo o conteúdo, além de alguns índices. As consultas nesse banco de dados serão tão rápidas ou até mais rápidas que as consultas em disco.
Por outro lado, certas tecnologias da web (asp.net webstates viewstate, eu estou olhando para você) gostam de enviar muitas informações de e para o navegador da web cliente como um cache (das sortes). Se esta for uma conexão local (LAN e em defesa asp.net do webform isso é verdade maior parte do tempo) não é de todo ruim, mas na internet pública isso pode absolutamente matar desempenho, de modo que você está frequentemente muito melhor empurrando esta em um banco de dados ou disco local.
fonte
Pessoalmente, acho que há vários fatores a serem considerados. Por exemplo, qual a velocidade da memória ou do disco que você está acessando localmente versus o que você acessaria via rede? Se os dados remotos estiverem com um SSD muito rápido e mais rápido que a rede gigabit instalada de ponta a ponta, o controle remoto poderá ser mais rápido para grandes arquivos de streaming.
No entanto, se você estivesse acessando aleatoriamente pequenas unidades de dados e a rede não tivesse falhas ou tivesse muitos saltos e mais do que você acessando, eu apostaria que um cache local é mais rápido, mesmo em uma unidade de disco mecânica quase 100 % do tempo. Mas você mencionou um ponto interessante e por quanto tempo será necessário o armazenamento local de qualquer coisa se a velocidade da rede continuar aumentando?
fonte