LINUX.ORG.RU

Правка джавы на продакшене

 


1

1

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

В противоположность этому, сейчас на Java приходится править ошибку локально, обновлять и перезапускать сервер. Это же днище донное.

Каким образом удобно делать на джаве правку наживую?

Какие-то рекомендации по организации кода, по использованию OSGi или чего-то такого, какой-то хороший репл которым соединяться?

Хотелось бы историй успеха :)

★★★★☆

Погугли про LiveRebel. Конкретно его не использовал, но JRebel использовал, подхватывает почти все изменения кроме смены суперкласса.

Legioner ★★★★★
()

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

aidan ★★★★
()

Если приходится коннектиться к работающему продакшену и править ручками что-то «на лету», то это и есть «днище донное».

В остальных случаях того же JRebel'а хватает (да и то, мне кажется, это не такой частый use-case).

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

1) Проблемы непонятной природы, которые можно установить только знатно покопавшись в живой системе. Например, проблема возникает иногда, только когда количество поьзователей онлайн больше пяти тысяч и они ведут себя каким-то непонятным образом. Да задолбаешься такое локально воспроизводить, да оно может и не воспроизвестись, а сделать-то надо СРОЧНО.

2) «Клиент всегда прав». Клиенту не хочется ждать. Будет ждать - уйдет к конкурентам, у которых ждать не надо. Сколько миллионов баксов в минуту стоит «Альфабанку» простой вебморды «Альфаклика»?

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

Да задолбаешься такое локально воспроизводить, да оно может и не воспроизвестись, а сделать-то надо СРОЧНО.

сервер запускается в режиме отладки и при атасе цепляется удаленный отладчик

Deleted
()
Ответ на: комментарий от stevejobs

Сколько миллионов баксов в минуту стоит «Альфабанку» простой вебморды «Альфаклика»?

За целую минуту? Вебморды!? Да там миллиарды, не меньше!

anonymous
()
Ответ на: комментарий от Deleted

сервер запускается в режиме отладки и при атасе цепляется удаленный отладчик

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

anonymous
()

Сомнительная затея. При правке на живую есть риск доломать, вместо того, чтобы поправить. Так что все-таки ошибки стоит фиксить в коде, коммитить, тестировать, и выкладывать на прод. Я бы скорее думал про автоматизацию тестирования и выкладки, что бы все это было быстро и эффективно.

Что касается безопасной же правки на проде, то я думаю стоит максимално обкладывать код всевозможными переключателями и настройками, которые доступны по JMX.

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 1)
Ответ на: комментарий от anonymous

Каким образом удобно делать на джаве правку наживую?

сервер запускается в режиме отладки и при атасе цепляется удаленный отладчик

потом случайно тычется не на ту кнопку

чо отладчик страшнее?

Deleted
()
Ответ на: комментарий от dizza

Сомнительная затея.

Ну вот зачем ты ему об этом рассказал?

anonymous
()
Ответ на: комментарий от Deleted

Каким образом удобно делать на джаве правку наживую?

сервер запускается в режиме отладки и при атасе цепляется удаленный отладчик

потом случайно тычется не на ту кнопку

чо отладчик страшнее?

да

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

Деньги-то заказчика, а булки-то свои.

anonymous
()
Ответ на: комментарий от Deleted

удаленный отладчик

посоветуй удаленный отладчик =)

тащем-то думаю, насколько хорошая идея просто выставить наружу (по TCP) REPL от Clojure и Scala?

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

тогда можно будет править локально не вообще весь код, а конкретные отдельные бандлы, и потом обновлять/перезапускать не весь сервер, а только их

но я пока не очень шарю в OSGi, чтобы понять способ и последствия

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

«Клиент всегда прав». Клиенту не хочется ждать. Будет ждать - уйдет к конкурентам, у которых ждать не надо. Сколько миллионов баксов в минуту стоит «Альфабанку» простой вебморды «Альфаклика»?

Если всё так плохо, то за эти деньги можно завести целый отдел тестирования и не выкатвать всякую херню в прод.

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

посоветуй удаленный отладчик =)

воощето он в любой java ide изкоробки, а жертва-приложение запускается с -agentlib:jdwp=server=y,suspend=n,transport=dt_socket

наружу ничего не надо, у меня отладка (когда такое возникает) заворачивается на ssh и наружу лишнего не торчит

ssh -l username serverip -L 127.0.0.1:<port_on_your_pc>:127.0.0.1:<debugger_port_on_remote>
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Сколько миллионов баксов в минуту стоит «Альфабанку» простой вебморды «Альфаклика»?

Ни одного.

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

ну он не все проблемы как-бы решает. То что код не умеет заменять, ладно. Но например какой-то тред начал выжирать кучу памяти, после чего софтину сносит киллером. Придется юзать какой-нибудь http://www.yourkit.com/java/profiler/. А можно было бы сделать (по примеру Эрланга) консоль, в которой можно интерактивно вызывать «top(mem)», «top(cpu)», «thread_info(pid)», чтобы это всё это посмотреть. И не просто так, а на основе этого писать какие-то скрипты на тему, «убить все треды, которые жрут больше 80% памяти сервера».

stevejobs ★★★★☆
() автор топика

за правку продакшена наживую надо медленно и мучительно убивать

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

ну и да, тема куда-то не туда съехала. Топик о том, чтобы удобно переписывать живой код на продакшене, а не сраться по поводу вендовозных профилировщиков.

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

Топик о том, чтобы удобно переписывать живой код на продакшене

