С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
1

Tomcat или другие application server - какая архитектура приложения будет правильной?

17.10.2016, 10:40. Просмотров 1015. Ответов 26

Добрый день.
Начинаю погружаться в мир J2EE, до этого писал только на чистой Яве.
К примеру, стоит задача написать довольно тяжелую программу, которая периодически (по параметру в конфиге) запускает тяжелый и продолжительный процесс. Пусть это будет парсинг из PBF-дампа OpenStreetMap в базу данных Firebird. При этом промежуточный этап использует еще и базу данных H2. Такой процесс занимает около 10 часов, включая загрузку свежего дампа с Интернета. Сам процесс разбит на несколько шагов, выполнять которые или нет - тоже прописано в конфиге. Т.е. можно пропустить несколько начальных шагов, и приступить сразу к финальным.
Описанная часть задачи сделана, теперь потребовалось прикрутить веб-интерфейс для управления шагами процесса и редактирования полученных финальных данных.
Вот тут и встает вопрос, какой из вариантов использовать:
1. Дописать в программу модуль, реализующий HttpComponents , например. Тут получается основная логика будет "на одном уровне" с веб-сервером.
2. Перенести программу в текущем виде в среду Tomcat и использовать уже его web-возможности. Но тут не очень ясно, как запускать отдельные шаги нашей тяжелой задачи в отдельных потоках и выдержит ли (спроектирован ли для этого) Tomcat. Тут получается, что основная логика будет запускаться из веб-сервера.
3. Может быть еще какие-то варианты есть?

Спасибо всем откликнувшимся!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2016, 10:40
Ответы с готовыми решениями:

Достать исходный код application из Oracle Application Server
Господа, возникла проблема. Понадобилось вытянуть исходники одного приложения...

Tomcat и J2SE или Tomcat и JRE
Привет! Будет ли работать Томкат если установлен только JRE?

Как запустить java application при старте Tomcat
Хотелось бы, чтобы при старте томката на сервере запускалось также GUI в...

Как задеплоить WAR на субдомен через Tomcat Web Application Manager?
Добрый день. Есть вдс-вервер site.ru, на нем создан поддомен sub.site.ru -...

Будет ли без проблем работать Sun Java Web Server или Apache под Win98 ?
Hello, All! Корректно ли будет работать Sun Java Web Server под Windows 98 ?...

26
xoraxax
1426 / 1350 / 402
Регистрация: 05.07.2013
Сообщений: 6,552
Завершенные тесты: 2
17.10.2016, 10:55 2
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Перенести программу в текущем виде в среду Tomcat и использовать уже его web-возможности
да
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Но тут не очень ясно, как запускать отдельные шаги нашей тяжелой задачи в отдельных потоках
так же как без томката
0
KEKCoGEN
Эксперт Java
2080 / 1947 / 507
Регистрация: 28.12.2010
Сообщений: 7,814
17.10.2016, 11:00 3
lanmaster2, нет смысла переносить ваш процесс на томкат. Оставьте его как есть, напишите поверх небольшой api для запуска и получения результатов
Затем напишите отдельную веб аппликацию (быстрее будет взять Спринг бут со встроенным томкатом) и оттуда обращайтесь к вашемy api
0
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
17.10.2016, 11:17  [ТС] 4
Цитата Сообщение от xoraxax Посмотреть сообщение
так же как без томката
Ну без томката у меня в основном потоке инициализируется периодический TimerTask, который, когда пришло время - запускает все шаги. Но для этого у меня есть основной поток, в котором я могу это сделать. А как в томкате? Я просто не очень представляю, с чего там начинается запуск отдельных потоков, не привязанных к веб-запросам.
Подозреваю, что где-то в web.xml надо что-то прописать и, вероятно, томкат запустит поток, не получив даже ни одного запроса по веб. Подскажите, как это сделать? И не поплохеет ли томкату, когда поток начнет есть 99% CPU и занимать около 8Гб оперативки?

