All streams
Search
Write a publication
Pull to refresh
34
0
Send message
Как прогреть кеш на 6 терабайт? :)
Проблема в том, что несколько десятков миллионов дескрипторов держать очень накладно. Вся соль в том, что файл читается однажды и попадает в кеш на другом уровне, снова его читать будут уже только тогда, когда он выпадет из кеша.

Имея 20 миллионов файлов и 10 миллионов открытых дескрипторов мы будем большинство времени промазывать мимо кеша. Опять же, файлов на сервер влазит куда больше, чем 20 миллионов.
Но некоторые задачи удобнее запускать на той же машине, где и данные лежат, это тупо быстрее из-за отсутствия сети между приложением и данными.


Тут не поспоришь. Только данные нужно линейно читать. В общем случае при ресайзе сетевые задержки гигабитного канала даже близко не сравнимы с disk read + resize.

вы же запоминаете где-то, в какой шард положили фоточку?


Да, у фотки есть имя и шард. Так куда проще, чем с DHT :)

восстанавливать всё сразу, как только сотрудники ДЦ заменили диск на новый


Это хорошо и удобно, но ведь создать таск в app engine «взять данные с одного инстанса и добавить в очередь на репликацию на второй» тоже можно. Автоматизации это потдаётся, хотя и с несколько большими усилиями.
Ничего из перечисленного не тянет на космические технологии, если честно :) Запускать задачи можно и вне хранилища, что куда удобнее, имея окружения для процессинга, которое можно растянуть по cpu гораздо дальше, чем себе могут позволить сервера с данными.

При добавлении новых серверов elliptics на них перетащит часть данных, так ведь? Вот это нам как раз не сильно нужно в append-only хранилище.

> У нас в планах штука, которая совсем сама всё делает, и только высылает письма «замените винт в сервере ААА, на полке подсвечен лампочкой неисправности»

Это задача мониторинга, а не системы хранения. У вас же вроде кластер заббикса для таких дел был.
speakerdeck.com/bobrik/node-dot-js-for-millions-of-images на 10 слайде моего первого рассказа про backpack есть упоминание elliptics как варианта для хранения, правда без конкретики.
Видео вроде то. Не вдохновились, потому что плюсов очевидных именно для простого хранения фотографий не было. Фотографиям просто много не надо: положить, прочитать, желательно с минимальными нагрузками на железо. Не думайте, что я только старое видео смотрел по elliptics, я даже был подписан на гитхабе на него, думал, что мнение изменится :)
Смотрели в эту сторону уже после перевода части инфраструктуры на backpack, но как-то не срослось. В elliptics много того, что нам не надо, а видео не вдохновили достаточно, чтобы попробовать его внедрить вместо backpack именно для хранения фотографий.

Ну а количество картинок в хранилище — вопрос времени :)
Там не совсем правда уже. Тогда ещё не было координаторов и всю логику по укладыванию фотографий и репликации мы держали внутри приложения.
Будете компилировать программы на scala дольше, чем люди пишут код на js.
С нетерпением жду вашего пластилинового квеста за $10k! Даже готов дать вам $2, пропорционально своему вкладу в Armikrog, чтобы честно было.
Ребята, у нас в логах ваш браузер не вставляет в конце урлов "/" иногда, это так и задумано? Сам поймать не смог, но если путь /blah/123/, то в логах есть /blah/123 только от яндекс-браузера. Мы одни такие?
Там не такое уж крутое выведение типов в js, как хотелось бы.
Весь динамический контент обычно ходит по схеме:

client -(http)> server

С рейлганом будет ходить:

client -(http)> cloudflare -(railgun)> server

При этом у клиента будут заметные тормоза, потому как cloudflare не за нулевое время проксирует каждый запрос. Если сайт в Питере, клиент в Питере, то схема с Питер -> Питер меняется на Питер -> Лондон -> Питер.

Как бы выгода не так уж очевидна :)

Ну и да, «Бинарный протокол, написанный на языке программирования Google Go» — не думал, что протоколы к языкам прибивают гвоздями.
Если у меня, например, 500 серверов, вы мне сможете канал в 50 гигабит предоставить?
Какой-то костыль, простите. В таком варианте consistency весьма и весьма eventual.

Вообще можно (нужно) держать несколько серверов memcached на разных физических машинах и тогда потеря одного сервера не должна портить погоду. Иначе «сервис не сможет выдержать нагрузку» по-умолчанию.
Не все, а только те, кто способен выбросить исключения. На самом деле таких не так уж много :)

У вас такой же callback hell, если вы в него верите, исключения передаются в коллбеки.

И да, асинхронные функции не должны выбрасывать исключений.
Не нужно бросать исключения в асинхронных окружениях :)

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

function parseJSON(json, callback) {
    try {
        callaback(null, JSON.parse(json))
    } catch (e) {
        callback(e)
    }
}


И не будет никаких проблем. Разве что вы забудете повесть обработчики ошибок.
по каким-то причинам, не может подключиться к TLS-серверу с самоподписанным сертификатом


А почему он должен?
Если в underscore ничего не поменялось, то _.difference в lodash на больших объёмах (сотни тысяч) работает в овер 650 раз быстрее :)

Information

Rating
Does not participate
Date of birth
Registered
Activity