Привет!

Дискламбер - трава у нас бывает разная, кому не нравится - не нюхайте.

Некоторые осведомленные люди (типа Джима Старки) в своих мемуарах
писали, что interbase был изначально придуман как сервер для
кластеров. Так как у некоторых товарищей до сих пор существуют или
абсолютно невнятные представления о том, что такое кластеры и с чем их
едят, или отсутствуют такие представления вообще, я и затеял эту ветку.

Я не буду тут сыпать определениями (кому надо - погуглит), а просто
расскажу о том, что такое кластеры, с чем их едят и какая от этого
польза для БД.

Итак, кластер - это группа компьютеров, которые работают совместно над
какой-нибудь общей задачей. В некоторых случаях, кластером могут
называть группу кластеров. Звучит немного рекурсивно, но это так.
Есть много типов кластеров, но нас интересуют только три:

1) отказоустойчивые кластеры (High-availability clusters, HAC)
2) кластеры с балансировкой нагрузки (Load balancing clusters, LBC)
3) высокопроизводительные кластеры (High-performance clusters, HPC)

(кому хочется подробностей - http://ru.wikipedia.org/wiki/Кластер а
оттуда на кластер в виде группы компьютеров).

Как обычно, нам бы таблетку от жадности, да побольше: все хотят и
отказоустойчивый, и чтобы нагрузку сам распределял и работал
быстро-быстро, быстрее чем Крэй (есть такие миленькие машинки с 5-6к
процессоров, общей памятью в пару терабайт и неразглашаемой
стоимостью). При этом, все, кто краем уха слышал что-то о кластерах,
считает, что это решение всех проблем - "Давайте водрузим нашу прогу
на кластер и оно за нас работать будет быстрее". Должен вас очень
сильно огорчить - это далеко не так. И я даже не буду говорить о том,
что доставить, настроить и обслуживать такого монстра ой как тяжко.
SUN Microsystems вам доставит свой суперкомпьютер о 72 головах (каждая
голова может быть 6-ти ядерной и более) в любую точку мира в течение
месяца. И даже настроит - "бесплатно". Но вы все равно не купите :)

Если кратко, то отказоустойчивый кластер является таковым за счет
того, что "в случае чего" в строй вступают запасные узлы. Но при этом
чудес не бывает - если узел чего-то там насчитал клиенту, но не успел
отдать и упал - то клиент ничего не получит. Но если обратится еще раз
- то все будет "клева". Сами попробуйте ответить, подходит ли вам это
при работе с БД. Да, на всех машинах-узлах файл БД как буд-то бы один
и тот же - специальный драйвер ФС делает всю работу по реальной записи
файла прозрачной для приложения. Если сказать кратко -
то это как зеркальный RAID. Только если в RAID не практикуется делать
1000 дисков в зеркале, то тут вполне себе возможно, все зависит от
потребностей задачи.

На основе модели, которая описана выше, не очень сложно представить себе,
как работает кластер с балансировкой нагрузки - так как все узлы
являются "зеркалами" друг друга, то можно Васе отдать на растерзание
узел А, а Маше - узел Б и все будут довольны (ну кроме менеджера
кластера, которому придется это все дело синхронизировать, лочить и
заниматься всякими остальными извращениями). Говорят, что некоторые БД
умеют делать такие извращения. Только чудес, как я уже говорил, не
бывает. Представляете себе, что будет, если 2 ноды "упадут" в то время как
пользователи интенсивно меняют данные? Веселуха разбираться в той каше,
которая получится, будет еще та. А бэкапы, как известно, это удел
трУсов. Бугага (у Коваленко другой бугага, поэтому его копирайты не
ставлю).

Третий тип кластеров к БД вообще никакого отношения не имеет. Это
числодробилки. Вы забыли свой 18 символьный пароль? Тогда вам сюда.
Хотите умножить матрицы 10000х10000 между собой? Пожалста,
резервируйте время - где-то была инфа, что стоит около 10 центов час.
Одного процессора. При покупке от недели и больше - скидки. Знакомый
физик ездил в Швейцарию считать осаждение чего-то там (вроде атомов
металлов) на различные поверхности. Считали взаимодействие 10
миллионов атомов или что-то около того. Крей пожужжал немного и
выплюнул им пару двд данных - они их потом чуть ли не два года
изучали. Более того, для этих числодробилок и проги надо писать
соответственно - с учетом MPI API.

Есть конечно альтернатива "классическому" HPC - MOSIX (http://www.mosix.org/) 
Для
академических нужд бесплатно, для коммерческого использования что-то
около 1к баксов на 10 узлов - копейки по сути дела. Представляет из
себя патч для Линуха (виндузятники багровеют от зависти, я знаю
сколько стоит дата-центр у мелкомягких), который позволяет 10-20-100
компов или кластеров (да-да, рекурсия) превратить как бы в один
суперкомпьютер - у которого много процессоров. Вру. С точки зрения
приложения это даже не важно много или один - многие программы запускаются 
нативно и
ничего не замечают - это проблемы менеджера кластера, как выделить
память и процессорное время задаче. Как только я познакомился с MOSIX
тут же загорелся идеей. Потом понял, что все же есть подвох. Общей
памяти нету. (Понятно почему классик держит все локи в файле? ;-) )
Если прога использует удаленные сокеты - то она не мигрируется. Треды
на разные машины не раскидываются. Ну и куча прочих ограничений.
Т.е. в бочке меда есть пару ложек дегтя.

Что, думаете все, вешалка и надо завернуться в белую простынь? Не
дождетесь. А вот что можно сделать в плане применения к БД, я
постараюсь рассказать чуть позже - если общественность выразит свое
мнение по поводу всего вышенаписанного и скажет, для чего им все-таки
нужен кластер - чтобы не падало, быстрее работало или все вместе?
  

-- 
Best regards,
 Sergey                          mailto:[EMAIL PROTECTED]


Ответить