Добавлено через 10 минут
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
lanmaster2, нет смысла переносить ваш процесс на томкат. Оставьте его как есть, напишите поверх небольшой api для запуска и получения результатов
Затем напишите отдельную веб аппликацию (быстрее будет взять Спринг бут со встроенным томкатом) и оттуда обращайтесь к вашемy api
Была такая мысль, но это уже получится два проекта, станет запутаннее. К тому же, пока основная программа не доведена до продакшена, может быть имеет смысл завернуть ее в томкат и получить один проект...
Вообще говоря, есть еще одна задача, которую надо писать совсем с нуля. И там похоже сразу придется писать под Tomcat.
Задача примерно такая: используя gwtbootstrap3, сделать веб-приложение, которое будет предоставлять удаленное рабочее место для работников call-центра. Там довольно простая логика, не потребуется много памяти под приложение на сервере, но часть логики должна быть отвязана от запросов и работать сама по-себе.
0
xoraxax
1426 / 1350 / 402
Регистрация: 05.07.2013
Сообщений: 6,552
Завершенные тесты: 2
17.10.2016, 11:18 5
есть всякие schedulerы, например кварц. http://www.quartz-scheduler.org/
0
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
17.10.2016, 11:21  [ТС] 6
Цитата Сообщение от xoraxax Посмотреть сообщение
есть всякие schedulerы, например кварц. http://www.quartz-scheduler.org/
Спасибо, посмотрю. Может быть, подскажете еще, как хранить объекты List или HashMap в памяти статично, между получениями запросов?
0
KEKCoGEN
Эксперт Java
2080 / 1947 / 507
Регистрация: 28.12.2010
Сообщений: 7,814
17.10.2016, 11:22 7
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Была такая мысль, но это уже получится два проекта, станет запутаннее. К тому же, пока основная программа не доведена до продакшена
вы назвали две причины чтобы как раз разделить эти два решения на разные проекты.

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

Если вы запустите ваш тяжелый процесс, на той же JVM что и томкат и он сожрет всю память, ваш веб интерфейс само собой тоже будет тормозить. Я невижу ни одной причины вставлять ваш процесс в томкат.
0
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
17.10.2016, 11:30  [ТС] 8
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Если вы запустите ваш тяжелый процесс, на той же JVM что и томкат и он сожрет всю память, ваш веб интерфейс само собой тоже будет тормозить. Я невижу ни одной причины вставлять ваш процесс в томкат.
Вообще говоря, эта "тяжелая" является больше сервисной, ее будут запускать с 2-3 рабочих мест. В этом случае, мне кажется, логичнее завернуть ее в томкат, и пусть тормозит, пока выполняется. Но с другой стороны, на том же томкате скорее всего, будет и вторая программа, которую я описал чуть выше (про call-центр). Вот она как раз очень критична к тормозам, поэтому придется писать веб-интерфейс к первой задаче с использованием апи-вызовов с "тяжелой" задаче на отдельном сервере. Можете подсказать еще по второй задаче?
0
KEKCoGEN
Эксперт Java
2080 / 1947 / 507
Регистрация: 28.12.2010
Сообщений: 7,814
17.10.2016, 11:58 9
Цитата Сообщение от lanmaster2 Посмотреть сообщение
В этом случае, мне кажется, логичнее завернуть ее в томкат, и пусть тормозит
ну с таким отношением пишите где хотите....

Цитата Сообщение от lanmaster2 Посмотреть сообщение
Можете подсказать еще по второй задаче?
зачем вам gwtbootstrap3? У вас какая-то мания к плохим решениям
0
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
17.10.2016, 12:08  [ТС] 10
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
ну с таким отношением пишите где хотите....
А что не так с отношением? Там задачи тяжелые и продолжительные, пока они выполняются, не требуют вмешательства.
Как вариант - было бы неплохо иметь возможность запускать их через веб-интерфейс и периодически смотреть прогресс через него же. Да и вынести на отдельный сервер это хозяйство не помешает.

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
зачем вам gwtbootstrap3? У вас какая-то мания к плохим решениям
Основное условие подбора технологии было такое: сотрудник, который будет заниматься этим проектом, не писал до сего момента на Java вообще, у него есть опыт в Delphi, C++, ассемблере. Чтобы обеспечить ему ускоренное погружение в веб-Java, выбрали GWT. Там хотя бы не придется (мы надеемся) лазить в код JavaScript, а писать только на Java. К тому же одностраничный интерфейс очень приветствуется.
Мы долго выбирали как сделать веб-интерфейс для call-центра, перебрали все что можно, и пришли к GWT.
Чем он по-вашему плох и чем лучше его заменить?
0
KEKCoGEN
Эксперт Java
2080 / 1947 / 507
Регистрация: 28.12.2010
Сообщений: 7,814
17.10.2016, 12:13 11
Цитата Сообщение от lanmaster2 Посмотреть сообщение
перебрали все что можно
что например?

Цитата Сообщение от lanmaster2 Посмотреть сообщение
Да и вынести на отдельный сервер это хозяйство не помешает.
каким же образом вы будите выносить тяжелый модуль на отдельный сервер если он будет интегрирован в томкат?
0
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
17.10.2016, 12:21  [ТС] 12
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
что например?
CUBA Platform
Vaadin
Sencha GXT
Wicket
GWT, GWTP

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
каким же образом вы будите выносить тяжелый модуль на отдельный сервер если он будет интегрирован в томкат?
Вместе с томкатом, конечно!
0
KEKCoGEN
Эксперт Java
2080 / 1947 / 507
Регистрация: 28.12.2010
Сообщений: 7,814
17.10.2016, 13:07 13
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Вместе с томкатом, конечно!
то есть у вас будет два томката один из которых просто будет запускать этот процесс? Это очень плохое решение.

Цитата Сообщение от lanmaster2 Посмотреть сообщение
CUBA Platform
Vaadin
Sencha GXT
Wicket
GWT, GWTP
чем Vaadin не угодил? Он основан на GWT, но намного более простой в использовании иинтеграции с современными фреймворками
0
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
17.10.2016, 13:14  [ТС] 14
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
то есть у вас будет два томката один из которых просто будет запускать этот процесс? Это очень плохое решение.
Один томкат. Если уж объединять основное приложение с веб-запросами, то в один томкат его и грузить, вынесенный на отдельный сервер.

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
чем Vaadin не угодил? Он основан на GWT, но намного более простой в использовании иинтеграции с современными фреймворками
Про Vaadin почитали отзывы, вроде как он на каждый чих в интерфейсе делает запросы на сервер... Стало тревожно, т.к. приложение должно иметь высокую скорость отклика. Лишний трафик тут не помощник. Или мы что-то упустили и можно сделать на Vaadin с таким же уровнем производительности, как на чистом GWT?
0
KEKCoGEN
Эксперт Java
2080 / 1947 / 507
Регистрация: 28.12.2010
Сообщений: 7,814
17.10.2016, 13:26 15
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Стало тревожно, т.к. приложение должно иметь высокую скорость отклика. Лишний трафик тут не помощник.
Это так. Ваадин серверный фреймворк. Однако если у вас будет много пользователей, то GWT так же будет тормозить т.к оба фреймворка предназначены для создания аппликаций бек оффиса и не расчитаны на большое кол-во юзеров. Если нужна быстрота отклика и производительность, пишите на html + js
0
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
17.10.2016, 13:35  [ТС] 16
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Это так. Ваадин серверный фреймворк.
Ok. Не могли бы вы еще просвятить как на томкате сохранять данные между запросами? Например, какие-то предварительно загруженные или периодически обновляющиеся данные из базы данных или из других источников, которые должны быть доступны с минимальной задержкой для поступающих запросов. В обычной Яве я мог бы создать отдельный класс-хранилище, со статическими полями и методами доступа и обновления данных в хранилище. А как в томкате сделать такое?
0
KEKCoGEN
Эксперт Java
2080 / 1947 / 507
Регистрация: 28.12.2010
Сообщений: 7,814
17.10.2016, 15:01 17
lanmaster2, делаете зарпос в БД и возвращаете....не очень понял ваш вопрос....Сохранять что-либо между запросами это пример плохой архитектуры. Вся ваша аппликация не должна хранить какое либо состояние. По-моему вы рано взялись за такую программу....попробуйте написать простые веб аппликации для начала чтобы понять что к чему.
0
korvin_
2236 / 1735 / 328
Регистрация: 28.04.2012
Сообщений: 6,153
17.10.2016, 18:16 18
Цитата Сообщение от lanmaster2 Посмотреть сообщение
Там хотя бы не придется (мы надеемся) лазить в код JavaScript
Зря надеетесь.
0
lanmaster2
0 / 0 / 0
Регистрация: 17.09.2015
Сообщений: 23
18.10.2016, 08:29  [ТС] 19
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
попробуйте написать простые веб аппликации для начала чтобы понять что к чему.
Спасибо, это само собой...
Цитата Сообщение от korvin_ Посмотреть сообщение
Зря надеетесь.
Все настолько плохо? А чем пользуетесь вы в разработке веб-приложений?
0
korvin_
2236 / 1735 / 328
Регистрация: 28.04.2012
Сообщений: 6,153
18.10.2016, 16:26 20
Цитата Сообщение от lanmaster2 Посмотреть сообщение
А чем пользуетесь вы в разработке веб-приложений?
Для какой части? Я фронт-энд не пишу. Коллеги используют Angular 2.
0
18.10.2016, 16:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2016, 16:26

Какая должна быть архитектура для данного Java EE проекта?
Добрый день! Решил вот поизучать JavaEE. Дабы полнее погрузиться в процесс...

Какая архитектура будет правильной для игры?
Добрый день! Пишу сетевую стратегию с использованием Unity, но уровень мой -...

Какая разница между Apache HTTP Server и Apache Tomcat?
Какая разница?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru