Я работаю над сайтом, который вырос как с точки зрения пользовательской базы, так и функциональности, и стало очевидным, что некоторые задачи администратора должны быть отделены от общедоступного веб-сайта. Мне было интересно, как лучше всего это сделать.
Например, сайт имеет большой социальный компонент и интерфейс публичных продаж. Но в то же время в разделе администрирования есть задачи бэк-офиса, обработка массовой загрузки, информационные панели (с долго выполняющимися запросами) и инструменты взаимодействия с клиентами, на которые я бы не хотел повлиять всплесками общественного трафика (или на общедоступные). время отклика).
Сайт работает на довольно стандартном стеке Rails / MySQL / Linux, но я думаю, что это скорее проблема архитектуры, чем реализация: главным образом, как синхронизировать данные и бизнес-логику между этими различными приложениями
Некоторые стратегии, которые я оцениваю:
1) Создайте подчиненную базу данных общедоступной базы данных на другом компьютере. Извлеките весь код модели и библиотеки, чтобы ее можно было разделить между приложениями. Создайте новые контроллеры и представления для интерфейсов администратора.
У меня ограниченный опыт репликации, и я даже не уверен, что он должен использоваться таким образом (большую часть времени я видел его, он был предназначен для расширения возможностей чтения того же приложения, а не для разные). Меня также беспокоит вероятность возникновения задержек, если ведомое устройство не находится в той же сети.
2) Создание новых приложений для конкретных задач / отделов и использование промежуточного программного обеспечения, ориентированного на сообщения, для их интеграции. Некоторое время назад я читал паттерны интеграции предприятия, и они, похоже, выступают за это для распределенных систем. (В качестве альтернативы, в некоторых случаях может оказаться достаточной базовая функциональность RESTful API в стиле Rails.) Но у меня есть кошмары о проблемах синхронизации данных и масштабной ре-архитектуре, которую это повлечет за собой.
3) Некоторая смесь этих двух. Например, единственная общедоступная информация, необходимая для некоторых задач бэк-офиса, - это время или состояние завершения только для чтения. Имеет ли смысл иметь это в совершенно отдельной системе и отправлять данные в открытый доступ? Между тем, функциональность администратора пользователя / группы будет запускаться в отдельной системе, разделяющей базу данных? Недостатком является то, что это, кажется, сохраняет многие из проблем, которые у меня есть с первыми двумя, особенно реорганизация.
Я уверен, что ответы будут сильно зависеть от конкретных потребностей сайта, но я бы хотел услышать истории успеха (или неудачи).