Как стать автором
Обновить

Шардирование: с нуля до Яндекс Диска

Время на прочтение9 мин
Количество просмотров8.9K
Всего голосов 30: ↑30 и ↓0+30
Комментарии7

Комментарии 7

Я отвечаю за ядро файловой системы Яндекс Диска.

Давно мучал один вопрос и нашёл кому его адресовать:

в исследовательских целях сравнивал быстродействие работы облачных хранилищ в часы ПИК (будни с 18 до 21 ч). Средняя скорость ЯД при загрузке 10ГБ тестовых данных порядка 60 Мб/с. Скачивается всё чуть быстрее. Примерно такие же результаты получил с облачными хранилищами в VK и Google (регион тестирования Москва, провайдер РТ).

При загрузке таких же тестовых данных в Облако от Сбера, скорость и скачивание порядка 200 Мб/с (результаты не носят случайный характер, перепроверял их несколько раз).

Как думаете чем вызвана такая разница в сравнении со Сбером?

Спасибо за вопрос)

Статья конечно не совсем про скорость загрузки) Файлы загружаются в отдельный сервис для хранения бинарных данных, а в нашей БД хранятся ссылки на эти файлы. 

Скорость загрузки определяется не только исходящим каналом от клиента, но и

- количеством активных клиентов

- настройками QoS и другими методами шейпинга трафика для гарантированной полосы пропускания

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

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

Интересно было бы подробней узнать про методику тестирования – как измеряли скорость в разные облачные хранилища)

Решардирование - это как? Вы просто добавляете новый шард и новые данные пишутся туда? Или нужно перетрясти все шарды переместив 1/N часть данных каждого на новый? Судя по тексту вы используете первый вариант, но термин "решардирование" смутил.

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

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

Может вы как разработчик ЯД знаете ответ, когда я спрашиваю техподдержку яндекса, почему я не могу скачать с оплаченного диска файл большого размера через браузер, они отвечают что это технически невозможно, и нужно обязательно ставить десктоп клиент? При этом разработчики того же nextcloud'а, и я тоже, не сталкивались с подобным. Возможно мы не знаем о том что это невозможно, и хотелось бы узнать почему.

(а клиент, в свою очередь, не умеет качать много файлов, понимать ссылки на ЯД, восстанавливаться после крашей, и главное известные баги висят годами без исправлений)

С ЯД уже, естественно, ушел на нормальные решения, но мнение разработчика узнать интересно.

Добавлю ответ техподдержки от 21 октября 2020 года, в котором, как минимум, три ложных утверждения:

Мы предлагаем скачивать крупные папки (объемом более 5 ГБ или содержащие более 500 файлов) с помощью нашей программы, так как это надежнее и почти всегда быстрее.

Наша программа Яндекс.Диск поддерживает докачку, которая при коротком обрыве соединения позволит продолжить загрузку, а не начинать ее заново.2. При медленном или ненадежном интернете программа позволяет избежать ошибок, из-за которых скачанные файлы не получалось открыть.

Браузеры так не умеют, и иногда — если папка слишком большая или в ней много файлов — скачать её через браузер может не получиться.

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

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

Что касается вашего вопроса о скачивании файлов по публичным ссылкам напрямую через ПО, такой возможности действительно пока нет, но я обязательно передам идею об ее реализации команде разработчиков, и, возможно, она появится в будущем.

Третья итерация: переход на PostgreSQL

YDB не рассматривали?

Очень интересно узнать о критериях, по которым PostgreSQL выигрывает у YDB.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий