Существуют ли сети быстрее, чем диски?

Это вопрос дизайна программного обеспечения

Я использовал для работы следующее правило для скорости

  cache memory> память> disk> сеть
 

Каждый шаг в 5-10 раз превышает предыдущий шаг (например, кэш-память в 10 раз быстрее, чем основная память).

Теперь, кажется, что гигабитный ethernet имеет латентность меньше, чем локальный диск. Таким образом, возможно, операции по чтению из большого удаленного БД в памяти быстрее, чем чтение локального диска. Это похоже на ересь к старому таймеру, подобному мне. (Я просто потратил некоторое время на создание локального кеша на диске, чтобы избежать необходимости совершать круговые поездки по сети - следовательно, мой вопрос)

Есть ли у кого-нибудь опыт /количество /советы в этой области?

И да, я знаю, что единственный реальный способ узнать - построить и измерить, но мне было интересно об общем правиле.

<сильный> изменить

Это интересные данные из верхнего ответа:

  • Путешествие в оба конца в пределах одного и того же центра обработки данных 500 000 нс

  • Поиск диска 10 000 000 нс

Это шокирует меня; моя ментальная модель заключается в том, что сеть в оба конца по своей сути медленна. И его нет - его в 10 раз быстрее, чем диск «в оба конца».

Jeff attwood опубликовал этот хороший блог на тему http: //блог .codinghorror.com /заместитель бесконечномерным пространственно-между-словами /

115 голосов | спросил pm100 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 02:46:17 +0300000000amTue, 22 Feb 2011 02:46:17 +030011 2011, 02:46:17

13 ответов


121

Вот некоторые цифры, которые вы, вероятно, ищете, как цитирует Джефф Дин, сотрудник Google:

  
    
      

Числа, которые должны знать все

  Ссылка на кеш-код L1 0.5 нс
Филиал ошибочно 5 нс
Ссылка на кеш-память L2 7 нс
Блокировка /разблокировка Mutex 100 нс (25)
Ссылка на основную память 100 нс
Сжатие 1 Кбайт с Zippy 10 000 нс (3000)
Отправить 2 Кбайт по сети 1 Гбит /с 20 000 нс
Чтение 1 МБ последовательно из памяти 250 000 нс
В обе стороны в пределах одного центра обработки данных 500 000 нс
Диск ищет 10 000 000 нс
Прочитайте 1 МБ последовательно из сети 10 000 000 нс
Прочитайте 1 МБ последовательно с диска 30 000 000 нс (20 000 000)
Отправить пакет CA-> Нидерланды -> CA 150 000 000 нс
 
    
  

Это из его презентации под названием Проекты, уроки и советы по созданию больших распределенных систем , и вы можете получить ее здесь:

Разговор был предоставлен в широкомасштабных распределенных системах и промежуточном ПО (LADIS) 2009 .

Другая информация


Говорят , что gcc -O4 отправляет ваш код Джефу Дину за переписать.


ответил David d C e Freitas 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 10:38:30 +0300000000amTue, 22 Feb 2011 10:38:30 +030011 2011, 10:38:30
18

Есть много переменных, когда дело доходит до сети по сравнению с диском, но в целом диск быстрее.

Шины SATA 3.0 и SAS составляют 6 Гбит /с, а сети - 1 Гбит /с за вычетом расходов протокола. С RAID-10 15k SAS сеть будет казаться медленной. Кроме того, у вас есть кэш диска, а также возможность использования твердотельных жестких дисков, которые в зависимости от сценария также могут увеличить скорость. Случайный или последовательный доступ к данным играет фактор, а также размер блока, в котором передаются данные. Все зависит от приложения, которое используется для доступа к диску.

Теперь я даже не коснулся того факта, что все, что вы перевозите по сети, все равно идет или идет с диска ... так что, опять-таки, диск быстрее.

ответил JakeRobinson 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 04:41:21 +0300000000amTue, 22 Feb 2011 04:41:21 +030011 2011, 04:41:21
10

Ну, это зависит от того, есть ли у сетевого ресурса данные, которые вы запрашиваете, легкодоступными (в памяти или подобными), или если бы он просто читал его с диска.

В любом случае пропускная способность может быть выше в некоторых случаях, но я считаю, что время ожидания будет выше.

ответил 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 02:51:05 +0300000000amTue, 22 Feb 2011 02:51:05 +030011 2011, 02:51:05
2

IMX диск все еще быстрее. Теоретическая скорость передачи сети высока, но на практике вы не приближаетесь к этому.

