it-swarm.com.ru

Почему не рекомендуется размещать базу данных и веб-сервер на одном компьютере?

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

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

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

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

136
Mark Brackett

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

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

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

38
dbr

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

21
James Curran

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

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

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

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

14
Dana the Sane

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

13
Tom Ritter

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

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

9
Kev

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

8
Paul Tomblin

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

6
Mr. Will

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

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

5
Jojo

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

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

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

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

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

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

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

5
Oriental

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

3
simon

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

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

Интересуюсь тем, что могут сказать другие.

2
George Mauer

Я слушал этот подкаст, и это было забавно, но аргумент безопасности не имел для меня никакого смысла. Если вы взломали сервер A и этот сервер может получить доступ к данным на сервере B, то вы сразу получите доступ к данным на сервере B.

2
Daniel Earwicker

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

Например, если у вас есть 1 сервер, работающий как в Интернете, так и в базе данных, содержащей 8 процессоров, вам придется заплатить за лицензию на 8 процессоров. Однако, если у вас есть два сервера, каждый с 4 ЦП, и база данных запущена на одном сервере, вам нужно будет заплатить только за лицензии на 4 процессора.

2
Ian Ringrose

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

1
HLGEM