2010-06-27 3 views
0

Я планирую веб-приложение CRM.Какую архитектуру я должен выбрать для веб-CRM-приложения?

Целевыми пользователями будут небольшие фирмы с несколькими сотнями клиентов. Я планирую использовать Rails framework и Rackspace Cloud Server/Amazon EC2 для хостинга.

Поскольку данные будут конфиденциальными, я бы предпочел не использовать одну базу данных для всех пользователей. Означает ли это, что мне придется запускать новый экземпляр моего приложения rails с отдельной базой данных для каждого клиента с каждым приложением, привязанным к поддомену? Или есть обходной путь?

Другой вопрос. Если мне нужно создать новый экземпляр приложения rails для каждого клиента, сколько экземпляров может поддерживать достойный размер EC2 [около 2 ГБ оперативной памяти, 2 ГГц процессор]? [100 операций чтения/записи на экземпляр в день].

ответ

1

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

Однако я также хотел бы взглянуть на схемы Postgresql. Используя схему, вы можете разделить одну базу данных на несколько уникальных схем с контролируемым доступом.

Подробнее здесь: Should I use multiple databases?.

Что касается второй части вашего вопроса относительно количества экземпляров - это действительно будет зависеть от самого приложения и от того, сколько оперативной памяти оно использует. 100 операций чтения/записи в день настолько малы, что не имеют значения, поэтому ОЗУ является оператором. «Среднее» приложение Rails будет использовать что-либо от 20-100mb за экземпляр, поэтому сервер на 2 ГБ должен иметь возможность запускать довольно много. Конечно, ваше развертывание станет довольно сложным, так как вам нужно будет работать в среде виртуального хостинга, чтобы эффективно использовать эту настройку.

Мой голос определенно будет для одного приложения.

1

Во-первых, что касается рамки, используйте то, что делает жизнь проще для вас, для меня Rails - это билет.

Я бы не рекомендовать создание отдельных баз данных/рельсов на одного клиента. С хорошим разрешением, как и следовало ожидать, приложение, как вы описали, вы можете предотвратить любой доступ к unorthorized пунктов без особых проблем.

Кроме того, запуск многих экземпляров Rails «забивает» вашу систему с использованием в основном потраченных впустую ресурсов.

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

+0

Спасибо за ответ :-) – Jagira

+0

В этом случае сбой базы данных затронет всех клиентов. – Jagira

+0

Этого не нужно.Во-первых, вы можете клонировать базу данных с помощью онлайн-запасных. Разумеется, если у вас нет резервной копии/резервной копии, у вас все равно будет один разгневанный клиент. – thomasfedb

2

Это не относится к Rails, но вы действительно должны прочитать multitenancy, который я рекомендую для вашего приложения. Вместо того, чтобы поддерживать экземпляр вашего кода на одного клиента, вы поддерживаете один экземпляр, который знает, что он поддерживает несколько клиентов. Я не просмотрел его, но мне удалось найти conference talk о написании многопользовательских приложений в Ruby/Rails. Вы можете найти более подробную информацию в ответах на этот вопрос: Any thoughts on Multi-tenant versus Multi-database apps in Rails

+0

Это может помочь. благодаря :-) – Jagira

Смежные вопросы