У меня есть три входящих проекта, которые имеют общую проблему:
им нужно иметь логику в веб-системе, и им нужно локальное приложение (например, торговая точка), которое связывается с такой системой через веб-сервис RESTful.
Мое решение
Решение , которое я смог придумать, чтобы реализовать в настольных приложениях очередей сообщений для торговых операций , а обслуживание в автономном режиме, более точно, асинхронные очереди сообщений . Тем не менее, это самая простая часть (если это лучшее решение). Я также занимаюсь синхронизацией данных и разрешением конфликтов.
Основная система должна быть веб-ориентированной, поскольку для отчетов и мониторинга заинтересованными сторонами требуется веб-приложение, а веб-службы будут обрабатывать запросы нескольких учреждений.
Настольные клиенты (желательно тонкие) будут реализованы с Java (точнее, с Netbeans), а веб-система с Symfony2. Два из этих проектов требуют аппаратной интеграции для клиента, поэтому создание настольного приложения с веб-технологией (например, Appcelerator Titanium) может оказаться серьезной проблемой.
Мой вопрос
Что является лучшим решением, которое масштабируется, что означает максимальную эффективность с минимальными усилиями (и предпочтительно без дополнительных затрат, например, покупка сервера резервного копирования для локальной работы)?
Кто еще имел дело с этим раньше? Как вы решили свою проблему? Какие уроки вы можете поделиться?
Как вы справились с синхронизацией?
Изменить: Добавил недостающую часть в мой вопрос в пункте № 3
источник
Делайте все локально и периодически синхронизируйте .
Вот что я бы сделал, если бы я был тобой (я не знаю об инфраструктуре синхронизации в Java, как у нас в .NET).
Сохраните временную метку в локальном приложении, которая будет содержать время последнего успешного подключения.
Независимо от времени повторного подключения эта временная метка будет использоваться для извлечения новых данных, а затем для отправки новых заказов, созданных локально.
Затем вы будете поддерживать две метки времени. Один, чтобы определить, когда заказ был создан (локально или онлайн), и один, когда он был записан сервером.
Я не рекомендую очереди сообщений для этого. В прошлом я использовал MQ для сайта электронной коммерции, который должен был быть подключен к Navision. Все работало в Navision, а изменения отправлялись на веб-сайт электронной коммерции через MQ, включая статус заказа и все, включая описания продуктов, цены и т. Д. Новые заказы также отправлялись в Navision через MQ.
источник
Или вы должны взглянуть на время от времени связанные реализации баз данных систем, которые выполняют основную работу по синхронизации удаленных клиентов с сервером. (SQL Server в некоторой степени поддерживает SQL CE, Outlook это делает).
Таким образом, вы можете делать все свои изменения локально в небольшой базе данных (она поддерживает управление версиями / логические метки времени и т. Д., Чтобы вам не приходилось беспокоиться о часах ПК и т. Д.), И всякий раз, когда вы выходите в интернет, вы синхронизируете это с основной сервер.
Я бы не стал использовать REST-решение, когда система большую часть времени не может быть подключена к сети.
источник