Это НЕ нужно.

kovrik ★★★★★
()

занудил ты со своим РЕПЛ-ом. В жабе его нет и ненужно. всё верно советуют про автоматизацию тестирования и вообще про налаживание нормальных процессов на проекте. В твоём случае вероятность накосячить более вероятности пофиксить. Плюс, так ты только можешь решить следствие проблемы, но не саму проблему.

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

подрбись через Mission Control и сделоай сдепок. потом расскаж.

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

Тока не OSGI тогда, а микросервисы. Хотя это удобно не с точки зрения перезапуска (удобный перезапуск, это когда у тебя кластер есть), а с точки зрения диагностирования - понятно какой по крайней мере какой процесс сбойный, где чинить надо.

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

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

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 2)

нет это неозможно в силу ущербности несмотря на красоту и плюсы

на то он и эрланг и все такое странное чтобы умет горячую замену кода

почти никто так не умеет за это и респект

копай связку джава эрланг сервер приложений нативные ноды

anonymous
()
Ответ на: комментарий от spqr

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

Но даже в случае ерланга нужно протестировать и только потом лить на прод.

dizza ★★★★★
()
Последнее исправление: dizza (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Джаве, благодаря её работе с памятью, парадигме ООП и реализации GC, в принципе противопоказано трогать треды. Это тебе не Эрланг, у которого изолировано всё по самое нехочу. В результате лечение зажравшегося треда, в общем случае, сводится к тупому рестарту всей JVM. И никакие томкеты её от этого не вылечат, пока усыпление треда официально не рекомендуется из-за массы возникающих при этом неопределённостей.

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

Если приходится коннектиться к работающему продакшену и править ручками что-то «на лету», то это и есть «днище донное».

+1, проблема лежит в другой плоскости.

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

В твоём случае вероятность накосячить более вероятности пофиксить.

это ты сейчас кого быдлом назвал? :)

Это НЕ нужно.
занудил ты со своим РЕПЛ-ом

«И даже более впечатляющий пример удаленной отладки произошел в миссии NASA «Deep Space 1» в 1998 году. Через полгода после запуска космического корабля, небольшой код на Lisp должен был управлять космическим кораблем в течении двух дней для проведения серии экспериментов. Однако, неуловимое состояние гонки (race condition) в коде не было выявлено при тестировании на земле и было обнаружено уже в космосе. Когда ошибка была выявлена в космосе (100 миллионов миль от Земли) команда смогла произвести диагностику и исправление работающего кода, что позволило завершить эксперимент. Один из программистов сказал об этом следующее:

— Отладка программы, работающей на оборудовании стоимостью 100 миллионов долларов, которая находится в 100 миллионах миль от вас, является интересным опытом. REPL, работающий на космическом корабле, предоставляет бесценные возможности в нахождении и устранении проблем.»

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

И даже более впечатляющий пример удаленной отладки произошел в миссии NASA... неуловимое состояние гонки (race condition) в коде не было выявлено при тестировании на земле

Это же люди примерно из поколения и вида разработчиков Therac-25, совсем плохой пример для подражания. Тут ключевой момент

Отладка программы, работающей на оборудовании стоимостью 100 миллионов долларов, которая находится в 100 миллионах миль от вас, является интересным опытом

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

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

А например всё оттестировали на другой машине, но недопустим даунтайм продуктива?

Установили на бэкапе и сделали себе failover.

anonymous
()
Ответ на: комментарий от stevejobs

это ты сейчас кого быдлом назвал? :)

А ты кто?

anonymous
()

Jetty легко настраивается на обнаружение обновленных классов и хот редеплой. Емнип, одна строчка в конфиге мейвен плагина.

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

Разве править что-то на живую это не плохо?

Нет-нет, это очень карашо :)

anonymous
()
Ответ на: комментарий от stevejobs

)))) Если бы тут все кодили для наса, то мы тут бы не сидели))))

тут вот парень пилит репл, если ещё не интересовался - https://github.com/albertlatacz/java-repl

По опыту было что-то подобное. Но у нас был OSGi контейнер и ещё мы знали в каком модуле возникает косяк. Собрали плагин и в рантайме добавили в контейнер. Затем дело вкуса. Отделались подробным логированием, когда дёргали подозрительный функционал, и там сразу же обнаружился косяк. Как-то так. Вообще если есть возможность запустить приложение в включённым дебаг портом хоть на день-два, то это сохранит кучу времени.

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

Да. И ещё. Если простои альфа-клика правда стоят так дорого, то где мои деньги??? Почему я не могу получить компенсацию за то, что он лежит/падает (или на нём профилактические работы проводятся)?

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

Потом они публично извинились перед пользователями и дали возможность пользоваться услугами смс-оповещений целых два месяца бесплатно. Наверное, они на этом просто разорились, ага. На том, что в нормальных банках стоит 30-40 рублей (или и вовсе бесплатно), у них стоит 59*(кол-во карт).

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

это технологии будущего:

- алло, это 911? У меня залипла электронная педаль газа, и машина ускоряется.

- ок, ничего не трогайте через 30сек к вам по ssh залезет stevejobs и электронной монтировкой отлипнет педаль.

Deleted
()

На джаве такое делать в продакшене - это потенциальное кандидатство в герои. Если есть возможность и нужно, лучше ставить 2 сервака и переключаться между ними.

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

а если там в RAM лежат 20 терабайт информации/состояния в виде OLAP-куба, как на второй сервер переключать будешь?

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