Суть — сайт платных объявлений о продаже недвижимости. Интересует, насколько разумно использовать архитектуру, описанную ниже.
Основную часть работы по размещению объявлений осуществляют менеджеры из офиса, также критично чтобы актуальная база объявлений и все данные о платежах содержались в одном контролируемом месте. При этом в вебе для подателей объявлений должно быть реализовано некое подобие личного кабинета, где они могли бы править свои объявления.
Предлагается полную БД со всеми данными проекта вести внутри офиса на какой-либо СУБД/CRM, а в интернете держать лишь отражение/зеркало данных, необходимых для работы сайта.
Данные синхронизируются из БД в веб при изменениях, а также из веба в БД при изменениях клиентами из своих личных кабинетов. Предполагается, что процесс должен быть относительно оперативным (скажем, 5 минутная задержка позволяется).
В СУБД/CRM формируется очередь запросов/команд на обновление, которые отправляются в интернет по крону. Аналогичная очередь есть на стороне веб-сайта, она содержит данные, которые были изменены из личных кабинетов и которые нужно внести в СУБД/CRM.
Запросы в обоих очередях движутся по запуску ботов-воркеров и в зависимости от результатов выполнения помечаются как выполненные/невыполненные. Делается это чтобы не потерять какие-либо изменения и в случае чего видеть какие запросы не отработали как «сверху» (с сайта) так и снизу (из CRM).
Файлы (фото) синхронизируются простым копированием, скажем, посредством rsync по FTP или типа того.
Все (объявления, данные о платежах и бизнес-логику взаиморасчетов) держать в интернете не хочется: данные коммерчески критичные. Плюс в случае сбоев хотелось бы чтобы в офисе оставался актуальный набор данных и с ним можно было продолжать работу до восстановления соединения, после чего накопившиеся запросы уходили бы из очереди на сайт.
Предполагается, что при такой схеме может быть обеспечен быстрый переезд офиса и сайта.
Так — нормально? Может есть какие-то более разумные практики и решения?
Буду благодарен за любые мнения, даже сугубо скептические.
База в вебе — mysql или postgresql (обсуждаемо, некритично, не видим проблемы в том чтобы поменять ее в будущем на что-то более подходящее).
База внутри — access или filemaker.
Мысль дать менеджерам доступ через веб и не париться с внутренней БД была, но что делать, если оборвется инет в офисе? Простои недопустимы. Менеджеры должны продолжать работу даже при лежащем соединении.
Опять же, не хочется выносить на какие-то левые сервера в интернете бухгалтерию, а интеграция с ней будет, И лучше, если она будет внутри офиса.
В интернете фактически планируется только веб-морда с отражением состояния.
Кажется, вы чего-то не понимаете: даже если один написан один web-интерфейс пользователи снаружи будут до него стучаться по внешнему IP, пользователи же локальной сети — по локальному адресу ресурса (грубо говоря: example.com/app vs localhost/app). Так что проблема падения интернета волновать вас не должна.
PS Это в том случае если сервер с приложением установден в офисе
Не сложно ли? Как будете синхронизировать операции над данными?
Лучше сделать так: менеджер из офиса и пользователь из интернета работает с одним web-интерфейсом (=одной программой). Соответственно, имеют доступ к схеме базы (кто-то на запись, кто-то на чтение). Выделяются две схемы — одна доступная из приложения, вторая — нет. Общение между двумя схемами идёт по какому-нибудь протоколу и только внутри. Получаем: один код для работы пользователей с базой, разделение схем по уровню доступа.
Не думаю, что сложно. Два набора данных, две очереди, данные циркулируют туда-сюда. Синхронизация простая: если данные правятся из личного кабинета, они имеют приоритет. В остальных случаях правят менеджеры.
По второму абзацу высказал сомнения в уточнениях выше.
В случае конфликта изменений как я понимаю планируете всегда разрешать конфликты в пользу клиентских данных?
Еще вопрос о технической стороне — если меняется текстовое описание объявление одновременно клиентом и менеджером, например клиент отредактировал первый абзац, менеджер второй — будут ли изменения применены к обоим базам корректно или менеджерская правка потеряется?
Что есть менеджер и клиент отредактировали вместе один абзац?