|
|
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть следующая задача: Есть БД сервер, в котором хранятся данные с набором правил по формирования, допустим цен на товары. Существует много клиентов которые соединяются с этим БД сервером и каждый забирает свой набор правил. У каждого клиента(заказчика) устанавливается центральный сервер(приложение на 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 базы данных? Мои тесты показываю хорошие результаты, только в продакшене никогда не использовал. Заранее благодарен за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 13:50:10 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
На сколько большая база? Имеет ли смысл тупо реплицировать все изменения с центальной базы на локальные? У нас похожая схема, но у нас очень много бизнес-логики завязано на синхронизацию Поэтому пилим свой движок. Но если нужна не сложная репликация то есть opensource решения даже для JDBC. Зачем тут JMS не очень понятно. Клиенты не должны видеть данных друг-друга? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 13:54:01 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Xsl, Непонятно требование: Как можно быстрее(он-лайн) <----> Нет связи. Вариант: - убрать из клиентов свою собственную БД (вместо толстого-тонкий) -репликация центрального сервера с клиентскими серверами в локальной сети заказчка А, Б. С - в локальной устойчивой сети тонкие клиенты СРАЗУ получают актуальные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 14:08:30 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
если БЛ в БД, то реплика штатными средствами БД (очереди и JMS не нужен) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 14:09:47 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
В общем случае, JMS для данной задачи - решение "из коробки", всё остальное - самоделки. Это не значит, что кастомное решение будет работать хуже, надо смотреть на реальные условия эксплуатации, но по бюджетам выйдет, скорее всего, дороже. Задача для вашего PM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 17:08:28 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
ivanraВ общем случае, JMS для данной задачи - решение "из коробки", всё остальное - самоделки. Это не значит, что кастомное решение будет работать хуже, надо смотреть на реальные условия эксплуатации, но по бюджетам выйдет, скорее всего, дороже. Задача для вашего PM Из какой ещё, блин, "коробки"? JMS никак данные не синхронизирует. Всё надо будет самому писать ещё, и мессаги создавать и данные в них запаковывать и потом распознавать их на UPDATE/INSERT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 17:10:02 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
ivanraВ общем случае, JMS для данной задачи - решение "из коробки", всё остальное - самоделки. Это не значит, что кастомное решение будет работать хуже, надо смотреть на реальные условия эксплуатации, но по бюджетам выйдет, скорее всего, дороже. Задача для вашего PM Мартин на вас смотрит с негодованием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 17:14:06 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Добрый день, Xsl! > Возможно есть другие варианты синхронизации? Может я ошибаюсь по поводу JMS? Задача делится на несколько слоёв. 1. Сформировать список изменений в головной БД. 2. Передать этот список на клиента. 3. Применить его на клиенте. Первое- обычно триггера на SQL, или аналогичная штука в Hibernate. Главное- гарантировано получить упорядоченный список изменений. Ну и, как вариант, расставлять в списке коммиты (чтобы связанные изменения никогда не приехали раздельно). Второе- можно использовать и JMS. Клиент может просто подключатся к БД читать свой список изменений (или читать общий и помечать по мере применений). Когда полключаться- при каждом старте, или каждый 10 минут- дело хозяйское. Третье тривиально- список изменений есть, надо его применить (с учётом транзакций). Использовать ли JMS- вопрос не самый главный (уровень 2). Для односторонней синхронизации я б сказал, что нет. Счастье от JMS наступает, когда менять могут все. Вот тогда JMS имеет реальные плюсы. -- Алексей Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 17:37:03 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
нда. Репликация руками...особенно мастер-мастер....не в магазин сходить. Интересно, почему у автора инет у клиента не работает, а прайсы всё-таки нужны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 19:51:16 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Petro123нда. Репликация руками...особенно мастер-мастер....не в магазин сходить. Интересно, почему у автора инет у клиента не работает, а прайсы всё-таки нужны? Похоже речь идет о мобильных девайсах когда вай-фай не всегда присутствует. Тогда только синхронизация контента работает когда девайс находит вай-фай или тупо подсоединен к инету. Мы у нас в лавочке используем эту примочку, автору вряд ли поможет, но для общего кругозора вполне может сгодится http://dev.day.com/docs/en/cq/5-5/developing/mobile/contentsync.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2013, 20:01:07 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНа сколько большая база? Имеет ли смысл тупо реплицировать все изменения с центальной базы на локальные? Не большая. Порядка 200000 позиций и 100-500 сложных схем правил обработки. BlazkowiczУ нас похожая схема, но у нас очень много бизнес-логики завязано на синхронизацию Поэтому пилим свой движок. А что за движок? Могли бы Вы описать по подробнее? BlazkowiczНо если нужна не сложная репликация то есть opensource решения даже для JDBC. Можете привести пример? Скажите пожалуйста, на сколько корректно делать репликация в случае если клиентов будет порядка 100-500(в зависимости от заказчика)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:00:29 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:07:04 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Может вам и не обязательно репликацию делать. Можно сделать так чтобы клиенты конектились напрямую к центральной базе и каждый читал из неё то что ему надо. 500 клиентов на чтение, в принципе, фигня. А чтобы минимизировать чтение, клиенты должны уменять кешировать прочитаное в локальной базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:08:58 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Моей основной целью является понять как передать клиентам список изменений, с учетом что каждый из них может получить их в разное время. По сути, данные у всех клиентов будут одинаковые. Вариант с репликацией кажется самым простым, но меня смущает что репликация будет работать на большое кол-во баз(как я уже говорил 100-500). Как она себя поведет, да и еще и H2 DB, не понятно. Помимо этого, очень хотелось бы что бы сессии каждого клиента не висели на сервере, дабы не перегружать его лишний раз. Как вариант, организовать что-то типа svn'а: На главном сервере формируется таблица(триггерами) ревизий изменений, с сылками на таблицы и их ID. У клиента прямой доступ к базе главного сервера и он проверяет только эту таблицу, с учетом того что он хранит у себя идентификатор последней загруженной ревизии. В случае если ревизии разные на сервере и клиенте, клиент выгружает список изменений, формирует набор запроссов и отправлет на сервер. Что думаете? P.S. обратная связь от клиентов к серверу будет. Они будут писать что-то типа лога, в котором будет указана какое из правил было применено и при каких условиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:18:02 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Xsl, На мой взгляд можно попробовать так: 1. На сервере создается JMS-очередь (тема) публикация/подписка. Одна очередь, а на неё подписывается нужное кол-во клиентов. Очередь должна быть долгосрочная с гарантированной доставкой. 2. На сервере с помощью триггеров или обработкой логов базы данных получаются события (вставка, изменение, удаление), преобразуются в XML и помещаются в очередь (публикуются). 3. Клиенты периодически подключаются к очереди, вычитывает свои сообщения и применяют на своей базе. Однако в этом случае возможны различные сбои и потери событий. И нужно предусмотреть режим полного восстановления данных с сервера (синхронизацию). Т.о. придётся реализовывать и режим событий, и полную синхронизацию (для первоначального заполнения и восстановления в случае сбоя). А выигрыш от событий только в скорости обработки на больших объёмах, если синхронизация выполняется недопустимо долго. Обычно в хранилищах данных используется такой подход: в течении дня идёт получение и обработка только изменений от источника(ов) данных, а ночью (раз в неделю/месяц - в зависимости от качества работы событийного механизма) выполняется полная синхронизация данных - для выравнивания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:38:20 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
pulp1. На сервере создается JMS-очередь (тема) публикация/подписка. Одна очередь, а на неё подписывается нужное кол-во клиентов. Очередь должна быть долгосрочная с гарантированной доставкой. 2. На сервере с помощью триггеров или обработкой логов базы данных получаются события (вставка, изменение, удаление), преобразуются в XML и помещаются в очередь (публикуются). 3. Клиенты периодически подключаются к очереди, вычитывает свои сообщения и применяют на своей базе. Вот благодаря таким и получаются мега сложные решения, там где они нафиг не нужны. Тут задача сводиться к тому что клиент может ходить в локальную базу и в удаленную. Базы похожи. Всё. Нахрен тут асинхронность с очередями? Какой ещё нафиг XML в 2013 году??? Совсем уже? Нафиг клиенту читать из очереди, если он с тем же успехом может сделать SELECT запрос к центральной базе с заданными параметрами?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:41:04 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Я и попытался описать плюсы и минусы реализации событийного механизма. А автор пусть решает, как делать. Кстати XML хоронить не надо, используется он ещё, и будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:45:40 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
pulpКстати XML хоронить не надо Ну-ка, ну-ка. Давайте послушаем аргументированые коментарии в каких случаях XML лучше JSON и бинарных протоколов. pulpиспользуется он ещё В legacy системах и в Microsoft для галочки. Потому что из .NET в свои сервисы они ходят напрямую. А из других систем с ними интегрироваться через SOAP это самоубийтсво. pulp, и будет. Угу. Обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:50:56 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
давайте разберёмся: - почему 100 баз клиентов? Почему нельзя сделать клиентов лёгкими? Где именно неустойчивая связь? - марка центральной БД? Т.к. есть БД с уже готовой репликацией вплоть до почтой и курьером. - мастер-мастер двустороннюю репликацию руками, если и делать, то очень геморройно. Что такое клиент? Это гос-тайна? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:55:33 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ну на десятки лет вперед смотреть сложно, но на данный момент для интеграции разнородных приложений на различных платформах и БД сложно будет без XML. ИМХО А в вебе возможно, я в этом не очень сведущ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:56:13 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
додумаю за автора: 1 вар. - неустойчивый вай-фай. А продавать товар надо в соседнем складе с Андроида-тела 2 вар. - Магазин в урюпинске. Связь с Москвой неустойчивая. А в самом магазине ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:58:27 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
pulp, пока разнородности не видел в ТЗ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:59:34 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
pulpНу, на десятки лет вперед смотреть сложно, но на данный момент для интеграции разнородных приложений на различных платформах и БД сложно будет без XML. Есть protobuf и hessian, реализации которых есть под все распространенные платформы. При этом значительно быстрее самых производительных XML процессоров, а про размер данных я даже молчу. Для interop XML нафиг не нужен. Для web тоже. Персистить в нем данные при общении Java-to-Java так вообще клиника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 10:59:56 |
|
||
|
Клиент-серверное приложение. Как лучше?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, он только в SOAP и конфигах остался) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2013, 11:03:56 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38271509&tid=2129298]: |
0ms |
get settings: |
13ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
42ms |
get topic data: |
15ms |
get forum data: |
5ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 289ms |
| total: | 487ms |

| 0 / 0 |
