Уважаемое сообщество, коллеги, очень важно ваше мнение.
Стоит задача реализовать приложение на Java с возможностью поддержки до 5000 параллельно работающих пользователей, с возможностью внедрения поддержки скриптового языка,
для обеспечения адаптации приложения без изменений исходного кода и также обеспечить безопасность.
Смотрю в сторону Spring Framework, Spring Security.
Скажите пожалуйста подойдет ли для этих целей Spring и какие подводные камни могут возникнуть при работе с данным frameworkom или есть более удобные платформы для данной задачи?
Здравствуйте, Orgy243, Вы писали:
O>Стоит задача реализовать приложение на Java с возможностью поддержки до 5000 параллельно работающих пользователей, с возможностью внедрения поддержки скриптового языка, O>для обеспечения адаптации приложения без изменений исходного кода и также обеспечить безопасность.
Что пользователи делать будут? Просто подключаться к серверу?
Ну или если они что-то делать планируют, то как хранить состояние (на стороне сервера или клиента).
Насколько ресурсоемкая логика планируется, имеет ли смысл что-то распаралеливать. Если что-то распаралеливать, то насколько важна согласованность данных итд, как разрешать конфликты?
Для чего планируется скриптовой язык?
Spring как и java в целом это всего лишь инструмент. Для меня вопрос звучит как выбрать аккамуляторную дрель Бош или Мокита.
Здравствуйте, Orgy243, Вы писали:
O>Стоит задача реализовать приложение на Java с возможностью поддержки до 5000 параллельно работающих пользователей, с возможностью внедрения поддержки скриптового языка, O>для обеспечения адаптации приложения без изменений исходного кода и также обеспечить безопасность.
O>Смотрю в сторону Spring Framework, Spring Security. O>Скажите пожалуйста подойдет ли для этих целей Spring и какие подводные камни могут возникнуть при работе с данным frameworkom или есть более удобные платформы для данной задачи?
Spring подходит для реализации любой системы. То что вы указали в требованиях проекта к задачам решаемым Spring не имеет. Единственно что, как я понимаю, готового решения для кластеризации Spring не предоставляет. А 5000 активных клиентов на одном сервере звучит не правдоподобно. Зависит, конечно, от того что там происходит.
Здравствуйте, Orgy243, Вы писали:
O>Скажите пожалуйста подойдет ли для этих целей Spring и какие подводные камни могут возникнуть при работе с данным frameworkom или есть более удобные платформы для данной задачи?
spring framework — универсальный фреймворк для кучи разных задач. подойдёт и под эту. лично я обычно использую spring framework, поэтому использовал бы его и в данном случае.
следует понимать, что сам по себе он при этом не несёт стопроцентно готовых решений по "поддержке скриптового языка" или "обеспечения безпасности", но позволяет выпилить и встроить в приложение как собственные поделки так и расширения его механизмов.
подводный камень, полагаю, на данном этапе виден ровно один и следует из того, что ты задаёшь этот вопрос: а именно, уверенного знания возможностей фреймворка у тебя в настоящий момент нет.
Здравствуйте, Alex912, Вы писали:
A>Здравствуйте, Orgy243, Вы писали:
A>Что пользователи делать будут? Просто подключаться к серверу?
A>Ну или если они что-то делать планируют, то как хранить состояние (на стороне сервера или клиента). A>Насколько ресурсоемкая логика планируется, имеет ли смысл что-то распаралеливать. Если что-то распаралеливать, то насколько важна согласованность данных итд, как разрешать конфликты?
A>Для чего планируется скриптовой язык?
A>Spring как и java в целом это всего лишь инструмент. Для меня вопрос звучит как выбрать аккамуляторную дрель Бош или Мокита.
1. Пользователи будут подключаться и активно производить операции над объектами в БД, т.е. читать, фильтровать, редактировать и сохранять. Цель системы – поддержка бизнес-процессов, которые создают/удаляют объект/объекты или изменяют их состояния.
2. Логика не сильно ресурсоемкая. Согласованность данных важна. Разные пользователи должны видеть как можно более согласованные данные для выполнения операций над ними. Разрешение конфликтов – вопрос открытый – м.б. через блокировку объектов или через слияние данных на сервере (если возможно), другие варианты
3. Скриптовый язык – для обеспечения возможности адаптации или расширения системы без изменения исходного кода. Например: добавление/изменение правил валидации объектов, добавление операций над объектами и правил их применения (enable/disable), добавление новых представлений объектов, изменение/добавление бизнес-процессов.
Здравствуйте, Orgy243, Вы писали:
O>1. Пользователи будут подключаться и активно производить операции над объектами в БД, т.е. читать, фильтровать, редактировать и сохранять. Цель системы – поддержка бизнес-процессов, которые создают/удаляют объект/объекты или изменяют их состояния.
Уже звучит интригующе. 5000 активных клиентов и операции над объектами в БД. БД, надеюсь NoSQL?
O>2. Логика не сильно ресурсоемкая. Согласованность данных важна. Разные пользователи должны видеть как можно более согласованные данные для выполнения операций над ними. Разрешение конфликтов – вопрос открытый – м.б. через блокировку объектов или через слияние данных на сервере (если возможно), другие варианты
Блокировку? А ну 5000 дружно начнут ставить блокировки. Ваши друзья это CAS и очереди задач.
O>3. Скриптовый язык – для обеспечения возможности адаптации или расширения системы без изменения исходного кода. Например: добавление/изменение правил валидации объектов, добавление операций над объектами и правил их применения (enable/disable), добавление новых представлений объектов, изменение/добавление бизнес-процессов.
Ох, чувствую, велосипед изобретаем.
Стоит задача написать такое приложение. Сидит штат Java разработчиков и их необходимо озадачить в нужном направление . Наткнулся на Spring и вроде понравился. Поэтому интересовало мнение специалистов в по данному фрейму.
1. Можно ли реализовать приложение с поддержкой до 5000 параллельно работающих пользователей? Что для этого надо сделать / не делать.
2. Реализация информационной безопасности на основе Spring Security – сильные/слабые стороны, лучшие практики.
3. Как реализовать Мультиарендность (англ. multitenancy — «множественная аренда») — элемент архитектуры программного обеспечения, где единый экземпляр приложения, запущенного на сервере, обслуживает множество организаций-клиентов («арендаторов») и поддержу развёртывания в публичных и частных облаках.
4. Как внедрить в систему поддержку скриптового языка для обеспечения возможности адаптации приложения без изменения исходного кода.
5. Как правильно реализовать поддержку пользовательского интерфейса для мобильных устройств на Sprige есть ли особая технология или нет.
Юзер стори
1. Пользователи будут подключаться и активно производить операции над объектами в БД, т.е. читать, фильтровать, редактировать и сохранять. Цель системы – поддержка бизнес-процессов, которые создают/удаляют объект/объекты или изменяют их состояния.
2. Логика не сильно ресурсоемкая. Согласованность данных важна. Разные пользователи должны видеть как можно более согласованные данные для выполнения операций над ними. Разрешение конфликтов – вопрос открытый – м.б. через блокировку объектов или через слияние данных на сервере (если возможно), другие варианты
3. Скриптовый язык – для обеспечения возможности адаптации или расширения системы без изменения исходного кода. Например: добавление/изменение правил валидации объектов, добавление операций над объектами и правил их применения (enable/disable), добавление новых представлений объектов, изменение/добавление бизнес-процессов.
Я понимаю, что на любом фрейме наверно можно сделать все что угодно, но встанет вопрос удобства, времени на изучение и.т.д. Поэтому если есть готовые решения, чтоб не изобретать "Велосипед",пожалуйста поделитесь вашим опытом и скажи на чем это реализовать лучше\удобнее\быстрее\надежней.
Здравствуйте, Orgy243, Вы писали:
O>1. Можно ли реализовать приложение с поддержкой до 5000 параллельно работающих пользователей? Что для этого надо сделать / не делать.
Можно. 5000 это число ни о чём не говорящее, но если это 100 запросов в секунду (1 запрос в минуту от каждого пользователя), это вообще не нагрузка для вменяемого приложения. В любом случае вопрос нагрузки ложится на базу, а что будет служить прослойкой между базой и пользователем — хоть Spring + Java, хоть Python, хоть PHP — на конечный результат большого влияния не окажет.
O>2. Реализация информационной безопасности на основе Spring Security – сильные/слабые стороны, лучшие практики.
Моё имхо — Spring Security (не Spring, а именно Spring Security, это отдельная библиотека) это очень переусложнённая библиотека. Я её несколько раз пытался использовать (правда это было несколько лет назад) и ни разу не получил от этого удовольствия. Проблем она мне приносила больше, чем решала. Но я не настаиваю на этом мнении, во-первых у меня не было сложных правил, во-вторых прошло много времени и там могло многое поменяться. В любом случае я бы посмотрел на аналоги, а также взвесил бы трудоёмкость реализации своего слоя безопасности, без специализированных библиотек.
O>3. Как реализовать Мультиарендность (англ. multitenancy — «множественная аренда») — элемент архитектуры программного обеспечения, где единый экземпляр приложения, запущенного на сервере, обслуживает множество организаций-клиентов («арендаторов») и поддержу развёртывания в публичных и частных облаках.
Ничего не понятно. Разворачивание приложения обычно — копируете .war-ку в томкат или запускаете через встроенный jetty. Опционально ставите nginx на входе. Хоть в облаках разворачивайте, хоть на ноутбуке, джаве без разницы.
O>4. Как внедрить в систему поддержку скриптового языка для обеспечения возможности адаптации приложения без изменения исходного кода.
Я не уверен, что вам это действительно надо. Лучше не усложняйте жизнь во много раз на ровном месте. Нет ничего страшного в изменении исходного кода, компиляция приложения занимает несколько минут максимум. Если сильно хочется — используйте JavaScript или Groovy, и то и то Java поддерживает. Сколько я сталкивался с такими "скриптовыми языками", которые якобы должны поддерживать специалисты, не умеющие программировать — нифига они не могут. В итоге их поддерживают полноценные программисты, матерясь на ограничения этих скриптов.
Ткну пальцем в небо: возможно вам нужна BPM. Для Java их полно, например http://activiti.org. Они позволяют кодировать бизнес-процессы в виде изменяемой пользователем конфигурации.
O>5. Как правильно реализовать поддержку пользовательского интерфейса для мобильных устройств на Sprige есть ли особая технология или нет.
Поддержка пользовательского интерфейса для мобильных устройств реализуется через CSS Media Queries, если мы говорим о веб-приложении. Это тема для фронтэнда, к бэкэнду (т.е. к Java, Spring) это не относится никак.
O>Я понимаю, что на любом фрейме наверно можно сделать все что угодно, но встанет вопрос удобства, времени на изучение и.т.д. Поэтому если есть готовые решения, чтоб не изобретать "Велосипед",пожалуйста поделитесь вашим опытом и скажи на чем это реализовать лучше\удобнее\быстрее\надежней.
Java, Spring это сложные технологии, не стоит их использовать без выделения значительного времени на обучение. Если ваши программисты не знают этого, получится полная фигня. Если вы только планируете набирать команду — это отличные технологии, которые позволяют сделать всё, что угодно. Но надо уметь их "готовить".
Здравствуйте, Orgy243, Вы писали:
O>Сидит штат Java разработчиков и их необходимо озадачить в нужном направление . Наткнулся на Spring и вроде понравился.
У вас штат Java разработчиков в криокамере сидит? Иначе я даже не знаю как объяснить фразу "Наткнулся на Spring". Это передовая Java технология уже лет 10.
O>1. Можно ли реализовать приложение с поддержкой до 5000 параллельно работающих пользователей? Что для этого надо сделать / не делать.
Можно. Для этого надо реализовать приложение масштабируемым, чтобы вы могли наращивать недорогой hardware для обслуживания желаемого количества пользователей.
O>2. Реализация информационной безопасности на основе Spring Security – сильные/слабые стороны, лучшие практики.
Поищите на форуме. Многие предпочитают Apache Shiro.
O>3. Как реализовать Мультиарендность (англ. multitenancy — «множественная аренда») — элемент архитектуры программного обеспечения, где единый экземпляр приложения, запущенного на сервере, обслуживает множество организаций-клиентов («арендаторов») и поддержу развёртывания в публичных и частных облаках.
Хороший вопрос. С одной стороны через то же слой Security можно. С другой стороны ничего не мешает на каждую организацию запустить по отдельному процессу чтобы обезопасить их данные.
O>4. Как внедрить в систему поддержку скриптового языка для обеспечения возможности адаптации приложения без изменения исходного кода.
Java поддерживает работу со скриптовыми языками. Внедрять особо ничего не нужно. Нужно понимать что скрипты это медленно. Нужен ли DSL?
O>5. Как правильно реализовать поддержку пользовательского интерфейса для мобильных устройств на Sprige есть ли особая технология или нет.
Spring не имеет никакого отношения GUI. Spring это универсальный интеграционный инструмент с интеграциями во все возможные технологии. Максимально кросс-платформенный GUI на данный момент это DHTML.
O>Я понимаю, что на любом фрейме наверно можно сделать все что угодно, но встанет вопрос удобства, времени на изучение и.т.д. Поэтому если есть готовые решения, чтоб не изобретать "Велосипед",пожалуйста поделитесь вашим опытом и скажи на чем это реализовать лучше\удобнее\быстрее\надежней.
С такими параметрами удобнее и быстрее всего написать на том что ваша команда инженеров лучше всего знает. Во многих из приведенных вопросов не так важен инструмент, как важен выбор архитектуры. Вот вы например хотите реализовать кучу операций на уровне БД. Это ОК, если конкурентные запросы сведены к минимуму. А вот если конкуренция за данные высока, то на много более эффективно её разруливать на стороне Java сервера. А в базу лишь скидывать результирующие снэпшоты состояний.
On 19.11.2015 17:24, Orgy243 wrote:
> Стоит задача написать такое приложение. Сидит штат Java разработчиков и > их необходимо озадачить в нужном направление . Наткнулся на Spring и > вроде понравился. Поэтому интересовало мнение специалистов в по данному > фрейму.
А вы в этом проекте кто? Спонсор, ПМ, архитектор? А то извините, но не
очень серьёзно звучит — программисты у вас как бараны молча "сидят", а
вы неожиданно открыли для себя одну из мэйнстримных джава технологий и
хотите их "озадачить".
> 1. Можно ли реализовать приложение с поддержкой до 5000 параллельно > работающих пользователей? Что для этого надо сделать / не делать.
Да, можно. Я лично участвовал в реализации таковых проектов как на
spring+tomcat+oracle, так и на обычном jee6 (weblogic+oracle) всё это
работает, но, конечно, не на одной машине. В обоих случаях использовался
фронтэнд (nginx), который маршрутизировал запросы к upstream и отдавал
всю статику, до которой мог дотянуться (html,js,css,картинки,флэш) и
sticky sessions.
Вопросы о том что конкретно надо для этого делать и чего не делать —
полностью зависят от конкретных задач. Из общих вещей надо отметить, что
приложение должно быть насколько это возможно stateless (и тут может
быть имеет даже смысл глянуть на play framework). Ну и вся НСИ должна
кэшироваться как на уровне JPA, так и на уровне REST на фронтэнде (тут
надо сразу продумать инвалидацию). Статичные справочники вообще не
класть в БД, оставив к коде как enum. Остальное зависит от задач.
> 2. Реализация информационной безопасности на основе Spring Security – > сильные/слабые стороны, лучшие практики.
Надо исходить из требований. Я на него несколько раз смотрел и ни разу
его в проект не взял. Пока у вас не спроектирована модель секьюрити
(роли, группы и т.п.) нет смысла выбирать фреймворк.
> 3. Как реализовать Мультиарендность (англ. multitenancy — «множественная > аренда») — элемент архитектуры программного обеспечения, где единый > экземпляр приложения, запущенного на сервере, обслуживает множество > организаций-клиентов («арендаторов») и поддержу развёртывания в > публичных и частных облаках.
Деплоите ваш war файл куда надо, настраиваете/добавляете на фронтэнде
маршрутизацию на него. При желании это легко автоматизируется bash
скриптами, можно docker подтянуть если надо.
> 4. Как внедрить в систему поддержку скриптового языка для обеспечения > возможности адаптации приложения без изменения исходного кода.
Keyword: nashorn. Необходимая поддержка javascript уже есть в jdk, не
надо ничего отдельно внедрять. Ну или groovy.
> 5. Как правильно реализовать поддержку пользовательского интерфейса для > мобильных устройств на Sprige есть ли особая технология или нет.
Спринг не имеет прямого отношения к UI — это дело bootstrap/angular и
иже с ними.
> Юзер стори
Про BPM вам уже сказали, возможно это вам пригодится.
Здравствуйте, hrensgory, Вы писали:
H>приложение должно быть насколько это возможно stateless (и тут может H>быть имеет даже смысл глянуть на play framework).
А какой play нынче моден ? А то многие сидят на первом и на 2-й не горят желанием перейти. Ну и с play одно время была ситуация, что приходилось в исходники лазить. Spring в этом плане гораздо лучше задокументирован.
Typesafe вообще для rest сервисов akka http рекламирует на конференциях (с back pressure итд). Правда пока еще релиз не вышел.
On 20.11.2015 12:21, Alex912 wrote:
> H>приложение должно быть насколько это возможно stateless (и тут может > H>быть имеет даже смысл глянуть на play framework). > > А какой play нынче моден ? А то многие сидят на первом и на 2-й не горят > желанием перейти.
Если писать на java, то думаю 1-й, на scala — 2-й. На последнем Joker
Conf был доклад неплохой про грабли Play. Слайды должны на сайте лежать,
может и видел выложат когда-нибудь.
> Ну и с play одно время была ситуация, что приходилось > в исходники лазить. Spring в этом плане гораздо лучше задокументирован.
Это точно.
> Typesafe вообще для rest сервисов akka http рекламирует на конференциях > (с back pressure итд). Правда пока еще релиз не вышел.
Akka для rest? Фигасе.
Всем спасибо за ответы.
Вы помогли составить более полную картину о мой задаче и помогли определиться с архитектурой и дальнейшими действиями.
Спасибо.
Здравствуйте, hrensgory, Вы писали:
H>Akka для rest? Фигасе.
Ага
The purpose of the Akka HTTP layer is to expose Actors to the web via HTTP and to enable them to consume HTTP services as a client. It is not an HTTP framework, it is an Actor-based toolkit for interacting with web services and clients.