Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

articles:distributed-storage [2017/09/05 02:55] (текущий)
Строка 1: Строка 1:
 +====== distributed-storage ======
 +<​sub>​{{distributed-storage.odt|Original file}}</​sub>​
 +
 +====== распределенные хранилища информации ======
 +
 +крис касперски ака мыщъх no-email
 +
 +**лучший способ сохранить информацию — разделить ее с миром (в смысле поделиться с друзьями). это общеизвестный факт! давайте попробуем автоматизировать процесс дележа,​ чтобы компьютер самостоятельно "​рассеивал"​ данные по локальной сети…**
 +
 +===== введение =====
 +
 +Давным-давно,​ когда никаких CD-дисков и в помине не существовало,​ а дискеты осыпались как ржавчина с трубы, потеря всей информации была обычным делом. Вот и приходилось бегать по друзьям,​ копируя у них программы,​ которые они раньше копировали у вас. А что на счет исходных текстов и офисных документов?​ Их тоже отдавали на хранение приятелям,​ зачастую предварительно зашифровав. "​Вась,​ ты не против подержать у себя на винте пару десятков мегабайт моего архива?​ А я подержу твой!"​ Как говорят в таких случаях французы:​ "je te rends ton amour" (я возвращаю твою любовь). Идея понятна?​
 +
 +Естественно,​ при этом возникает то, что ботаники называют перекрестным опылением,​ а хакеры — вирусной эпидемией. Вирусы размножаются со страшной силой, распространясь со скоростью лесного пожара! Однажды,​ попав в такой обменник,​ они прочно обоснуются в нем, так что их становится практически невозможно уделить,​ ведь перезаражение происходит многократно. Правда,​ сейчас можно упаковывать дистрибутивы любым архиватором с опцией "​защиты от изменений"​ или контролировать контрольные суммы. Только вот делать все это вручную… как-то непотребно и утомительно. Двадцать первый век как ни как на дворе! К тому же распределенное хранилище обычно получается слишком несбалансированным:​ какой-то файл (программа,​ музыка,​ клип) есть у всех, а какого-то нет ни у кого и его потеря невосполнима.
 +
 +Но это раньше приходилось бегать с дискетами и таскать винты в сумке. Локальные сети позволяют обмениваться файлами не выходя из дома. Так почему не использовать те преимущества,​ которые несет прогресс?​
 +
 +{{distributed-storage_Image_0.jpg?​553}}
 +
 +Рисунок 1 беспроводная локальная сеть, "​протянутая"​ энтузиастом
 +
 +===== >>>​ врезка как защитить информацию =====
 +
 +10 Jun 97 19:50, Dmitry Sharov wrote to Dmitry Turkin:
 +
 + ​DT>>​ Как насчет землетрясения,​ урагана и наводнения ? :)
 +
 + ​DS>​ Ты знаешь как в Digital оборудована машина,​
 +
 + ​DS>​ на которой хранятся все прошивки их альф?
 +
 + ​DS>​ Она стоит на специальной платформе,​ которая
 +
 + ​DS>​ опирается на спецподушку толщиной метров 18
 +
 + ​DS>​ и при землетрясениях все это хозяйство сдвигается
 +
 + ​DS>​ на сотые доли миллиметра. Это со слов парня,
 +
 + ​DS>​ однажды побывавшего там на экскурсии.
 +
 +Ужас какой. А почему бы не просто поставить еще одну машину на Гавайях,​ скажем,​ и третью в Европе?​. И реплицировать. Уж если землетрясение будет и там и там, то это, скорее всего, конец света и прошивки больше не понадобятся.
 +
 +Mike
 +
 +Вот до чего доходят люди у которых нет денег на стример.
 +
 +вьшекн
 +
 +===== первые шаги =====
 +
 +Для создания распределенных хранилищ информации очень желательно иметь локальную сеть хотя бы на 10 Мбит с нелимитированным трафиком. Модем на 33.600 тоже сгодится,​ то 700 Мбайтный лазерный диск даже на крейсерской скорости (т. е. при отличном качестве телефонной линии) будет передаваться двое суток! Быстрее записать его на болванку,​ одеть сапоги и отгрузить товарищу самостоятельно. Заодно и пивом напоят.
 +
 +Беспроводные технологии значительно упрощают прокладку сетей и теперь уже не приходится возится с кабелями,​ опасаясь,​ что их сопрут (а их прут) и выбивать многочисленные разрешения на прокладку. Развелось,​ понимаешь,​ чиновников тут… Но это все ладно. Будем считать,​ что локальная сеть у нас уже есть. На худой конец, можно воспользоваться услугами Интернет-провайдера,​ многие из которых за локальных трафик практически не взимают никаких денег.
 +
 +Очень за программным обеспечением. Минималисты (к числу которых принадлежит и мыщъх) могут ограничиться "​общим доступом к файлам",​ встроенном в Windows. Начиная с W2K, система поддерживает квотирование,​ то есть позволяет ограничить предельный объем файлов для каждого пользователя. С квотированием уже не приходится бояться,​ что какой-то придурок забьет весь наш диск целиком. Выделяем,​ допустим,​ 10 Гбайт под общее хранилище и баста. Остается только назначить правда доступа так, чтобы все члены сети видели чужие файлы, но не могли их изменять или удалять. В XP это совсем не сложно сделать! Достаточно щелкнуть по свойствам папки и сказать:​ владелец может все, остальные — только читать.
 +
 +Теперь каждый сможет зарезервировать самые ценные файлы на компьютерах своих соседей,​ а то и весь диск целиком! Образуется что-то вроде файлообменной сети, к которой могут подключаться и другие пользователи. По российскому законодательству,​ любой потребитель может изготовить столько резервных копий, сколько ему необходимо,​ причем он не обязан предпринимать никаких дополнительных охранных мер, препятствующих распространению информации. Впрочем,​ с учетом вступления России в евросоюз,​ положение об авторском праве будет пересматриваться,​ дорабатываться и ужесточаться,​ но на наше счастье,​ строгость отечественных законов компенсируется необязательностью их исполнения. На крайний случай можно мигрировать в азиатские страны или, например,​ в Африку. А почему бы и нет?! Родина СПИД'​а и компьютерных вирусов (первый компьютерный вирус для ПК был написан пакистанскими хакерами). Но не будем отклоняться от темы, лучше займемся совершенствованием нашей системы.
 +
 +
 +
 +{{distributed-storage_Image_1.jpg?​499}}
 +
 +Рисунок 2 ноутбук с беспроводным адаптером тоже хочет резервироваться!
 +
 +===== почетным оленеводам посвящается =====
 +
 +"​Общий доступ"​ замечательно работает в сетях до десяти узлов, но затем начинаются проблемы. Вы просто не можете вспоминать кому положили какой файл, что зарезервировано,​ а что нет, к тому же домашние компьютеры это все-таки не выделенные сервера и они доступны не все время. Разбросанный по сотне узлов архив музыки/​фильмов/​софта практически неуязвим (если все компьютеры отказали сразу, то это значит,​ что случилось что-то катастрофическое типа землетрясения или цунами и тут же не до фильмов),​ но пока соберешь все файлы назад… И все равно окажется,​ что самого нужного как назло не хватает,​ потому что он был зарезервирован в единственном экземпляре на узле, владелец которого его удалил. Вот редиска! Но "​notimetocry",​ как говорят CradleofFilth ("не время рыдать"​ — клип готической группы "​колыбель отбросов"​). Будем подходить к делу творчески и дернем за хвост осла!
 +
 +Ослом (eMule) называют клиента крупнейшей файлообменной сети eDonley, в которой можно найти все что угодно:​ от исходников W2K до новейших блок-бастеров. Система сама следит за целостностью файлов,​ показывает количество имеющихся источников и тянет со всех активных узлов сразу, равномерно распределяя нагрузку между узлами. Мы можем разбивать пользователей на группы,​ ранжируя их по гибкой системе приоритетов,​ регламентировать входящий/​исходящий трафик и т. д. Короче преимуществ куча. В классическом Осле отсутствует возможность принудительной закачки и все что мы можем — просто выложить файлы в общую директорию,​ дожидаясь пока их кто-нибудь не заберет. Это хорошо работает для обмена музыкой,​ но для резервирования увы не подходит! Ну разве что договориться каждый день (или хотя бы раз в неделю) просматривать содержимое общих папок всех членов сети (естественно,​ просмотр папок должен быть разрешен),​ находить новые файлы и тянуть их себе, если, конечно,​ это уже не сделал кто-то другой. Можно установить любой порог, скажем,​ тянем только те файлы, которые имеются менее чем у десяти источников (точная цифра завит от размеров сети — чем больше сеть, тем выше порог). Необязательно делать это руками! Достаточно слегка доработать Осла, исходные тексты которого можно скачать с www.emule.ru,​ или написать плагин. Этим как раз и занимается мыщъх, да и не только он один!
 +
 +{{distributed-storage_Image_2.png?​553}}
 +
 +Рисунок 3 осел в действии
 +
 +Очевидный недостаток — привязанность к Ослу и к его серверам,​ которые и без того перегружены и работают из рук вот плохо. К тому же мы не можем выборочно настраивать пропускную способность и к нам будет ломиться толпа мужиков изо всех концов сети. Конечно,​ любой брандмауэр легко отсечет их, но это не решит всех проблем,​ самая главная из которых — наша маленькая приватная сеть становится видной извне и на очередном витке борьбы с пиратством ее могут прикрыть нехорошие дяди.
 +
 +Лучше использовать "​равноправные"​ файлообменные сети, обходящиеся без выделенных узлов, то есть работающие без сервера,​ например,​ GNUTELLA (http://​www.gnutella.com/​connect/​). Протокол давно расшифрован,​ куча клиентов распространяется вместе с исходными текстами на бесплатной основе. Слегка доработав их под собственные нужды мы получим отличное средство автоматизированного распределенного резервирования,​ после чего за сохранность наших данных можно будет не волноваться.
 +
 +Конечно,​ настоящие программисты могут не извращаться,​ подгоняя под себя уже существующий софт, а написать его самостоятельно. Подобных программ,​ насколько мне известно,​ еще нет и потому такая разработка может иметь неслабый успех, тем более что пропускная способность каналов связи растет день ото дня, тарифы на трафик дешевеют,​ а домашние локальные сети сегодня не тянет только ленивый. Словом,​ есть все условия для создания распределенных хранилищ данных,​ не хватает только специализированного программного обеспечения. Ну же, программисты! И чего мы сидим? Ждем пока Бил Гейтс не встроит эту возможность в новую Windows, лишая нас возможности заработать?​!
 +
 +{{distributed-storage_Image_3.jpg?​553}}
 +
 +Рисунок 4 рабочее место настоящего программиста
 +
 +===== ftp-серевер или BBS возрождаются =====
 +
 +Файлообменные системы оправдывают себя только в больших сетях. В сетях среднего размера,​ насчитывающих несколько десятков узлов, они довольно обременительны и для создания распределенного хранилища лучше всего использовать ftp-сервера.
 +
 +Начнем с того, что даже в равноправной сети не все узлы равноправны. Одни пользователи могут позволить себе держать компьютер включенным все дни и ночи напролет,​ другие — нет. Одни имеют емкие жесткие диски, мощный процессор и толстый канал, другие не имеют ничего. Файлообменные системы,​ уравнивают всех своих адептов в правах и 90% нагрузки ложиться на плечи 10% клиентов. Скажите,​ оно им надо? Никто не хочет тянуть за собой остальных,​ ничего не получая взамен. В крупных сетях ситуация нормализуется за счет естественного притока новых меценатов — бескорыстных парней,​ стремящихся сделать что-то хорошее в жизни, ничего не ожидая в замен, но со временем это стремление как правило проходит. Ведь как бывает?​ Помогаешь своим ближним,​ помогаешь,​ а они еще и нагадят. Ладно, не будем о грустном,​ перейдем к сути дела.
 +
 +Крупные узлы небольшой приватной сети могут поднять свои собственные ftp-сервера,​ открытые на upload и download, которые будут использовать все остальные пользователи. Это тоже самое распределенное хранилище,​ но в отличии от описанных выше, только работающее быстрее,​ да и надежнее. Мы можем резервировать данные только на те сервера,​ что имеют UPS, отказоустойчивый RAID-массив и прочие прелести. Поскольку,​ квоты на таких серверах как правило достаточно велики,​ никакой необходимости разбрасывать файлы по десяткам узлов уже нет, достаточно продублировать их дважды,​ ну на худой конец трижды. Никакой путаницы! Сплошная демократия!
 +
 +Остается решить один маленький вопрос — с какой стати кто-то будет держать ftp-сервера?​ Брать деньги нелепо,​ да и смысла нет. Не окупится. А на чистом энтузиазме далеко не уедешь… На самом деле, собственный ftp-сервер это лучший способ раздобыть редкую музыку/​фильмы/​варез. Что резервируют пользователи?​ Самые ценные файлы, которые жалко потерять и которые они с большим трудом откопали в сети (или купили за огромные деньги). И весь этот stuff они добровольно несут нам, только успевай подставлять карман,​ в смысле жесткий диск!!! Ну чем жизнь не малина?​ Давным-давно,​ когда Интернета еще не существовало,​ а софт считался общенародным достоянием (но собирать его приходилось буквально по битам),​ основными "​малинниками"​ были электронные доски они же BBS или проще говоря компьютер,​ с модемом,​ принимающий входящие звонки и складирующий закачиваемые файлы. Сисоп (системный оператор) отбирал самые вкусные файлы, а остальные отправлял в мусорную корзину.
 +
 +Так почему бы не возродить эту традицию,​ используя ftp-сервера для обмена файлами?​
 +
 +{{distributed-storage_Image_4.jpg?​553}}
 +
 +Рисунок 5 сообщество приватных ftp-серверов
 +
 +===== RAID массивы =====
 +
 +Что такое RAID-контроллер знает каждый (сейчас его можно купить в любом магазине). Грубо говоря,​ это такая штука, которая позволяет писать сразу на несколько дисков одновременно. Если на диски пишутся разные данные — скорость обмена пропорционально возрастает. Если дублируются те же самые данные — возрастает надежность. RAID-массив может быть как программным,​ так и аппаратным,​ а сами слагающие его носители не обязательно должны быть сосредоточены в одном месте. Чувствуете,​ куда я клоню?
 +
 +С точки зрения программного RAID-драйвера нет никакой разницы:​ подключен ли диск по SCSI/IDE интерфейсу или гоняет данные через Сеть. Объединив несколько логических дисков в виртуальный RAID-массив,​ мы получим отказоустойчивую систему — практичную и удобную. Мы можем использовать диски различной геометрии и даже различной емкости,​ причем никто не обязывает нас отводить под RAID-хранилище весь диск целиком! Достаточно выделить любую часть, которую мы только захотим.
 +
 +Как это можно реально использовать на практике?​ Первое,​ что приходит на ум, использовать часть емкости жестких дисков под хранение избыточной информации типа уже упомянутых кодов Рида-Соломона,​ помогающим восстановить данные в случае аварии. Тогда при относительно небольших накладных расходах мы сможем восстановить любой из жестких дисков членов сети даже при полном его разрушении лишь за счет одной избыточной информации,​ распределенной между остальными компьютерами. Более надежного хранилища для ваших данных нельзя и придумать! Подобная схема давным-давно реализована мыщъх'​ем в локальных сетях нескольких фирм и доказала свою живучесть,​ гибкость и надежность. Необходимость в постоянном ручном резервировании при этом отпадает,​ что для домашних пользователей более, чем актуально!
 +
 +Единственный минус программного RAID'​а – его невысокая производительность. В частности,​ поставив программный RAID на сервер,​ обрабатывающий тысячи запросов ежесекундно и интенсивно модифицирующий большое количество файлов,​ мы не выиграем ничего,​ но… ведь само понятие "​производительности"​ очень относительно и при достаточно быстром процессоре кодирование/​декодирование информации вполне реально осуществлять и на лету безо всяких потерь в пропускной способности! С другой стороны,​ если операции чтения доминируют над операциями записи,​ то ставить программный RAID сам Крестный Отец велел, поскольку контроль целостности считываемой информации осуществляется на "​железном"​ уровне самим приводом и при использовании систематического кодирования (т. е. информационные слова – отдельно,​ байты четности – отдельно),​ декодеру Рида-Соломона нет никакой нужды как-то вмешиваться в этот процесс и его помощь требуется лишь тогда, когда часть информации оказывается безнадежно разрушена,​ что случается прямо-таки скажем не часто. Так что, право же, не стоит перекармливать фирмы, специализирующие на выпуске аппаратных RAID'​ов,​ тем более, что на домашний и мелко-офисный рынок они все равно не обращают внимания.
 +
 +Варьируя размер блоков корректирующих блоков,​ мы получим лучшую или худшую защищенность при большей или меньшей избыточности информации. Действительно,​ пусть у нас есть N секторов на диске. Тогда, разбив их на блоки по 174 сектора в каждом и выделив 3 сектора для хранения контрольной суммы, мы сможем восстановить по меньшей мере N/174 секторов диска. Исходя из средней емкости диска в 100 Гб (что соответствует 209.715.200 секторам),​ мы сможем восстановить до 1.205.259 секторов даже при их полном физическом разрушении,​ затратив всего лишь 2% дискового пространства для хранения контрольных сумм. Согласитесь,​ что редкая "​сыпка"​ винчестера проходит столь стремительно,​ чтобы корректирующих способностей кода Рида-Соломона оказалась недостаточно для ее воскрешения (конечно,​ если эту сыпку вовремя заметить и если коэффициент чередования выбран правильно:​ так, что сектора,​ принадлежащие одному дисковому блину обслуживались бы разными корректирующими блоками,​ в противном случае при повреждении поверхности одного из блинов возникнет групповая ошибка,​ уже неисправимая данной программой).
 +
 +А как быть, если "​навернется"​ весь жесткий диск целиком?​ Наиболее разумный выход – создать массив из нескольких дисков,​ хранящих полезную информацию вперемешку с корректирующими кодами. Главный минус такого подхода – его неэффективность на массивах,​ состоящих из небольшого количества жестких дисков. Разумный минимум:​ четыре информационных диска и один контрольный,​ тогда потеря любого из информационных дисков компенсируется оставшихся в живых контрольным. Ну, а потерянный контрольный диск элементарным образом заменяется на новый, с последующим пересчетом всех контрольные кодов. Правда,​ одновременный выход двух дисков из строя – это кранты. Массив из пятнадцати дисков,​ двенадцать из которых – информационные,​ а оставшиеся три – контрольные,​ намного более отказоустойчив и допускает одновременный крах двух **любых** дисков,​ а при благоприятном стечении обстоятельств – и трех.
 +
 +Подробнее о кодах Рида-Соломона можно прочитать в моей книге "​техника защиты CD", фрагменты которой можно найти на ftp://​nezumi.org.ru,​ там же лежат исходные коды простейшего кодера/​декодера,​ который можно использовать для создания собственного RAID-драйвера.
 +
 +{{distributed-storage_Image_5.png?​536}}
 +
 +Рисунок 6 распределенный RAID-массив
 +
 +===== >>>​ что такое коды Рида-Соломона =====
 +
 +//Коды Рида-Соломона представляют собой недвоичные совершенные систематические линейные блочные коды, относящиеся к классу циклических кодов с числовым полем отличным от ////​GF////​(2) и являющиеся подмножеством кодов Боуза-Чоудхури-Хоквингема.////​Корректирующие способности кодов Рида-Соломна напрямую зависят от количества контрольных байт. Добавление ////​**r**////​ контрольных байт позволяют обнаруживать ////​**r**////​ произвольным образом искаженных байт, гарантированно восстанавливая ////​**r**////​**/​2**////​ байт из них.//
 +
 +===== заключение =====
 +
 +Мы рассмотрели только несколько типов распределенных резервных систем,​ а всего их… ну в общем много. И каждый день появится новые. Правда,​ пока только в виде идей. Готовых реализаций кот накакал,​ да и те большей частью основаны на уже существующих программах (вроде плагина для Осла). Так что не стоит сидеть сложа руки, ожидая что кто-то сделает это за вас! Как сказал Макс Руденко:​ "​дpугие тут вон че, и то ниче"​. А энтропия между прочим не спит…
 +
 +{{distributed-storage_Image_6.png?​294}}
 +
 +