Saas с базой данных на клиента - единая точка входа для сервисов.Производительность снижается? - PullRequest
0 голосов
/ 23 марта 2011

Я создаю приложение SaaS, где серверной частью будут службы SQL Server и WCF.

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

Будет центральная база данных, которая будет содержать информацию о клиентах, например, какая у них база данных и какие конечные точки использовать.

В идеале я хочу что-то вроде этого:

  • а. Клиент попадает на главную страницу ASP.NET или Silverlight или открыть клиентское приложение на ПК / мобильное устройство / и т. Д.
  • б. Типы в идентификаторе клиента, имя пользователя и пароль
  • с. Звонок на основной URL
  • д. Я буду тянуть конечную точку и БД информация для этого идентификатора клиента. я хочу, чтобы информация о конечной точке WCF также была настраивается на будущее дополнения / обновления
  • е. Нужно как-то передать информацию о конечной точке / базе данных для пользователя. Несколько клиентов могут использовать один и тот же WCF конечная точка.
  • е. Вызовите конечную точку от клиента и войти в конкретную базу данных.

Таким образом, я вижу, как будет работать производительность, так как мне не придется проходить через мой «системный» прокси при каждом вызове. Клиент будет ЗНАТЬ, с какой конечной точкой и какой базой данных он имеет дело.

Но я не уверен, как реализовать это безопасно. Потому что информация базы данных на шаге «е» будет возвращена клиенту. Технически, даже если он взломан на клиенте - все равно нет доступа к самой БД извне. Но не приятно ..

Что вы думаете? Или каждый вызов должен выполняться с токеном companyID, и тогда основная центральная служба будет направлять эти вызовы? Но это как единая точка отказа. Я предпочел бы видеть основной сервер для работы при входе в систему.

1 Ответ

1 голос
/ 23 марта 2011

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

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

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

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

Все, что вам нужно от них, это их учетные данные, чтобы решить, какую базу данных использовать.

Подсказка: Как и во всех вопросах производительности: мера, мера, мера. Вы должны знать, есть ли какая-либо выгода с несколькими конечными точками под ожидаемой нагрузкой; поэтому создайте нагрузочный тест. Тогда вы можете увидеть, где производительность падает. Избыточное проектирование перед измерением иногда работает, но всегда тратит время.

...