Как сделать сервер расчетов
Многое зависит от того, каким образом сейчас общаются между собой оболочка и решатель.
CGI
просто через текстовые файлы общаются, но можно и переделать
tcp, rpc/rmi, mq(zeromq,rabbitmq web services (jaxws finagle, thrift
В вашем конкретном случае быстрее всего на чистых сокетах будет написать, думаю.
А как происходит запуск решателя и определение момента окончания его работы?
просто напиши вебсервер на PHP
В вашем конкретном случае быстрее всего на чистых сокетах будет написать, думаю.Быстрее всего будет поднять HTTP сервер и набросать скрипты на PHP как указал forbidden
Как я понял, используется винда. Можно запускать программы удаленно через PowerShell. Для настройки сервера требуются тайные windows знания.
я не увидел слова soap?
Это работает: за два дня с помощью stack overflow написал простейшую систему, которая сейчас гоняет вычисления на дюжине машин, при том, что в питоне был не ахти
Спасибо, тоже смотрел в сторону питона - попробую, если что поспрашиваю
tcp, rpc/rmi, mq(zeromq,rabbitmq web services (jaxws finagle, thrift
CGI
просто напиши вебсервер на PHP
soap
multithreaded tcp python server и библиотеку requests.
Я правильно понимаю, что если не винда, то достаточно ssh?
Спасибо Гейтсу за весь вышеперечисленный мусор.
Вопрос только в том, насколько хрупкий солюшен ты хочешь получить.
Через ssh можно конечно что-нибудь простенькое сделать, но как я понимаю тут другой случай (есть клиенты, видимо каждый со своим ключом, лимит job-ов на одного клиента, и т.д.). Ну и решение через ssh на несколько машин не расширяется.
и решение через ssh на несколько машин не расширяется.Why?
От простейшего roundrobbin DNS
До более тонких решений:
http://greg.porter.name/wordpress/?p=83
Если же вопрос в раскидывании приходящих задач по нескольким машинам — то тут вопрос, скорее, к механизму самой "считалки".
есть клиенты, видимо каждый со своим ключомЗаводишь каждому клиенту отдельного пользователя, можно сделать и одного общего пользователя на всех с несколькими ключами.
лимит job-ов на одного клиента, и т.д.Ставишь пользователю, созданному на предыдущем этапе, в качестве шелла программу, которая понимает одну команду - запустить задачу. Эта программа перед запуском должна делать все необходимые проверки.
> результат расчета десятки килобайт,
> расчет проводится пару минут на одном процессоре.
Пока они тут обсуждают странные методы, я всё же хотел бы узнать,
в чём проблема передать всё это через POST и выложить результат
на отдельной страничке?
---
"Прогресс науки обратно пропорционален числу выходящих журналов."
Ставишь пользователю, созданному на предыдущем этапе, в качестве шелла программу, которая понимает одну командуПрограмму надо написать, как я понимаю. По трудозатратам и надежности это будет не лучше решения с HTTP ручкой и скриптом на python/PHP/whatever, которое тут все предлагают. Фактически ты предлагаешь заменить HTTP на SSH.
Пока они тут обсуждают странные методы, я всё же хотел бы узнать,Во-первых, я не хочу добавлять http клиент в оболочку решателя.
в чём проблема передать всё это через POST и выложить результат
на отдельной страничке?
Во-вторых, я не хочу устанавливать и администрировать вебсервер с PHP или питоном.
Ставишь пользователю, созданному на предыдущем этапе, в качестве шелла программу, которая понимает одну команду - запустить задачу. Эта программа перед запуском должна делать все необходимые проверки.Если никаких проверок не требуется, то можно установить в качестве шелла сам решатель.
у добавлять http клиент в оболочку решателя.Решатель - exe файл, Оболочка для клиента написана на Delphi. Можно поподробнее Ваше решение. Спасибо.
Во-вторых, я не хочу устанавливать и администрировать вебсервер с PHP или питоном.
addict
Рег.: 23.11.2007
Сообщений: 666
Рейтинг: 90
Re: Как сделать сервер расчетов [re: ]
05.02.2015 19:11
В ответ на:
Ставишь пользователю, созданному на предыдущем этапе, в качестве шелла программу, которая понимает одну команду - запустить задачу. Эта программа перед запуском должна делать все необходимые проверки.
Если никаких проверок не требуется, то можно установить в качестве шелла сам решатель.
Решатель - exe файл, Оболочка для клиента написана на Delphi. Можно поподробнее Ваше решение. Спасибо.Примерное решение, точнее скажет программист на windows
1)Учим решатель читать данные из стандартного входного потока, а не только указанного файла.
2)Создаем на сервере специального пользователя, из-под которого будет запускаться программа.
3)Устанавливаем на сервер решатель.
4)Включаем PSRemoting - стандартное средство windows для запуска программ на удаленном компьютере.
http://technet.microsoft.com/en-us/library/hh849694.aspx
5)Как я понимаю, сейчас оболочка решателя запускает сам решатель - exe программу.
Надо, чтобы она запускала такую команду (очень приблизительно).
PowerShell.exe -Command "invoke-command --ConnectionUri http://myserver.ru:5432 -ScriptBlock { reshatel.exe }"
http://technet.microsoft.com/en-us/library/hh849719.aspx
В stdin процессу пишем данные.
ты, по сути, дашь удаленный доступ на свою машину своим клиентам. т.е. тебе придется париться об ограничении прав и т.п. и если ты где-нибудь ошибешься или не дочитаешь спеку, то клиент сможет делать на твоей машине все, что ему в голову придет
+ сбой на канале связи и ты надо перезапускать заново
сделай как контра говорил и не парься
присоединясь, форбидден, леонард и Контра дело говорят - надо поднять веб-сервер и написать скрипты, которые будут методом POST принимать данные и отправлять результаты.
например, если я правильно понял как это в винде устроено, то замена
PowerShell.exe -Command "invoke-command --ConnectionUri http://myserver.ru:5432 -ScriptBlock { reshatel.exe }"
на
PowerShell.exe -Command "invoke-command --ConnectionUri http://myserver.ru:5432 -ScriptBlock { type reshatel.exe }"
просто отдаст твой решатель
Разумеется, этот подход в винде не очень традиционен,
сам автор признаёт, что это калька с уникса, но это вопрос
однократной настройки. По сути, ты утверждаешь, что если
в inetd.conf вставить лишний "/bin/cat", то ты будешь
отдавать программу, а не запускать её. Так это и без того
понятно, "не делай так."
---
A44: Ламеры в гамаке пусть в тапках трахаются --- это их проблемы.
Я в своём гамаке хочу полноценно трахаться на лыжах.
Эта строка запускается на клиенте, а не на сервере.
Так можно вместо "reshatel.exe" и "rm -rf /" написать.
---
Q6: Я слышал есть такой мужик, вроде Бармин зовут, и он
придумал что-то такое после чего XXX не сосет.
А, ну тогда это действительно говно.Во-первых, ты не напишешь rm -rf из-под обычного пользователя.
Так можно вместо "reshatel.exe" и "rm -rf /" написать.
Во-вторых, в powershell есть возможность restricted sessions, в которых есть только заранее предопределенный набор действий.
В случае с PHP решением неясно, как делать аутентификацию. Мое решение хорошо тем, что не надо модифицировать оболочку - при попытке выполнить команду удаленно у тебя вылезет системное windows окно с запросом credentials. В случае, если все машины в одном домене, то из коробки будет работать single sign on.
Напишешь-напишешь. То, что удалятся данные только этого пользователя,
ничем не лучше удаления всей системы.
> Во-вторых, в powershell есть возможность restricted sessions,
> в которых есть только заранее предопределенный набор действий.
CGI и аналоги (если написаны без дыр) выполняют только то, что задано.
> В случае с PHP решением неясно, как делать аутентификацию.
HTTP её поддерживает изначально.
> Мое решение хорошо тем, что не надо модифицировать оболочку -
> при попытке выполнить команду удаленно у тебя вылезет системное
> windows окно с запросом credentials. В случае, если все машины
> в одном домене, то из коробки будет работать single sign on.
Если правильно настроить, то и в униксах HTTP не будет пароль
спрашивать, так как будет работать тот же самый "single sign-on,"
что и в винде, так как цербер в винде такой же.
---
A39: Сдуру можно много чего сломать
HTTP её поддерживает изначально.Как минимум, тебе придется закодировать в оболочке решателя форму ввода логина/пароля, их кэширование, чтобы не надо было вводить на каждый запуск решателя.
у тебя вылезет системное windows окно с запросом credentialsништяк, еще и пароли поподбирать можно будет
Во-вторых, в powershell есть возможность restricted sessions, в которых есть только заранее предопределенный набор действий.
ну-да... настройки, настройки, найтройки
ЗЫ что предлагаешь делать с обрывами связи во время активной сессии?
ЗЫ что предлагаешь делать с обрывами связи во время активной сессии?В простейшем случае, делать реконнект и пускать задачу повторно. В более сложном случае, у powershell есть сессии, которые живут на сервере при обрыве соединения (как GNU screen).
А в чем принципиальная разница по сравнению с http? Как ты в http будешь обрабатывать обрывы?
Лучше, конечно, http - тогда появляется стандартизованный стык между клиентом и сервером, что позволяет менять клиента, не трогая сервер.
в http нечему рваться: 1 запрос на постановку потом проверяешь доступность результатов
ты предлагаешь stateful api, что само по себе тоже не подарок.
ты предлагаешь stateful api, что само по себе тоже не подарок.
да вроде не особо
проверяем появился ли файл с результатами или нет
чистить правда еще надо будет, но тут крон спасет )
Оставить комментарий
tel7432545
Всем привет, подскажите, кто знает.Есть приложение, состоящее из оболочки и решателя. Хочется решатель запускать на сервере, обращаясь туда через интернет из оболочки. При запуске передается пара килобайт параметров, результат расчета десятки килобайт, расчет проводится пару минут на одном процессоре. Решатель написан на java или может запускаться как exe шник. Объемы расчетов не более 5 одновременных заданий от разных клиентов.
С помощью каких технологий можно просто это реализовать?
На что обратить внимание при развертывании сервера?
Спасибо за помощь