Лучший способ разделить администраторскую функциональность от общедоступного сайта?

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

Например, сайт имеет большой социальный компонент к нему и общедоступный интерфейс продаж. Но в то же время существуют задачи бэк-офиса, объемная обработка загрузки, панели инструментов (с длительными запросами), и инструменты отношений с клиентами в администраторском разделе, что я хотел бы не быть произведенным скачками в общедоступном трафике (или произвел бы общедоступное время отклика).

Сайт работает на довольно стандартном стеке Rails/MySQL/Linux, но я думаю, что это - больше проблемы архитектуры, чем реализация один: главным образом, как каждый сохраняет данные и бизнес-логику в синхронизации между этими различными приложениями?

Некоторые стратегии, которые я оцениваю:

1) Создайте ведомую базу данных общедоступной базы данных по другой машине. Извлечение вся модель и библиотека кодирует так, чтобы это могло быть совместно использовано приложениями. Создайте новые контроллеры и представления для администраторских интерфейсов.

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

2) Создайте новый больше task/department-specific приложений и используйте ориентированное промежуточное программное обеспечение сообщения для интеграции их. Я считал Шаблоны Интеграции Предприятия некоторое время назад, и они, казалось, защищали это для распределенных систем. (С другой стороны, в некоторых случаях основной стиль направляющих УСПОКОИТЕЛЬНАЯ функциональность API мог бы быть достаточным.), Но, у меня есть кошмары о проблемах синхронизации данных и крупном перепроектировании, которое это повлекло бы за собой.

3) Немного смеси двух. Например, единственная общедоступная информация, необходимая для некоторых задач бэк-офиса, является временем завершения только для чтения или состоянием. Имело бы смысл иметь это в абсолютно отдельной системе и отправлять данные общественности? Между тем администраторская функциональность пользователя/группы была бы выполнена в отдельной системе, совместно использующей базу данных? Оборотная сторона, это, кажется, сохраняет многие проблемы, которые я имею с первыми двумя, особенно перепроектирование.

Я уверен, что ответы будут очень зависящими от определенных потребностей сайта, но я хотел бы услышать успех (или отказ) истории.

9
задан AndrewO 10 May 2010 в 17:38
поделиться

2 ответа

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

Главное - получить хорошее представление о том, какие данные используются, где и как данные участвуют в процессе. Если вы можете это сделать, попробуйте определить, можете ли вы сделать одну базу данных «ведущей». Это будут ваши данные в реальном времени, а другая база данных будет вашим хранилищем операционных данных (ODS). ODS всегда является производным от ваших данных в реальном времени. Процесс обновления ODS из оперативных данных может происходить с интервалом и может как упростить данные, так и выполнить дополнительную обработку, чтобы сделать их более подходящими для приложения, использующего ODS.

Теперь, если вы обнаружите, что это будет большой скачок для вашей текущей ситуации, вы можете попытаться хотя бы разделить данные в базе данных, чтобы у вас не было проблем с производительностью, таких как блокировки таблиц и т. Д. Это также может быть шагом в правильном направлении, если в будущем вам потребуется перейти на модель, подобную ODS.

3
ответ дан 5 December 2019 в 01:42
поделиться

Я не сторонник копирования того, что не нужно. Я бы пометил то, что только для администраторов, и создал бы эту часть как отдельную БД с внутренним IP или другим портом. Затем создайте отношения внешних ключей с публичным сайтом для доступа администратора. Обращение с ней как с индексированной таблицей было бы намного проще в администрировании, а не в тиражировании и разработке API - это ненужная задача, когда вы не общаетесь с унаследованными системами. Кроме того, зачем тиражировать, если вы хотите сохранить раздельные системы. Вот мои два цента.

0
ответ дан 5 December 2019 в 01:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: