Персональные блоги → Парадокс надежности RAID-0
RAID 0 («Striping») — дисковый массив из двух или более жёстких дисков с отсутствием избыточности. Информация разбивается на блоки данных и записывается на оба/несколько дисков одновременно.
Обычно, когда идет упоминание про данный вид массивов, в ответ идут фразы, наподобие: «Не смейте этого делать, ведь вероятность потери информации такого решения для двух дисков существенно, в целых 2 раза выше, чем одиночного диска!» (если быть точным, то в 2-p, где p-вероятность отказа одиночного диска).
И тут появляется парадокс надежности RAID-0. Дело в том, что кроме вероятности потери информации есть зеркальная ей вероятность того, что информация не потеряется! Они идут бок о бок и зависят друг от друга, как добро и зло.
Интуитивно кажется, что если существенно выросла вероятность потерять данные, то вероятность выживания данных так же существенно уменьшится, но на самом деле это не так! Из-за того, что вероятность потери данных достаточно мала, противоположная вероятность выживания данных изменится слабо.
Например, пусть вероятность выхода из строя диска в течении года составляет 0,01. Тогда, вероятность выхода массива RAID-0 составит 0,0199 (в 1,99 раз больше, чем для одиночного диска). Вероятность выживания одного диска составит 0,99. А вероятность выживания массива составит 0,9801, т.е. уменьшится всего на 1%.
Этим нехитрым приемом можно пользоваться для обоснования нужного вам решения. Если вы не хотите использовать RAID-0, то говорите про существенный рост вероятности поломки. А если хотите обосновать использование RAID-0, то говорите про несущественное падение надежности. :-)
Обычно, когда идет упоминание про данный вид массивов, в ответ идут фразы, наподобие: «Не смейте этого делать, ведь вероятность потери информации такого решения для двух дисков существенно, в целых 2 раза выше, чем одиночного диска!» (если быть точным, то в 2-p, где p-вероятность отказа одиночного диска).
И тут появляется парадокс надежности RAID-0. Дело в том, что кроме вероятности потери информации есть зеркальная ей вероятность того, что информация не потеряется! Они идут бок о бок и зависят друг от друга, как добро и зло.
Интуитивно кажется, что если существенно выросла вероятность потерять данные, то вероятность выживания данных так же существенно уменьшится, но на самом деле это не так! Из-за того, что вероятность потери данных достаточно мала, противоположная вероятность выживания данных изменится слабо.
Например, пусть вероятность выхода из строя диска в течении года составляет 0,01. Тогда, вероятность выхода массива RAID-0 составит 0,0199 (в 1,99 раз больше, чем для одиночного диска). Вероятность выживания одного диска составит 0,99. А вероятность выживания массива составит 0,9801, т.е. уменьшится всего на 1%.
Этим нехитрым приемом можно пользоваться для обоснования нужного вам решения. Если вы не хотите использовать RAID-0, то говорите про существенный рост вероятности поломки. А если хотите обосновать использование RAID-0, то говорите про несущественное падение надежности. :-)
Алгоритмы → Как сэкономить ресурсы на счетчике обращений
Вчера при обсуждении харбаэффекта прозвучала фраза по поводу счетчика запросов (количества загрузок картинки с сайта) на основе базы данных: «Вот экстраполируйте ваши расходы на 1'000'000 хитов в день через платные квоты, вот и будет видно тогда».
Основной смысл фразы, как я думаю, состоит в том, что счетчик на 1 млн запросов сделает 1 млн обращений к БД (один запрос на инкремент +1). Однако, это не обязательно так и зависит от поставленной задачи!
Вопрос: Пусть необходимо сделать счетчик посещения сайта.
Сколько нужно будет сделать изменений (UPDATE) в базе данных, что бы посчитать миллион посещений?
Ответ: Это зависит от точности, с которой нам нужно произвести измерения.
Допустим, что нам достаточно при миллионном объеме получить число с точностью до сотни человек. Тогда, в алгоритм подсчета можно добавить равновероятную случайную величину X, которая с вероятностью 1 к 100 принимает значение 0, и именно в случае равенства X==0 при очередном выбрасывании вызывать UPDATE.
Тогда, при миллионе загрузок у нас будет примерно 10000 обновлений базы данных (срабатывания счетчика). А для получения итогового значения нам просто нужно умножить счетчик на 100 :-)
Основной смысл фразы, как я думаю, состоит в том, что счетчик на 1 млн запросов сделает 1 млн обращений к БД (один запрос на инкремент +1). Однако, это не обязательно так и зависит от поставленной задачи!
Вопрос: Пусть необходимо сделать счетчик посещения сайта.
Сколько нужно будет сделать изменений (UPDATE) в базе данных, что бы посчитать миллион посещений?
Ответ: Это зависит от точности, с которой нам нужно произвести измерения.
Допустим, что нам достаточно при миллионном объеме получить число с точностью до сотни человек. Тогда, в алгоритм подсчета можно добавить равновероятную случайную величину X, которая с вероятностью 1 к 100 принимает значение 0, и именно в случае равенства X==0 при очередном выбрасывании вызывать UPDATE.
Тогда, при миллионе загрузок у нас будет примерно 10000 обновлений базы данных (срабатывания счетчика). А для получения итогового значения нам просто нужно умножить счетчик на 100 :-)