LINUX.ORG.RU

[How-To] Что-то вроде горячей замены кода


0

2

Предположим у меня есть софт, назовем его SosiskaNonStopServer.

Этот софт я отдаю/продаю клиентам, и у меня нет никакого доступа к их серверам.

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

А теперь вопросы:

1) Какие технологии это позволяют(из коробки, да и вообще)
Нагуглил Erlang, Lisp, Node.js, php(?). Говорят еще Java может, но ограничено. Может ли Haskell горячую замену кода?

2) В каких проектах такое реализовано? (Желательно open-source).

3) Есть ли еще Use-case`ы горячей замены кода, кроме нон-стоп автообновления?



Последнее исправление: Sosiska (всего исправлений: 3)

Sosiska> и у меня нет никакого доступа к их серверам.
Sosiska> В свой софт я хочу внедрить автоматическое автообновление без перезагрузки

А на диск не надо сохранить?

sdio ★★★★★
()
Ответ на: комментарий от sdio

Я понял на что вы намекаете.
Можно, к примеру, во время установки запросить root-пароль а потом демон автообновления будет иметь root права для записи на диск...

это не очень хорошо, но другого варианта я не вижу.

Sosiska
() автор топика
Ответ на: комментарий от Sosiska

туплю. можно еще демон автообновления запускать от рута. никакого ввода root пароля не требуется.

Sosiska
() автор топика
Ответ на: комментарий от Sosiska

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

Ты должен сделать свой репозитарий, в который будешь выкладывать новые версии, а клиенты штатными средствами (package manager) будут апдейтиться по необходимости.

sdio ★★★★★
()

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

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

Pavval ★★★★★
()

В java можно делать горячую замену только без изменения сигнатур существующих методов и полей. Да и для этого требуется открывать порт на jvm.

note173 ★★★★★
()

Не стоит мешать в кучу обновления и горячую замену кода. Разные требования и круг задач. Менять на лету можно хоть сишечку и асм, было бы желание :-)

ТСу советую посмотреть эрланг, в общем случае там это делается на раз-два.

tensai_cirno ★★★★★
()

SosiskaNonStopServer

Никогда не отдавай такой хороший сервер в чужие руки.

King_Diamond
()
Ответ на: комментарий от dikiy

Главное, чтобы фича отключаемой была.

s/отключаемой/включаемой/

Pavval ★★★★★
()

Как насчет Си? Обновляемый код держишь в so-шках, dlopen/dlclose - вот и вся горячая замена.

Manhunt ★★★★★
()

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

vtVitus ★★★★★
()

Может ли Haskell горячую замену кода?

Да

Нагуглил Erlang

+1 к эрлангу, если сможешь на нём писать то, что тебе нужно.

Rzhepish
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.