Леонид М.
99 сообщений
#15 лет назад
Разьясните плиз, как писать скрипт при кластерном подходе (распределения нагрузке на серверах)?
Я так понимаю скрипт нужно разносить по разным серверам?
Немного читал,что есть разные типы... при одном каком-то можно использовать любой скрипт, но будет теряться IP клиентов.
Сейчас меня особо интересует, сайт писать как стандартный скрипт или нужно особая иерархия, если в дальнейшем будут юзать кластеры?
Николай Г.
601 сообщение
#15 лет назад
Принципиально варианта 2...
1) Берем самый обычный скрипт. Грубо говоря копипастим его на 2 сервера(но подвязываем к 1 и той же базе данных). И ставим простенький механизм, который запросы отправляет попеременно на первый либо на второй сервер... К слову, IP в данном случае совсем необязательно должны теряться.
Плюсы - можно использовать абсолютно обычные скрипты.
Минусы - потери производительности будут немаленькими.
2) Более правильный способ. Все "задачи" - тоесть шаблонизация, все вычисления и так далее, организовываются в виде демонов и связываются сокетами. Понятно, что это позволит безболезненно вынести эти демоны на разные машины.
А вообще, распределенные системы хорошо писать на Java, в этом языке много приятных вещей для таких целей...
Константинович С.
658 сообщений
#15 лет назад
MPI library
Дмитрий Д.
60 сообщений
#15 лет назад
sergannd_snz,
Хмм... позвольте поинтересоваться - а как Вы MPI библиотеку хотите заюзать для этого дела?
Я думаю скрипт - это не такая мощная вещь для обработки одновременно на нескольких машинах.
Вопрос тут случаем не в том ли, что просто огромное количество выполнений скрипта распределить равномерно на несколько узлов?
Константинович С.
658 сообщений
#15 лет назад
Помню так и делал с MPI library. может что не понимаю.
огромное количество выполнений скрипта
распределяется равномерно на несколько узлов.
узлов 1024, 2058....
Дмитрий Д.
60 сообщений
#15 лет назад
Не .... если есть пачка для выполнения одновременно - согласен. Берем и юзаем. А пачка для этого сначала должна как то компоноваться.
Причем аутпут от каждого скрипта должен будет быть переданным пользователю. Тогда каждый элемент пачки должен быть еще наделен определенным индексом, - чтобы не отдать аутпут одного - другому.

Или я не правильно понял?
Константинович С.
658 сообщений
#15 лет назад
"но подвязываем к 1 и той же базе данны" - кажется не пойдет. это примерно как и на общей "шине" 2**n процессоров.
еще python используется для распределенных вычислений.
Дмитрий Д.
60 сообщений
#15 лет назад
Цитата ("sergannd_snz"):
"но подвязываем к 1 и той же базе данны" - кажется не пойдет. это примерно как и на общей "шине" 2**n процессоров.
еще python используется для распределенных вычислений.


Вычислений - да. Но если у нас просто огромное количество посетителей и обычный сервер не справляется, причем скрипты там обращаются к БД, а собственно их выполнение в каждом случае занимает меньше чем стартап MPI скажем раза в два?
То что БД должна быть распределённой с механизмом деления нагрузки - бесспорно. То, что должен быть механизм, который равномерно распределяет нагрузку между кластерными машинами - бесспорно.
Но вот MPI, который сразу на всех пускает задачу? И тем более все равно все сначала в этой схеме идет на главный узел, а от туда библиотекой.... не так?
Константинович С.
658 сообщений
#15 лет назад
Вычислений или обработка данных или приложения не принципиально.
Все так - все раскидать надо. Кластеры не одно приложение (посетителей) обрабатывают.
Тема серьезная - Сарову 2 млрд. рублей на эт выделили.
Дмитрий Д.
60 сообщений
#15 лет назад
Раскидать то надо...))) Не вопрос, просто меня смутило использование библиотеки MPI в этом деле.
А вот про то, что родному городу столько выделил - спасибо, просвятился
Константинович С.
658 сообщений
#15 лет назад
Использование библиотеки MPI --- может и не подходит, я и не настаиваю
что про родной город информации нет? здесь все все знают
Евгений О.
263 сообщения
#15 лет назад
Цитата ("ex3mer"):
...Но если у нас просто огромное количество посетителей и обычный сервер не справляется, причем скрипты там обращаются к БД, а собственно их выполнение в каждом случае занимает меньше чем стартап MPI скажем раза в два?


Вам бы надо сначала решить почему обычный сервер не справляется с нагрузкой: или потому что посетителей слишком много (будь посетитель всего один - сервер бы справлялся) или потому что даже один посетитель создает такую нагрузку, что сервер не справляется. Ответ на этот вопрос определяет стратегию решения Вашей задачи.

