powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиент-серверное приложение. Как лучше?
25 сообщений из 33, страница 1 из 2
Клиент-серверное приложение. Как лучше?
    #38270009
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
Всем привет!

Есть следующая задача:

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

У каждого клиента(заказчика) устанавливается центральный сервер(приложение на Java + H2 Embedded DB), которое хранит в себе этот набор правил.
На каждом рабочем месте клиента(заказчика), устанавливается клиентское приложение(API, Java + H2 Embedded DB), которое хранит в себе этот же набор правил по формированию цен и постоянно синхронизируется с центральным сервером.
Задача клиентского приложения, получить ID товара, "пропустить" через все правила и вернуть требуемую цену.

Вопрос следующий...
Как лучше всего организовать синхронизацию между центральным сервером заказчика и его клиентскими приложениями, с учетом того что правила сформированные на центральном сервере должны как можно быстрее попасть клиенту(API)?
Клиентское приложение, не всегда будет online с центральным сервером(даже не будет работать). И в момент его включения, все данные сформированые за время его отсутствия, должны ему попасть в H2 DB.

Первое что приходит в голову, на центральном сервере ставим JMS сервер, и создаем для каждого клиента свою очередь.
Но использовать JMS, например ActiveMQ как-то не хочется из-за его грамозткости...

Возможно есть другие варианты синхронизации? Может я ошибаюсь по поводу JMS?

Как вариант замены JMS, рассматриваю HTTP сервер(Embedded Jetty), к которому соединяются клиенты(long polling) и работают по похожему принцыпу как и с JMS, только контроль отправленых данных клиенту я веду самостоятельно в H2 DB.

Что Вы думаете об этом подходе? Насколько он правильный? Была ли у Вас практика работы с таким подходом?



Что скажете по поводу H2 как embedded базы данных? Мои тесты показываю хорошие результаты, только в продакшене никогда не использовал.

Заранее благодарен за помощь!
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270025
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько большая база? Имеет ли смысл тупо реплицировать все изменения с центальной базы на локальные?
У нас похожая схема, но у нас очень много бизнес-логики завязано на синхронизацию Поэтому пилим свой движок.
Но если нужна не сложная репликация то есть opensource решения даже для JDBC. Зачем тут JMS не очень понятно. Клиенты не должны видеть данных друг-друга?
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270058
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xsl,
Непонятно требование:
Как можно быстрее(он-лайн) <----> Нет связи.
Вариант:
- убрать из клиентов свою собственную БД (вместо толстого-тонкий)
-репликация центрального сервера с клиентскими серверами в локальной сети заказчка А, Б. С
- в локальной устойчивой сети тонкие клиенты СРАЗУ получают актуальные данные.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270062
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если БЛ в БД, то реплика штатными средствами БД (очереди и JMS не нужен)
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270488
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем случае, JMS для данной задачи - решение "из коробки", всё остальное - самоделки. Это не значит, что кастомное решение будет работать хуже, надо смотреть на реальные условия эксплуатации, но по бюджетам выйдет, скорее всего, дороже. Задача для вашего PM
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270492
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraВ общем случае, JMS для данной задачи - решение "из коробки", всё остальное - самоделки. Это не значит, что кастомное решение будет работать хуже, надо смотреть на реальные условия эксплуатации, но по бюджетам выйдет, скорее всего, дороже. Задача для вашего PM
Из какой ещё, блин, "коробки"? JMS никак данные не синхронизирует. Всё надо будет самому писать ещё, и мессаги создавать и данные в них запаковывать и потом распознавать их на UPDATE/INSERT.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270498
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraВ общем случае, JMS для данной задачи - решение "из коробки", всё остальное - самоделки. Это не значит, что кастомное решение будет работать хуже, надо смотреть на реальные условия эксплуатации, но по бюджетам выйдет, скорее всего, дороже. Задача для вашего PM

Мартин на вас смотрит с негодованием.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270547
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, Xsl!

> Возможно есть другие варианты синхронизации? Может я ошибаюсь по поводу JMS?

Задача делится на несколько слоёв.

1. Сформировать список изменений в головной БД.
2. Передать этот список на клиента.
3. Применить его на клиенте.

Первое- обычно триггера на SQL, или аналогичная штука в Hibernate.
Главное- гарантировано получить упорядоченный список изменений.
Ну и, как вариант, расставлять в списке коммиты (чтобы связанные
изменения никогда не приехали раздельно).

Второе- можно использовать и JMS. Клиент может просто подключатся к БД
читать свой список изменений (или читать общий и помечать по мере
применений). Когда полключаться- при каждом старте, или каждый 10 минут-
дело хозяйское.

Третье тривиально- список изменений есть, надо его применить (с учётом
транзакций).

Использовать ли JMS- вопрос не самый главный (уровень 2).
Для односторонней синхронизации я б сказал, что нет.
Счастье от JMS наступает, когда менять могут все.
Вот тогда JMS имеет реальные плюсы.

--
Алексей
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270782
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нда. Репликация руками...особенно мастер-мастер....не в магазин сходить.
Интересно, почему у автора инет у клиента не работает, а прайсы всё-таки нужны?
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38270804
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123нда. Репликация руками...особенно мастер-мастер....не в магазин сходить.
Интересно, почему у автора инет у клиента не работает, а прайсы всё-таки нужны?

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

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

http://dev.day.com/docs/en/cq/5-5/developing/mobile/contentsync.html
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271348
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
BlazkowiczНа сколько большая база? Имеет ли смысл тупо реплицировать все изменения с центальной базы на локальные?

Не большая. Порядка 200000 позиций и 100-500 сложных схем правил обработки.
BlazkowiczУ нас похожая схема, но у нас очень много бизнес-логики завязано на синхронизацию Поэтому пилим свой движок.
А что за движок? Могли бы Вы описать по подробнее?
BlazkowiczНо если нужна не сложная репликация то есть opensource решения даже для JDBC.
Можете привести пример?

Скажите пожалуйста, на сколько корректно делать репликация в случае если клиентов будет порядка 100-500(в зависимости от заказчика)?
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271361
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Xsl,
Вот эту, по-моему нахваливали в интернетах
http://www.symmetricds.org/
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271370
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может вам и не обязательно репликацию делать.
Можно сделать так чтобы клиенты конектились напрямую к центральной базе и каждый читал из неё то что ему надо.
500 клиентов на чтение, в принципе, фигня.
А чтобы минимизировать чтение, клиенты должны уменять кешировать прочитаное в локальной базе.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271399
Xsl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xsl
Гость
Моей основной целью является понять как передать клиентам список изменений, с учетом что каждый из них может получить их в разное время.
По сути, данные у всех клиентов будут одинаковые. Вариант с репликацией кажется самым простым, но меня смущает что репликация будет работать на большое кол-во баз(как я уже говорил 100-500). Как она себя поведет, да и еще и H2 DB, не понятно.

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

Как вариант, организовать что-то типа svn'а:
На главном сервере формируется таблица(триггерами) ревизий изменений, с сылками на таблицы и их ID.
У клиента прямой доступ к базе главного сервера и он проверяет только эту таблицу, с учетом того что он хранит у себя идентификатор последней загруженной ревизии.
В случае если ревизии разные на сервере и клиенте, клиент выгружает список изменений, формирует набор запроссов и отправлет на сервер.

Что думаете?

P.S. обратная связь от клиентов к серверу будет. Они будут писать что-то типа лога, в котором будет указана какое из правил было применено и при каких условиях.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271449
pulp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Xsl,

На мой взгляд можно попробовать так:
1. На сервере создается JMS-очередь (тема) публикация/подписка. Одна очередь, а на неё подписывается нужное кол-во клиентов. Очередь должна быть долгосрочная с гарантированной доставкой.
2. На сервере с помощью триггеров или обработкой логов базы данных получаются события (вставка, изменение, удаление), преобразуются в XML и помещаются в очередь (публикуются).
3. Клиенты периодически подключаются к очереди, вычитывает свои сообщения и применяют на своей базе.

