Распределенное приложение

Илья2

Guest
Распределенное приложение

Тема о клиент/серверном php, напомнила мне одну идею которую я некоторое время назад рассматривал.

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

также представим вход и выход в ввиде очереди этих самых элементов информации, которые с одной стороны являются входными а с другой - выходными.

пусть есть 3 подзадачи: пз1, пз2, пз3

очередь01 -> [пз1] -> очередь12 -> [пз2] -> очередь23 -> [пз3] -> очередь30

"очередь01" значит вход идет из наружи и попадает на 1-ый испольнительный участок.

т.е. допустим что эти самые [пз] можно выполнять на 3-х машинах, каждая из которых может находится в одном из состоянии, т.е. работает в режиме пз1 или пз2 или пз3.

Очереди доступны для всех машин эквивалентно.

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

допусти поставлены условия что очень большая загрузка (очередь01) конечно можно решить это добавлением новых машин для пз1. но в ведь можно переключать машины 2 и 3 в решим работы пз1, и после уменьшения нагрузки переключать на другие работы.

т.е. допустим что нагрузка зависит от времени суток - днем большая - ночью маленькая.

т.е. необходим менеджер который следит за размером очередей, и у которого есть приоритеты этих очередей, и который может переключать машины в разные режимы работы.

В общем мне интересно интересна ли эта задача кому-нибудь :)

Конечно можно рассмотреть эти процессы (пз) в рамках одной машины, тогда можно ввести менеджер глобальный (на уровне машин-узлов), менеджер локальный (на уровне процессов-нитей).

И количество подзадачь конечно же может быть больше 3-х.

практический пример - email-parsing система, пз1 - получение писем, пз2 обработка писем по какой-либо логике, пз3 - посылка результатов.

Илья
 

young

Новичок
Задача интересная, но имхо PHP не для нее :)


Хотя плац ломиками подметают :)
 

Илья2

Guest
ну тут вопрос не сколько в PHP а сколько в создании протокола обмена и решение этой задачи посредством объектно-ориентированной декомпозиции :), при этом "обернуть" низкоуровневые функции (PHP) в классы, которые можно реализовать на других языках, не меняя при этом интерфейса.

например протокол обмена м-у узлами можно имплементировать либо email сообщениями, либо HTTP-POST протоколом, либо через сокеты.

просто PHP выигрывает с точки зрения распространенности.
 

tony2001

TeaM PHPClub
>Хотя плац ломиками подметают
да, это примерно из этой области =)
к РНР - никакого отношения.
 

tony2001

TeaM PHPClub
>просто PHP выигрывает с точки зрения распространенности.
у кого?
у С?
или у С++?
РНР не предназначен для написания подобных решений.
 

young

Новичок
А на чем бы их стоило писАть?

В c++ я не силен, хотя владею...
Php он прост и функционален, но я согласен что это не для него.

Так на чем?! Java?!
 

andry

Новичок
Эта задача, ИМХО, неплохо подходит под функциональное программирование. Нечто "подобное" писали наши ребята из института, так называемая Т-система она "реализует принцип автоматического динамического распараллеливания программ за счет использования функциональной парадигмы (программы для Т-системы определяют набор чистых--без побочного эффекта--функций) и особой модели вычисления функциональных программ: процесс вычисления--это процесс автотрансформации вычислительной сети". Эта система образует что-то вроде кластера для параллельных вычислений.

"выход одной подзадачи попадает на вход последующей" - прям парадигма функционального программирования.
 

Screjet

Новичок
В ПХП нехватает многопоточности (threads), но они-то особенно и не нужны..
Ктото задумывался: "где могут быть такие задачи?"..
я пока "многозадачным задачам" (осн.
PHP:
fork()
) нашел применение только в роботах - для обработки нескольких соединений в один момент времени..
Если есть идеи, расскажите..
 

young

Новичок
Применение многозадачности есть, их много.
То что в php ее нет - используйте Linux.

кто мешаем запустить в среде Linux на 20 машинах по 20 процессов, главное что бы они правильно взаимодействовали

И главное, никто не требует что бы все 100% клиентов были написаны на php, половина их них может быть хоть на c++ хоть на java, главное что бы протокол общения был общий!
 

Screjet

Новичок
Речь не о протоколе.. XML - вот тебе универсальный протокол на все случаи жизни.
Многозадачный ПХП - немного страшноват :)
один процесс в памяти занимает 3-5мб, и fork()'нуть на машине с 512мб удастса 100-170 процессов..
Народ! Что можно сделать, чтоб сократить расходы памяти ПХП?
 

sokol

Zavolga.Net
2Screjet:
Еклмнопрст...
Почитай что такое WDDX, а потом предлагай XML. Скажу сразу WDDX использует XML, только ф-ии самому писать не придется, все уже за тебя написано. См. Ф-ии WDDX.

>Народ! Что можно сделать, чтоб сократить расходы памяти ПХП?
Писать грамотнее. 3-5 мб, ну это ты по моему загнул.
 

Илья2

Guest
> один процесс в памяти занимает 3-5мб, и fork()'нуть на
> машине с 512мб удастса 100-170 процессов..

ну это если в лоб решать задачу (start-appication-per-request), я бы вот как раз хотел бы "поумному" подойти :)

т.е. что-то вроде appication-pool (в Java такое насколько я знаю есть), да и сам apache работает по этому принципу, т.е. в памяти запущено (все время) несколько приложений (не одно), есть один менеджер который распределяет задачи этим приложениям (по какой-либо логике), больше определенного количества их нельзя запустить. Все что не обрабатывается попадает в "очередь", т.е. например у каждого запущенного приложения есть своя "очередь", и менеджер распределяет задания по этим "очередям", также у ентого менеджера есть "входная очередь". "очередь" это как бы "буфер".

в общем эта задача относится больше к "решение на досуге", ее решение я рассматриваю как тренировка для мыслительного аппарата :)
да и скорее всего она уже решена :)
 
Сверху