Цитата ("ex3mer"):
То что БД должна быть распределённой с механизмом деления нагрузки - бесспорно.


Не так уж и бесспорно, но если так, то посмотрите на MySQL Cluster.

Цитата ("ex3mer"):
То, что должен быть механизм, который равномерно распределяет нагрузку между кластерными машинами - бесспорно.


В случае, если у Вас слишком много посетителей, то да, бесспорно. К Вашим услугам: "железные" балансировщики нагрузки, программные решения (напр. nginx - если хочется "поддержать отечественного производителя" или просто балансировка при помощи DNS (балансирует не совсем равномерно, зато дешево).

Цитата ("ex3mer"):
Но вот MPI, который сразу на всех пускает задачу?


А вот это Вам надо если Ваш сервер не справляется с обработкой даже одного посетителя. Например, вы подбираете ключи к шифрам, строите метеопрогнозы в реальном времени, играете в шахматы. Если так, то прежде чем что-то разделять и распределять по элементам кластера, Вам надо спроектировать механизм синхронизации данных между элементами. В общем, там много чего интересного, это тема для отдельной дискуссии.
Дмитрий Д.
60 сообщений
#15 лет назад
Illarion_SA,
А Вы такие сервисы знаете, в которых задача для одного посетителя кидается именно на кластер в силу своей "тяжести"?
Константинович С.
658 сообщений
#15 лет назад
Тема на 2 млрд. р.
Евгений О.
263 сообщения
#15 лет назад
Цитата ("ex3mer"):
...А Вы такие сервисы знаете, в которых задача для одного посетителя кидается именно на кластер в силу своей "тяжести"?

Можно посмотреть, что предоставляет Amazon в рамках своего elastic computing и прочих инициатив. Наверняка, есть и другие сервисы, но меньшего масштаба - надо поработать с Google.

Несколько лет тому назад был проект поиска сигналов внеземных цивилизаций на машинах добровольцев SETI@home - они бесплатно предоставляли все программное обеспечение для распределенных вычислений. Наверняка есть еще множество как платных, так и бесплатных пакетов для организации таких работ - на их основе вполне можно создать и свой собственный сервис.
Леонид М.
99 сообщений
#15 лет назад
То что процессы распределять то понятно...
Ситуация такая, именно если сайт чисто информационный, одна страница читает запись из БД 1 запрос, как такой сайт распределять?? как базу распределять?? (одна база не катит!)
Ведь даже такой сайт при определенном кол-ве пользователей никакой сервер не потянет, нужно будет несколько, как реализовать в теории?
Евгений О.
263 сообщения
#15 лет назад
Цитата ("moiseev"):
.. Ситуация такая, именно если сайт чисто информационный, одна страница читает запись из БД 1 запрос, как такой сайт распределять?? как базу распределять?? (одна база не катит!)


На самом деле, все не так ужасно. Вы определяете максимальное время обработки одного запроса на не загруженном сайте. Если это время превосходит допустимое время ожидания ответа пользователем, то оптимизируете пропускную способность сайта по отношению к одиночному запросу: пересматриваете алгоритмы, размещаете БД в памяти, ставите сверх-быстроходные процессоры, сервера архитектуры RISC и т.д. Напоследок, применяете CDN.

Если время обработки одиночного запроса меньше максимально допустимого для одного пользователя, то оптимизируете аржитектуру Вашей системы относительно конкурирующих запросов: оптимизируете конфигурацию Апача (об этом часто забывают или често не знают), ставите балансировщик нагрузки и несколько серверов с Апачем работающих на общую БД, далее реплицируете БД на несколько серверов и балансируете запросы к БД, далее ставите MySQL Cluster, далее размещаете это все на CDN, ну и конечно, для начала, ставите быстроходные диски, RAID'ы разных уровней, кэши в памяти и т.д. В общем, без работы Вы не останетесь, главное, чтобы у Вашего заказчика не кончились деньги.

Цитата ("moiseev"):
Ведь даже такой сайт при определенном кол-ве пользователей никакой сервер не потянет, нужно будет несколько, как реализовать в теории?


Как реализовать "в теории" я сказать затрудняюсь, как реализовывается на практике - я попытался описать выше. Для сведения: одна страница сайта, в ней один запрос к БД MySQL если написать это на perl то без всякой оптимизации обеспечивается 100-150 запросов одновременно. Не помню, сколько запросов в сутки обслуживает Google, но и этих величин вполне можно достичь - это, в основном, вопрос денег.