Около двух лет назад у меня были проблемы с жестким диском на моем ноутбуке, и DMA вышел. Это сделало жесткий диск значительно медленнее и, в частности, медленнее, чем сеть. Но когда я переключился на другой компьютер, я вернулся к своему первоначальному состоянию HDD быстрее, чем Интернет.

ответил Charles 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 02:50:23 +0300000000amTue, 22 Feb 2011 02:50:23 +030011 2011, 02:50:23
2

Мой опыт работы с гигабитными сетями, с учетом правильного сервера, позволяет снизить локальную производительность с точки зрения пропускной способности и латентности. См. Сетевые тесты: мы получаем производительность Gigabit?

Для всех практических целей я бы рекомендовал рассматривать сеть и amp; локальное хранилище как эквивалентное и использовать только кэши памяти.

Стандартное предостережение, как вы упомянули, верно в том, что нет общих правил; и что в большинстве случаев нужно работать с хорошо настроенными серверами и использовать метрики для оценки наилучшего метода передачи данных.

Если вы используете низкоуровневую машину с медленным жестким диском, то почти наверняка будет быстрее использовать гигабитное сетевое подключение к серверу с быстрым массивом хранения.

Аналогично, если вы работаете с двумя машинами почти идентичного оборудования, тогда задержки и сетевые накладные расходы ускоряют локальное хранилище; это здравый смысл.

ответил Richard Harrison 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 03:18:27 +0300000000amTue, 22 Feb 2011 03:18:27 +030011 2011, 03:18:27
2

Это зависит. Если ваш ввод-вывод - это в первую очередь случайный доступ, то его плоская пропускная способность, вероятно, не такая высокая по сравнению с пропускной способностью сети, которая может быть доступна. Тем не менее, большинство сетевых потоков в конечном итоге генерируются процессами, которые связаны с ввода-выводами. Если рабочий набор любого процесса генерирует сетевой трафик, вписывается в кеш, он не будет ограничен полосой пропускания диска. Если он разбивает кеш, тогда диск станет узким местом.

Я работаю над системами хранилищ данных, а канонический DW-запрос - это сканирование таблицы. Если ваш запрос занимает более нескольких процентов строк в таблице фактов (или разделе), тогда сканирование таблицы или раздела с использованием последовательного ввода-вывода будет более эффективным, чем план запроса с произвольным доступом, используя поиск индекса и поиск.

Сетевое хранилище (то есть SAN) имеет тенденцию плохо работать при потоковых нагрузках, если оно не настроено надлежащим образом. Если SAN используется для среды консолидации общего назначения, он почти наверняка будет настроен достаточно под оптимально для потоковой, косой нагрузки, такой как хранилище данных. Я видел, что в белом документе поставщика указывается, что вам нужно около 3-кратного количества дисков для получения той же пропускной способности в SAN, которая не настроена для потокового ввода-вывода, как для одного.

Мой опыт сочетается с этим. Фактически, я никогда не развертывал хранилище данных в среду консолидации, где я не мог запустить один и тот же процесс ETL значительно быстрее на моем настольном ПК. У меня также были продажи представители основного поставщика оборудования SAN говорят, что многие их клиенты используют хранилище с прямым приложением для системы DW, потому что SAN недостаточно быстры.

Сетевое хранилище, по крайней мере, на порядок дешевле на IOPS, чем хранилище с прямым подключением для рабочих нагрузок с произвольным доступом и на два порядка дороже для потоковой передачи.

ответил ConcernedOfTunbridgeWells 28 FebruaryEurope/MoscowbThu, 28 Feb 2013 01:11:38 +0400000000amThu, 28 Feb 2013 01:11:38 +040013 2013, 01:11:38
1

Опыт, который у меня есть, заключается в том, что когда вы подключаетесь к 1Gbit-соединению и пытаетесь загрузить файл, ваш жесткий диск обычно является узким местом. То, что вы должны иметь в виду, это то, что вам нужно сначала установить соединение, что также требует времени. Поэтому для отправки больших фрагментов сети передачи данных может быть быстрее, чем диск.

ответил teuneboon 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 02:49:17 +0300000000amTue, 22 Feb 2011 02:49:17 +030011 2011, 02:49:17
1

Да, в общем, теперь сети становятся быстрее, чем жесткие диски, но со временем это может меняться.

Я думаю, поэтому я

