|
|
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev1. Интересно, а если на сервере кто нибудь Reset нажмет, JavaScript спасет? Я не понимаю к чему такой сарказм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 15:54 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
К тому, что OOM Java вырубит напрочь, как и Linux. Разумеется, никто с этим спорить не будет. AFAIK изолироваться по ошибкам памяти можно только: 1. Выносить вычисления из потоков в процессы. Тогда падает процесс, остальные продолжают работать. Но тогда, обычно, проигрываем в производительности. Но проблема не исчезает, а просто уходит на след. уровень операционной системы. Т.к. подвесить и весь Linux тоже можно. Может ли системный администратор грамотно настроить Linux, что бы процессы гарантированно не вешали ядро - думаю что да. 2. Какие-то средства на уровне языка / выполняющей среды. Позволяющие контролировать потоки по потреблению памяти. В Java к огромному сожалению, я такого не знаю. Почему не сделано - я не знаю, т.к. лично мне, этого явно не хватает. Более интересный вопрос, что может предложить JavaScript, что бы решить эту проблему. А вот эта тема не раскрыта. Если в JavaScript'е есть возможность отдельным функциям вешать лимит по потребляемой памяти - тогда да, но подозреваю, там такого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 16:06 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
А вот действительно, почему бы в Java не добавить простой механизм: Для каждого потока считаем кол-во выделенной памяти в eden При minor GC, при очистки памяти, уменьшаем этот счетчик При переносе в Tenured, где-то храним Id исходного потока Должно достаточно легко делаться, т.к. и так в enen своя отдельная область для потоков нарезана. Т.е. подсчитываем память выделенную потоком в Old Gen Почему бы, не давать возможность задавать лимит на поток, для выделения в Old Gen? Если поток (+порожденные им потоки) лимит превысил - тупо прибиваем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 16:59 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev Для каждого потока считаем кол-во выделенной памяти в eden Ну оно сейчас так и сделано, вы правильно упомянули про TLAB Leonid KudryavtsevПри minor GC, при очистки памяти, уменьшаем этот счетчик Не понял. Зачем? В чем смысл счетчика? Дело в том, что потоку может быть нужно много памяти для инициализации, а потом все это грохается и дальше в steady режиме он потребляет мало. Да и мало ли других паттернов использования памяти. Поток может жрать в одну секунду гиг, а вторую - мег, что из этого следует? Leonid KudryavtsevПри переносе в Tenured, где-то храним Id исходного потока Зачем? Тут есть много нюансов, во-первых, в этом выделенном спейсе гарантировано будет мусор, когда вызывать major GC? Пусть хип пустой, но у этого потока почти все забито - на паркуа делать STW паузу в этом случае? Во-вторых, ну мало ли потоку нужен один большой объект а его область в тенюред фрагментирована и забита мелочью, по факту памяти хватает вроде бы, но в вашем кейсе потоку будет отказано? как-то не айс короче.. Leonid KudryavtsevДолжно достаточно легко делаться, т.к. и так в enen своя отдельная область для потоков нарезана. Т.е. подсчитываем память выделенную потоком в Old Gen Да нету никакого в этом смысла имхо, или я не уловил мысль. Leonid KudryavtsevПочему бы, не давать возможность задавать лимит на поток, для выделения в Old Gen? Если поток (+порожденные им потоки) лимит превысил - тупо прибиваем. Ну почему описано выше - много нюансов + неочевидный профит. Если же говорить о решении проблемы - то я ее не особо вижу. Если код ваш - то вы как девелопер должны нести отвественность за каждый поток, и в случае чего должны тюнить и фиксить. Если у вас какая-то инфрастурктура которая может принимать и исполнять какой-то левый код - то лучше всего запускать в отдельной JVM или виртуалке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 17:38 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevА вот действительно, почему бы в Java не добавить простой механизм: Для каждого потока считаем кол-во выделенной памяти в eden При minor GC, при очистки памяти, уменьшаем этот счетчик При переносе в Tenured, где-то храним Id исходного потока Должно достаточно легко делаться, т.к. и так в enen своя отдельная область для потоков нарезана. Т.е. подсчитываем память выделенную потоком в Old Gen Почему бы, не давать возможность задавать лимит на поток, для выделения в Old Gen? Если поток (+порожденные им потоки) лимит превысил - тупо прибиваем. Я думаю что создатели думали о таких механизмах и ... ничего не сделали потому что в самой постановке кроется масса противоречий. В Java в силу модели памяти нельзя точно сказать что объект а что есть ссылка на объект. Поэтому сама по себе процедура подсчета любой памяти выходит на этот вопрос. Память логическая и память физическая частично пересекаются и умножают сложность самого вопроса подсчета. Кстати само по себе прибивание потока не решает принципиально освобождение всех объектов. Скопированные - по прежнему остаются во владении других потоков. Чаще всего OOM возникает в силу ошибок в приложении. И эти ошибки надо исправлять а не отстреливать потоки. Такая архитектура будет слишком ненадежной и неочевидной. Мрут потоки. Почему - неясно. У меня были случаи OOM вследствие ошибок в чужих библиотеках и в юзкейсах стандартных. Например пытался прогрузить DOMDocument из XML ответа размером в несколько ГИГ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 17:52 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Это не средство программиста, а средство АДМИНИСТРАТОРА. Один сервер (WebLogic), одно JVM, много приложений, десяток программистов Один программист сделал ошибку/опечатку, банальный вечный цикл. Потребление памяти ушло в бесконечность. Одна опечатка - а погиб весь сервер. maytonЧаще всего OOM возникает в силу ошибок в приложении. И эти ошибки надо исправлять а не отстреливать потоки. Такая архитектура будет слишком ненадежной и неочевидной. Мрут потоки. Почему - неясно. IMHO I.1. СНАЧАЛА надо отстреливать потоки. Что бы ошибка НА РАСПРОСТРАНЯЛАСЬ дальше на весь сервер и не ломала то, что работает без ошибок. I.2. Потом исправлять ошибки. II. Как раз будет очевидно. Пришел HTTP запрос такой-то, был сброшен, т.к. превысил лимит по памяти - где ошибка, совершенно понятно, легко тестировать. Сейчас все хуже, сервер стоит колом но все вроде работает, где ошибка - фиг поймешь. При этом, отстрел потоков по timeout'у существует, если поток долго считает 2+2 - его сервер пристрелит. Просто дополнительно нужен отстрел по памяти. Проблема в App Server'ах. Разные приложения от разных программистов выполняются в одном адресном пространстве ((( Вроде даже существует изоляция кода друг от друга на уровне Class Loader'а, но для изоляции друг от друга на уровне Heap'а и OOM - нет ничего. Проблема не в том, что ошибочный код падает. Проблема в том, что вместе с ним может упасть и другой, полностью работоспособный код. P.S. Человек разрабатывал программы для электростанций. В поставки идет шкаф, где у каждого отдела СВОЙ физический компьютер (или даже несколько). И пофиг на то, что ресурсы используются на 1 %. Главное, что если будет сбой - то нет возможности перевалить ответственность на другого/другой отдел. Т.к. ошибки могут привести и к уголовно наказуемым последствиям. Существующая реализация приложений в app server'ах - полностью ублюдочный. В основном, за счет отсутствия хоть какой-то изоляции и классов и приложений по памяти и OOM. IMHO Но боюсь, в node.js ничуть не лучше. Если там есть какие-то крутые решения, буду рад о таком услышать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 18:11 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
забыл никДа нету никакого в этом смысла имхо, или я не уловил мысль. Попытка хоть какое-то осмысленное "лимита на память" для Web. К сожалению "лимит на память" вряд ли получится, но "лимит на выделение памяти" сделать можно. Как программист / администратор, я могу примерно сказать, какое потребление (в том числе и выделение) памяти у моего кода в "штатном" режиме. Если код переходит в "нештатный режим" (например попали в вечный цикл) - грохаем. Понятно, что для рабочего варианта нужно дорабатывать напильником. Все потоки разные, грести всех под одну гребенку - не есть айс, на Web-сервере - запросы разные, а выполняются в одном потоке (из пула), тоже грести всех под одну гребенку - не есть айс. Но хоть как-то задавать лимиты по памяти, жизненно необходимо. IMHO забыл никЕсли код ваш - то вы как девелопер должны нести отвественность за каждый поток, и в случае чего должны тюнить и фиксить. Дивелопер и "нести ответственность" ))) IMHO понятия не совместимые ))) + В фирме могут быть 100-ни дивелоперов забыл никлучше всего запускать в отдельной JVM или виртуалке. Не спорю. Сам сейчас так и делаю. Проект побит по модулям, каждый модуль на своей JVM, общаются через RMI. Перезапуск отдельного модуля на остальные не сказывается (подхватывается на лету). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 18:42 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
kadetинтересуюсь в первую очередь у "единоверцев" ))) LOL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 18:42 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Ввиду неимения представления о Node.is некоторые тут замусорили обсуждение не имеющими отношения к теме и несущественными рассуждениями об OOM Но догадался, откуда взялось представление о преимуществе Node.js в многопоточности-многозадачночти. Ввиду однопоточности Javascript для Node.js балансировка нагрузки важнее. Например, дополнительный модуль Cluster для неё создаёт подпроцессы, а они могут выполняться одновременно на многоядерном процессоре. То есть, это наверно не преимущество, а особенность. Дальнейшие сведения искать в Google по словам например full stack JavaScript, есть даже несколько книг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 21:16 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Насколько я понял, читая книжку по Node.js - главное преимущество - компактность кода при написании микросервисов. К слову если сравнивать с Jetty то примерно 20 строк NodeJS соответствуют где-то 100 строкам кода на Jetty с 1 сервлетом если брать в качестве задачи Hello-World service или Time-service. Дальше судить не берусь т.к. продуктивных задач еще не делал и буду рад каментам от тех кто уже имеет хоть какой-то боевой код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 22:42 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
kadetвсем привет, коллеги, у нас тут проект наклевывается на node.js. Начальство намекает, что надо бы овладеть. Я поигрался с ним немного, но что-то как-то "не то". Душа не лежит. Синтаксис мне просто караул, кругом анонимные вызовы. Как дебуговать его тоже еще не разобрался. Вроде бы MVC поддерживает, даже альтернатива jsp есть. Из баз данных тоже можно информацию читать (записывать не пытался). Утверждают, что типа основное преимущество nodejs в том, что он капец какой серьезный в отношении многозадачности / многопоточности. Вот контейнеры на tomcat "не тянут" такой нагрузки. Для решения этих задач в java world надо load balancing использовать и типа это тянет за собой "hardware" расходы. А на nodejs типа все легло на минимум железа делается. У меня опыту с ним никакого, поделитесь плиз. Так ли "хорош зверь как его малюют" ? спасибо https://www.techempower.com/benchmarks/ java не тормозит, ее нужно просто уметь готовить, а не использовать томкат и спринг мвц Если кому-то нужен перформанс от http сервера на джав, то обычно не используют tomcat/jetty/etc и всякие spring mvс (которые генерит кучу мусора на каждый реквест), а просто берут netty, который не отяжелен десятилетием легаси кода(хотя они там что-то переписывают потихрньку) и попытками добавить новых фич из спеки Servlet API. Если конечно вам лейтенси в 500 микросекунд в 99% и на 40к запросов в секунду не устраивает, то да - джава вам не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 22:53 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
mayton, Берем vert.x и получаем те же 20 строк кода на Groovy, JavaScript и чуть больше на Java. Если знаете Java, то выбирайте vert.x. Если только JavaScript, то выбора нет и только node. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 22:55 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
schwa, Хотелось бы взглянуть на тех, кто для более или менее серьезного web приложения берет netty, а затем сообщает боссу, сколько времени понадобится на разработку и что будет, когда вы уволитесь с работы и придется кому-то это приложение поддерживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 23:02 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
mayton, Прошу прощения, ответ предназначался для schw ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 23:03 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Valery Shiskinschwa, Хотелось бы взглянуть на тех, кто для более или менее серьезного web приложения берет netty, а затем сообщает боссу, сколько времени понадобится на разработку и что будет, когда вы уволитесь с работы и придется кому-то это приложение поддерживать. Смотря что понимать под серьезным - если большое (с кучей эндпоинтов ну или CRUD), то да. Смысла нет т.к. все равно все упрется в бд. Да и требования у таких приложений не очень строгие обычно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2016, 23:12 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
kadet, Когда мне начинают расхваливать серверный жаваскрипт, у меня единственная реакция: WAT??! https://www.destroyallsoftware.com/talks/wat ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2016, 11:45 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Пока я вижу только один смысл. Фронт-кодеры внезапно получат возможность писать и деплоить серверный код. По части простоты и проиводительности. В книжке приводят синтетические Node.js тесты которые на некоторых типах ответов обгоняют nginx. Я думаю что это связано с хорошей оптимизацией взаимодействия с сетевым стеком. Что там будет если подключить в качестве источника ту-же MongoDb (которую много раз приводят в примерах) ХЗ. Надо смотреть реальные данные. Опять-же. Это только первое впечатление. Я не видил продуктивного кода на Node.js. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2016, 12:38 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
kadetУ меня опыту с ним никакого, поделитесь плиз. Так ли "хорош зверь как его малюют" ? спасибо Способ разрабатывать бэкенд на JS. Надо это- бери. Не надо- бери jetty и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2016, 15:49 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
У ноды своя ниша. И не мало крупных компаний ее используют. На сколько я знаю нода отлично чебя проявляет на задачах выдачи контента, то есть минимум расчетов достал с бд выдал. Мне лично JS нравится, как по мне он простой и лаконичный, большие монолитные приложения на нем писать противопоказано, только микросервисы, бд лучше использовать nosql. в js есть все для динамических entity. Многопоточно тоже есть. И - это пожалуй лучшая фулстек платформа, на которой с одинаковым успехом можно писать фронт, бэк и мобайл. Если говорить про ваш конкретный случай, то тут на первое место нужно поставить ваш интерес, если не интересно, то и на самой перспективной платформе работать не стоит, легче работу сменить, если уже загоняют в угол. Вот тут можно глянуть кто из крупных ИТ игроков использует nodejs https://strongloop.com/node-js/why-node/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 00:22 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Mad_HeadМне лично JS нравится\ То, о чем я раньше и говорил. Java & Java Script - это два совершенно разных языка. Технически, вряд ли кто будет спорить, что и то и то решение сейчас рабочее . Масса проектов и на одно и на другом Т.ч. самый важный критерий выбора - кому что нравится. Вот лично я, на скриптовых языках без типизации программировать отказываюсь. Лучше уж пойду бомжевать и попрошайничать, чем буду унижать себя программированием на этом отстое ))). А кто -то наоборот ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 00:56 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, А я не привязываюсь к типизации, я считаю, что статическая типизация дает весомые плюсы пока рука не набита читать код с динамической типизацией, я существенно лучше знаю java чем JS. Что выбрать зависит от задачи. Математические вычисления и не тривиальные расчеты куда удобнее делать на пайтоне чем нам джаве, в пайтоне код выглядит как математическая формула и -- это все благодоря удачному сочетанию динамической типизации и элеменотов функциональщины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 01:16 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
А примерно о том же, _работающих_ языков как грязи. Кому что выбрать - в 90% вопрос личного предпочтения. Будет ли проект успешный и будет ли код высокопроизводительным - на 90% зависит от прямых рук исполнителя и лишь на единицы процентов - от выбранного средства разработки. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 01:27 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
С точки зрения разработчика - действительно, пиши на чем удобнее. Но, это пока проект новый. Как только появляется саппорт и доработки, вот тогда становится понятно, правильно ли выбрана технология. В языках со статикой сложнее поломать большой многолетний проект. Неудивительно, что в энтерпрайзе используют махровые javaEE и c# (я про бекенд, конечно). Бизнесу плевать на моральное удовлетворение разработчика - ему надо, чтобы толпа новоприбывших джуниоров могла быстро поправить баги в продуктивном коде. Как это ни печально... Динамика хороша во write-only коде, если нужно быстро обсчитать что-то, или прототип накидать. Тут ей равных нет. Имхо, конечно, но много раз подтвержденное опытом. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 09:16 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevВот лично я, на скриптовых языках без типизации программировать отказываюсь. я вот тоже раньше так относился к JS, а потом тихой сапой пришлось осваивать для нового проекта. Так что фигня "глаза боятся, а руки делают" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 10:09 |
|
||
|
node.js vs java technologies
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevПри переносе в Tenured, где-то храним Id исходного потока А зачем? Поток это не процесс. Его памятью могут пользоваться другие потоки. :) Собственно, а какой gc-root держит память jvm и так знает. Прибей его и память освободится, однако некоторые защищаются (гоняют вечный цикл с перехватчиком всех ошибок, включая предложение прибить тред). :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 10:42 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39263980&tid=2123933]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 529ms |

| 0 / 0 |
