Дизайн: сайт, вызывающий веб-сервис на одной машине - PullRequest
3 голосов
/ 22 марта 2010

Больше о дизайне / концептуальном вопросе.

На работе было принято решение вызвать наш уровень доступа к данным через веб-сервисы. Таким образом, наш веб-сайт будет вызывать веб-сервисы для любых / всех данных в и из базы данных. Как веб-сайт, так и веб-сервисы будут находиться на одном компьютере (поэтому не нужно подключаться по проводам), но база данных находится на отдельном компьютере (так что, в любом случае, потребуется подключение по проводам). Это все внутри компании, веб-сайт, веб-сервис и база данных находятся в одной и той же компании (AFAIK, веб-сервисы не будут использоваться другой стороной).

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

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

Мне кажется, было бы лучше иметь сборки (DAL), на которые есть ссылки непосредственно в решении, тем самым сводя на нет соединение первого порта с портом.

Будем благодарны за любые мысли (или ссылки) как за, так и против этой идеи.

P.S. Мы магазин .NET (переход с vb на C # 3.5)

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

Ответы [ 3 ]

2 голосов
/ 22 марта 2010

Это сомнительный дизайн, но ваш магазин не единственный, кто его использует.

Поскольку вы используете .NET 3.5 и работаете на одной машине, вы должны использовать WCF с netNamedPipesBinding, который использует двоичную передачу данных по именованным каналам, только на той же машине. Это должно несколько уменьшить проблему с производительностью.

2 голосов
/ 22 марта 2010

Оба дизайна (приложение для веб-службы для БД; приложение для БД через DAL) довольно стандартны. Веб-сервисы часто используются при взаимодействии с клиентами для стандартизации семантики доступа к данным. Веб-сервис обычно способен более точно представлять семантику вашей модели данных, чем основное хранилище постоянных данных, и, таким образом, помогает поддерживать работоспособность системы путем абстрагирования и инкапсуляции проблем, связанных с IO. Веб-службы также служат дополнительной целью предоставления открытого интерфейса (хотя «общедоступный» может по-прежнему означать внутренний для вашей компании) ваших данных через протокол, который обычно доступен через брандмауэры. При использовании DAL для прямого подключения к БД можно инкапсулировать проблемы ввода-вывода данных аналогичным образом, но в конечном итоге ваш клиент должен иметь прямой доступ к базе данных. Ограничивая ввод-вывод четкой семантикой (обычно CRUD + Query), вы добавляете дополнительный уровень безопасности. Это не такая уж большая проблема для вас, так как вы запускаете веб-приложение - весь доступ к БД уже сделан из надежного кода. Однако веб-служба обеспечивает повышение устойчивости к внедрению SQL.

За исключением всех обоснований веб-сервиса, реальные вопросы:

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

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

Вы хотите расширить? Вы говорите, что он, вероятно, никогда не будет использоваться ни одним клиентом, кроме одного веб-приложения, но эти вещи могут увеличиваться в размерах. Если есть вероятность того, что ваше веб-приложение может расшириться в масштабах или популярности, рассмотрите веб-сервис. Разрабатывая веб-сервис, вы уже нацеливаетесь на модульное решение с несколькими хостами, поэтому ваше приложение, вероятно, будет масштабироваться с меньшими трудностями роста.

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

1 голос
/ 22 марта 2010

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

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

Если скорость - ваша самая важная проблема, то вам нужно уменьшить свои слои. Однако в большинстве случаев время, затрачиваемое вашей веб-службой на обработку запроса из базы данных, не добавляет времени. (Это предполагает, что вы правильно делаете свой уровень веб-сервиса, вы можете легко замедлить его, если не будете его смотреть.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...