Когда приложение работает, это означает, что хост-компьютер работает, а работа над сетью требует общего протокола, проверки доступности одноранговой сети, безопасности канала ... и если сверстники используют разные платформы, сложнее добиться того, что вы можете сделать на одной машине.

Я предпочитаю смотреть на это в терминах компромиссов, а не на кого сильнее ...

ответил Xaqron 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 03:00:17 +0300000000amTue, 22 Feb 2011 03:00:17 +030011 2011, 03:00:17
1

Вы должны описать точное использование для этого сравнения. Жёсткие диски имеют время поиска + скорость передачи и кеш. Сети имеют латентность, скорость передачи и накладные расходы протокола ...

Я думаю, что ваша исходная кэш-память> memory> network> сеть по-прежнему остается в силе, хотя

ответил Zepplock 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 03:02:43 +0300000000amTue, 22 Feb 2011 03:02:43 +030011 2011, 03:02:43
0

Диск подключен к CPU через шину SCSI, SAS или IDE. Какая внутренняя сеть работает с определенным протоколом - SCSI или ATAPI. Ethernet предназначен для работы на больших расстояниях и может быть намного медленнее, чем SAS /SCSI /IDE. Итак, какой из них быстрее, зависит от того, какие технологии вы сравниваете. Если вы сравните 20-летний ноутбук с жестким диском 10 Гбит /с в оперативной памяти, победитель всегда будет сетевым. И когда вы покупаете хранилище, вы должны сравнить его с ценой и управляемостью.

ответил Mircea Vutcovici 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 05:13:24 +0300000000amTue, 22 Feb 2011 05:13:24 +030011 2011, 05:13:24
0

Ну, есть Light Peak , который нацелен на 100-гигабитную сетевую скорость, который приближается к скорости ОЗУ. Разумеется, сеть может передавать данные так же быстро, как отправитель может генерировать данные, то есть, если отправитель считывает данные с жесткого диска, тогда получатель будет получать данные только с той же скоростью, что и диск, даже с сверхбыстрая сеть.

ответил Skizz 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 18:32:42 +0300000000pmTue, 22 Feb 2011 18:32:42 +030011 2011, 18:32:42
0

Следует иметь в виду, что это зависит от сети. Скажем, например, вы отвечаете за производительность на веб-сайте. Этот веб-сайт, конечно, подключен к серверу базы данных по локальной сети и также подключен к веб-серфингу через Интернет, что также является своего рода сетью.

Во многих случаях выделенная ссылка может быть настроена между веб-сервером и сервером базы данных через статические IP-адреса, а также кроссовый кабель или automdx, чтобы сохранить задержку и предоставить выделенную ссылку для трафика, поскольку вы хотите, чтобы она была очень быстро. Сервер базы данных выполняет всевозможные работы, чтобы сохранить как можно большую часть памяти в памяти, а во многих случаях часто бывает успешной для всего содержимого и нескольких индексов. Запросы к этой базе данных будут такими же быстрыми или даже быстрее, чем запросы на диск.

С другой стороны, некоторые веб-технологии (asp.net webforms viewstate, я смотрю на вас) любят нажимать много информации на клиентский веб-браузер и из него как кеш (вроде). Если это локальное соединение lan (и в защите веб-формы asp.net это действительно так), это не так уж плохо, но в общедоступном Интернете это может абсолютно убить производительность, чтобы вы часто намного лучше отбрасывают это на базу данных или локальный диск.

ответил Joel Coel 22 FebruaryEurope/MoscowbTue, 22 Feb 2011 23:21:26 +0300000000pmTue, 22 Feb 2011 23:21:26 +030011 2011, 23:21:26
0

Лично я думаю, что есть несколько факторов, которые следует учитывать. Например, насколько быстро находится память или диск, к которым вы обращаетесь локально, и к тому, к которому вы будете обращаться через сеть? Если удаленные данные были на очень быстром SSD и быстрее, чем гигабитные сети, установленные до конца, удаленный может быть быстрее для больших потоковых файлов.

Однако, если вы случайно получали доступ к небольшим единицам данных, и сеть не была безупречной или имела много перелетов и больше, чем просто доступ к ней, я бы поставил на то, что локальный кеш быстрее даже на жестком механическом диске почти 100% времени. Но вы поднимаете интересный момент и как долго будет нуждаться в локальном хранении всего, если скорость сети продолжает расти?

ответил jim 27 FebruaryEurope/MoscowbWed, 27 Feb 2013 21:47:06 +0400000000pmWed, 27 Feb 2013 21:47:06 +040013 2013, 21:47:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132