Почему не рекомендуется размещать базу данных и веб-сервер на одном компьютере? - PullRequest
111 голосов
/ 18 марта 2009

Слушая интервью Скотта Хансельмана с командой переполнения стека ( part 1 и 2 ), он был непреклонен в том, что сервер SQL и сервер приложений должны находиться на разных компьютерах. Это просто для того, чтобы убедиться, что если один сервер скомпрометирован, обе системы не доступны? Перевешивают ли проблемы безопасности сложность двух серверов (дополнительные расходы, выделенное сетевое соединение между ними, дополнительное обслуживание и т. Д.), Особенно для небольших приложений, где ни один из компонентов не использует слишком много ЦП или памяти? Даже с двумя серверами, с одним скомпрометированным сервером, злоумышленник все же может нанести серьезный ущерб, либо удалив базу данных, либо испортив код приложения.

Почему это так важно, если производительность не является проблемой?

Ответы [ 18 ]

136 голосов
/ 18 марта 2009
  1. Security. Ваш веб-сервер находится в демилитаризованной зоне, доступной для публичного интернета и принимающей ненадежные данные от анонимных пользователей. Если ваш веб-сервер скомпрометирован и вы выполнили правила наименьшего количества привилегий при подключении к вашей БД, максимальная вероятность - это то, что ваше приложение может сделать через API базы данных. Если между вами есть бизнес-уровень, у вас есть еще один шаг между злоумышленником и вашими данными. Если, с другой стороны, ваша база данных находится на том же сервере, у злоумышленника теперь есть root-доступ к вашим данным и серверу.
  2. Масштабируемость. Сохранение веб-сервера без сохранения состояния позволяет без особых усилий масштабировать веб-серверы по горизонтали. очень трудно масштабировать сервер базы данных по горизонтали.
  3. Производительность. 2 поля = 2 раза процессор, 2 раза оперативная память и 2 раза шпиндели для доступа к диску.

Несмотря на это, я, конечно, вижу разумные случаи, когда ни один из этих пунктов не имеет значения.

38 голосов
/ 19 марта 2009

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

Это именно то, что сделал StackOverflow - начиная с одной машины с IIS / SQL Server, затем, когда он начал сильно загружаться, был куплен второй сервер, и сервер SQL был перенесен на него.

Если производительность не является проблемой, не тратьте деньги на покупку / обслуживание двух серверов.

21 голосов
/ 18 марта 2009

С другой стороны, ссылаясь на другой блог Скотта (Watermasyck, Telligent) - они обнаружили, что большинство пользователей могут ускорить работу сайтов (используя сервер сообщества Telligent), разместив базу данных на той же машине, что и веб-сайт. , Тем не менее, в случае их клиентов, как правило, db & web-сервер являются единственными приложениями на этом компьютере, и веб-сайт не сильно напрягает компьютер. Тогда эффективность отсутствия необходимости передавать данные по сети больше, что компенсирует повышенную нагрузку.

14 голосов
/ 18 марта 2009

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

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

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

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

13 голосов
/ 18 марта 2009

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

9 голосов
/ 18 марта 2009

Безопасность является серьезной проблемой. В идеале ваш сервер базы данных должен находиться за брандмауэром с открытыми только портами, необходимыми для доступа к данным. Ваше веб-приложение должно подключаться к серверу базы данных с учетной записью SQL, у которой достаточно прав для работы приложения, и не более того. Например, вам следует удалить права, которые разрешают удаление объектов, и, скорее всего, вам не следует подключаться с использованием таких учетных записей, как 'sa'.

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

8 голосов
/ 18 марта 2009

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

6 голосов
/ 18 марта 2009

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

5 голосов
/ 11 января 2012

Я согласен с Дэниелом Эрвикером - секретный вопрос в значительной степени некорректен.

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

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

Аргумент, что «остальная часть целостности сервера БД поддерживается», когда у вас есть установка с двумя серверами, не имеет значения, потому что в первом сценарии все остальные серверы баз данных, относящиеся к любому другому приложению (если они есть), остаются незатронутый - существо, как они есть, в другом месте.

Аналогично, к вопросу, заданному Кевом, как насчет всех других баз данных, находящихся на сервере БД? Все, что вы потеряли, - это одна база данных. '

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

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

5 голосов
/ 19 марта 2009

Ничего себе, никто не говорит о том, что если вы действительно покупаете SQL-сервер за 5 тыс. Долларов, вы можете использовать его не только для своего веб-приложения. Если вы используете экспресс, возможно, вам все равно. Я вижу, что SQL-серверы запускают базы данных для 20-30 приложений, поэтому размещение их на веб-сервере не будет разумным.

Во-вторых, зависит от того, для кого предназначен сервер. Я работаю на финансовые компании и правительство. Таким образом, мы используем сумасшедшую боль в подходе задницы использования только sprocs и ограничения портов от веб-сервера до SQL. Так что, если веб-приложение взломано. Единственное, что может сделать хакер, это вызвать sprocs, так как учетная запись пользователя на веб-сервере заблокирована, чтобы видеть / вызывать sprocs на БД. Так что теперь хакер должен выяснить, как попасть в БД. Если он находится на веб-сервере, его легко получить.

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