Однако в этом случае возможны различные сбои и потери событий. И нужно предусмотреть режим полного восстановления данных с сервера (синхронизацию). Т.о. придётся реализовывать и режим событий, и полную синхронизацию (для первоначального заполнения и восстановления в случае сбоя). А выигрыш от событий только в скорости обработки на больших объёмах, если синхронизация выполняется недопустимо долго.

Обычно в хранилищах данных используется такой подход: в течении дня идёт получение и обработка только изменений от источника(ов) данных, а ночью (раз в неделю/месяц - в зависимости от качества работы событийного механизма) выполняется полная синхронизация данных - для выравнивания.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271457
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pulp1. На сервере создается JMS-очередь (тема) публикация/подписка. Одна очередь, а на неё подписывается нужное кол-во клиентов. Очередь должна быть долгосрочная с гарантированной доставкой.
2. На сервере с помощью триггеров или обработкой логов базы данных получаются события (вставка, изменение, удаление), преобразуются в XML и помещаются в очередь (публикуются).
3. Клиенты периодически подключаются к очереди, вычитывает свои сообщения и применяют на своей базе.

Вот благодаря таким и получаются мега сложные решения, там где они нафиг не нужны.
Тут задача сводиться к тому что клиент может ходить в локальную базу и в удаленную. Базы похожи. Всё. Нахрен тут асинхронность с очередями? Какой ещё нафиг XML в 2013 году??? Совсем уже? Нафиг клиенту читать из очереди, если он с тем же успехом может сделать SELECT запрос к центральной базе с заданными параметрами??
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271471
pulp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Я и попытался описать плюсы и минусы реализации событийного механизма. А автор пусть решает, как делать.

Кстати XML хоронить не надо, используется он ещё, и будет.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271485
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pulpКстати XML хоронить не надо
Ну-ка, ну-ка. Давайте послушаем аргументированые коментарии в каких случаях XML лучше JSON и бинарных протоколов.

pulpиспользуется он ещё
В legacy системах и в Microsoft для галочки. Потому что из .NET в свои сервисы они ходят напрямую. А из других систем с ними интегрироваться через SOAP это самоубийтсво.

pulp, и будет.
Угу. Обязательно.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271494
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
давайте разберёмся:
- почему 100 баз клиентов? Почему нельзя сделать клиентов лёгкими? Где именно неустойчивая связь?
- марка центральной БД? Т.к. есть БД с уже готовой репликацией вплоть до почтой и курьером.
- мастер-мастер двустороннюю репликацию руками, если и делать, то очень геморройно.

Что такое клиент? Это гос-тайна? ))
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271495
pulp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Ну на десятки лет вперед смотреть сложно, но на данный момент для интеграции разнородных приложений на различных платформах и БД сложно будет без XML. ИМХО
А в вебе возможно, я в этом не очень сведущ.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271504
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
додумаю за автора:
1 вар. - неустойчивый вай-фай. А продавать товар надо в соседнем складе с Андроида-тела
2 вар. - Магазин в урюпинске. Связь с Москвой неустойчивая. А в самом магазине ОК.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271508
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pulp,
пока разнородности не видел в ТЗ
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271509
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pulpНу, на десятки лет вперед смотреть сложно, но на данный момент для интеграции разнородных приложений на различных платформах и БД сложно будет без XML.
Есть protobuf и hessian, реализации которых есть под все распространенные платформы. При этом значительно быстрее самых производительных XML процессоров, а про размер данных я даже молчу. Для interop XML нафиг не нужен. Для web тоже. Персистить в нем данные при общении Java-to-Java так вообще клиника.
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271519
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
он только в SOAP и конфигах остался)
...
Рейтинг: 0 / 0
Клиент-серверное приложение. Как лучше?
    #38271526
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123он только в SOAP
SOAP не нужен.

Petro123и конфигах остался)
В XML конфиги только ленивый не плюнул. Все кто могут пытаются делать на скриптах теперь.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Клиент-серверное приложение. Как лучше?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]