Есть постоянно работающий сервер приложений (FW3.5), у которого хотелось бы поменять какую-то функциональность.
В идеале хотелось бы аналога встроенных процедур на SQL сервере — поменял на лету текст и все.
Мне приходит в голову только грузить сборку с бизнес логикой через reflection и по необходимости выгружать и менять dll, потом загружать обратно. Может быть есть лучший способ?
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Здравствуйте, Sshur, Вы писали:
S>В идеале хотелось бы аналога встроенных процедур на SQL сервере — поменял на лету текст и все. S>Мне приходит в голову только грузить сборку с бизнес логикой через reflection и по необходимости выгружать и менять dll, потом загружать обратно.
Так просто без приседаний выгружать не получится.
S>Может быть есть лучший способ?
Можно по аналогии с теми же хранимками использовать внутренний скриптовый язык.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Sshur, Вы писали:
S>>В идеале хотелось бы аналога встроенных процедур на SQL сервере — поменял на лету текст и все. S>>Мне приходит в голову только грузить сборку с бизнес логикой через reflection и по необходимости выгружать и менять dll, потом загружать обратно.
L>Так просто без приседаний выгружать не получится.
S>>Может быть есть лучший способ?
L>Можно по аналогии с теми же хранимками использовать внутренний скриптовый язык.
Здравствуйте, Aen Sidhe, Вы писали:
L>>Так просто без приседаний выгружать не получится.
S>>>Может быть есть лучший способ?
L>>Можно по аналогии с теми же хранимками использовать внутренний скриптовый язык.
AS>Да выгрузить домен, да и всё. Как IIS делает.
Это уже приседания, причем достаточно активные, т.к. вам еще нужно будет убедиться, что все используемые вами объекты либо маршалбайрефы, либо сериализуемы и не меняются принимающей стороной.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Aen Sidhe, Вы писали:
L>>>Так просто без приседаний выгружать не получится.
S>>>>Может быть есть лучший способ?
L>>>Можно по аналогии с теми же хранимками использовать внутренний скриптовый язык.
AS>>Да выгрузить домен, да и всё. Как IIS делает.
L>Это уже приседания, причем достаточно активные, т.к. вам еще нужно будет убедиться, что все используемые вами объекты либо маршалбайрефы, либо сериализуемы и не меняются принимающей стороной.
IIS почти ничего не маршалит. Старые запросы обрабатываются старым доменом, после чего домен прибивается. Новые запросы идут в новый домен.
L>Хотя скриптовый язык тоже не сахар. Счастья нет.
Здравствуйте, Aen Sidhe, Вы писали:
L>>Это уже приседания, причем достаточно активные, т.к. вам еще нужно будет убедиться, что все используемые вами объекты либо маршалбайрефы, либо сериализуемы и не меняются принимающей стороной.
AS>IIS почти ничего не маршалит. Старые запросы обрабатываются старым доменом, после чего домен прибивается. Новые запросы идут в новый домен.
Судя по формулировке "поменять какую-то функциональность", топикстартеру не очень подходит вариант с выгрузкой домена целиком, т.к. в это случае будет меняться вся функциональность.
S>Есть постоянно работающий сервер приложений (FW3.5), у которого хотелось бы поменять какую-то функциональность. S>В идеале хотелось бы аналога встроенных процедур на SQL сервере — поменял на лету текст и все. S>Мне приходит в голову только грузить сборку с бизнес логикой через reflection и по необходимости выгружать и менять dll, потом загружать обратно. Может быть есть лучший способ?
используй агенты для логики которую надо на горячую менять.
Можно приседать с app domain: видео от Ayenda
но подход с агентами я считаю лучше.
S>Есть постоянно работающий сервер приложений (FW3.5), у которого хотелось бы поменять какую-то функциональность.
А что делает "постоянно работающий сервер приложений"?
Если он обрабатывает запросы + просыпается по таймеру, то его вполне можно захостить на IIS и пусть IIS парится с загрузкой-выгрузкой сборок.
S>В идеале хотелось бы аналога встроенных процедур на SQL сервере — поменял на лету текст и все.
Динамическая компиляция на IIS решает, только в medium trust такое сам не сделаешь.
S>Мне приходит в голову только грузить сборку с бизнес логикой через reflection и по необходимости выгружать и менять dll, потом загружать обратно. Может быть есть лучший способ?
Выгружать сборки нельзя, можно только домен выгрузить.
Здравствуйте, Sshur, Вы писали:
S>Есть постоянно работающий сервер приложений (FW3.5), у которого хотелось бы поменять какую-то функциональность.
А просто "в лоб" решить, не? Повесить отдельный сервис, который следит за обновлениями и выкачивает. Потом останавливает сервис, перезаписывает модули (причём с возможностью обновить ВСЁ), затем опять запускает. Дай бог это займёт секунду.
Re[4]: "горячая" замена бизнес-логики на сервере
От:
Аноним
Дата:
24.11.10 08:47
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Aen Sidhe, Вы писали:
L>>>Так просто без приседаний выгружать не получится.
S>>>>Может быть есть лучший способ?
L>>>Можно по аналогии с теми же хранимками использовать внутренний скриптовый язык.
AS>>Да выгрузить домен, да и всё. Как IIS делает.
L>Это уже приседания, причем достаточно активные, т.к. вам еще нужно будет убедиться, что все используемые вами объекты либо маршалбайрефы, либо сериализуемы и не меняются принимающей стороной.
L>Хотя скриптовый язык тоже не сахар. Счастья нет.
А что если держать на горячей замене вторую виртуальную машину с новой логикой? Мне знакомый рассказывал как серваки HP стоимостью 10M $ можно из калаша пострелять, а юзеры даже не заметят.
Т.е. средствами сисадмина меняем маршрутизацию с одной машины на другую и готово.. Способ мне и самому кажется странным, но как вариант для МозгоШтурма.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, Sshur, Вы писали:
S>>Добрый день!
S>>Есть постоянно работающий сервер приложений (FW3.5), у которого хотелось бы поменять какую-то функциональность. G>А что делает "постоянно работающий сервер приложений"? G>Если он обрабатывает запросы + просыпается по таймеру, то его вполне можно захостить на IIS и пусть IIS парится с загрузкой-выгрузкой сборок.
Ну планируется общение с клиентскими машинами либо по ремоутингу либо по WCF. В принципе да, он обрабатывает запросы + просыпается по таймеру. Но он точно не stateless.
S>>В идеале хотелось бы аналога встроенных процедур на SQL сервере — поменял на лету текст и все. G>Динамическая компиляция на IIS решает, только в medium trust такое сам не сделаешь.
S>>Мне приходит в голову только грузить сборку с бизнес логикой через reflection и по необходимости выгружать и менять dll, потом загружать обратно. Может быть есть лучший способ? G>Выгружать сборки нельзя, можно только домен выгрузить.
Надо покопать в сторону доменов
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Здравствуйте, Sshur, Вы писали:
S>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, Sshur, Вы писали:
S>>>Добрый день!
S>>>Есть постоянно работающий сервер приложений (FW3.5), у которого хотелось бы поменять какую-то функциональность. G>>А что делает "постоянно работающий сервер приложений"? G>>Если он обрабатывает запросы + просыпается по таймеру, то его вполне можно захостить на IIS и пусть IIS парится с загрузкой-выгрузкой сборок.
S>Ну планируется общение с клиентскими машинами либо по ремоутингу либо по WCF.
И то и другое может быть выставлено endpoint_ами на IIS.
S>В принципе да, он обрабатывает запросы + просыпается по таймеру. Но он точно не stateless.
Без разницы, все равно у тебя состояние должно быть внешним, ибо даже 24/7 не означает что процесс будет постоянно работать.
S>>>Мне приходит в голову только грузить сборку с бизнес логикой через reflection и по необходимости выгружать и менять dll, потом загружать обратно. Может быть есть лучший способ? G>>Выгружать сборки нельзя, можно только домен выгрузить. S>Надо покопать в сторону доменов
Не надо, используй IIS.
Здравствуйте, gandjustas, Вы писали:
S>>В принципе да, он обрабатывает запросы + просыпается по таймеру. Но он точно не stateless. G>Без разницы, все равно у тебя состояние должно быть внешним, ибо даже 24/7 не означает что процесс будет постоянно работать.
Как так? Именно 24/7 и процесс работает всегда. За исключением простоев во время сбоев.
Внешнее состояние — можно сделать 2 связанных сервиса, один будет данные держать, а другой логику. В принципе тогда и перезапускать можно сколько угодно.
S>>Надо покопать в сторону доменов G>Не надо, используй IIS.
Ну и в сторону IIS надо покопать)
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, Sshur, Вы писали:
S>>Есть постоянно работающий сервер приложений (FW3.5), у которого хотелось бы поменять какую-то функциональность.
M>А просто "в лоб" решить, не? Повесить отдельный сервис, который следит за обновлениями и выкачивает. Потом останавливает сервис, перезаписывает модули (причём с возможностью обновить ВСЁ), затем опять запускает. Дай бог это займёт секунду.
В принципе можно. Но это вопрос методологии скорее. Скажем, пользователи смирятся с простоем из-за перезапуска раз в неделю — но если их дергать каждые 10 минут, взвоют. Сейчас логика в хранимках БД — поэтому все привыкли, что замена идет мгновенно. Сейчас хочется перенести часть логики на сервер, но сразу надо продумать как потом быстро менять функционал.
Ну и чтобы остановка сервиса не секунду займет. Надо будет скинуть в БД состояние, потом при запуске считать кучу справочников и восстановить состояние. На текущем сервисе запуск где-то полминуты занимает. В принципе, это можно решить если всю логику вынести в отдельный сервис.
Шурыгин Сергей
"Не следует преумножать сущности сверх необходимости" (с) Оккам
Здравствуйте, Sshur, Вы писали:
S>Здравствуйте, gandjustas, Вы писали:
S>>>В принципе да, он обрабатывает запросы + просыпается по таймеру. Но он точно не stateless. G>>Без разницы, все равно у тебя состояние должно быть внешним, ибо даже 24/7 не означает что процесс будет постоянно работать.
S>Как так? Именно 24/7 и процесс работает всегда. За исключением простоев во время сбоев.
24/7 означает что приложение всегда обрабатывает запрос, за исключением времени простоя из-за сбоев. Держать процесс в памяти постоянно не нужно.
S>Внешнее состояние — можно сделать 2 связанных сервиса, один будет данные держать, а другой логику. В принципе тогда и перезапускать можно сколько угодно.
Ну так это и будет IIS + SQL сервер.
Здравствуйте, Aen Sidhe, Вы писали:
L>>Можно по аналогии с теми же хранимками использовать внутренний скриптовый язык. AS>Да выгрузить домен, да и всё. Как IIS делает.
IIS не выгружает домен на каждую перекомпиляцию одиночного aspx файла. Просто, в домене копится мусор в виде неиспользуемого кода (есть счетчик числа компиляций по достижению которого происходит перезагрузка домена).
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.