Структура серверов для высоконагруженного web сервиса

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

yegor
Сообщения: 13

Структура серверов для высоконагруженного web сервиса

Сообщение yegor »


Доброго времени суток.
Я проектирую сервис, который в ближайшем будущем должен выдерживать большое количество хитов. Точных цифр назвать не могу - чем больше, тем лучше.
Сайт (сервис) написан на PHP. Этот код выполняется при адресации с нескольких доменов (т.е. при обращении к site1.ru site2.ru и т.д. выполнется код из одних и тех же файлов). Все основные данные находятся в базе данных, статическое содержимое вынесено на отдельный сервер. Для редактирования данных в БД планируется отдельный сервер.

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

Далее комментирую схему в приложении:
1) На входе стоит firewall. Это подсмотрел на других схемах, которых в интернете не так уж много. Нужен ли фаервол при размещении в ДЦ или они ставят свой на входе? Какой фаервол оптимально использовать для данной схемы?
2) Сервера выполнения кода PHP. Планируем использовать Debian + nginx + php-fpm + apc для локального кэша и memcached для сетевого. На одном узле планируется связка из двух зеркальных серверов, но думаем что одного может оказаться достаточно, т.к. основная нагрузка лежит на БД. Как думаете?
3) Распределение нагрузки между серверами PHP, load balancing. Знаю что такое есть, но как выглядит на самом деле не представляю. Что использовать для балансировки между двумя серверами?
4) Сервера баз данных. Debian + mySQL. Подумываем использовать XtraDB от Percona. В правильную сторону ли мыслим?
5) Балансировка данных между серверами осуществляется на уровне приложения, т.е. одни данные на одном сервере, другие на втором. При такой схеме можем включить в узел дополнительные сервера.
6) Сервер статического содержимого. Debian + nginx. По сути файловый хостинг. Тут информации в интернете пока хватает.
7) Сервер резервных копий. Сюда хотим ежедневно сливать дампы БД и сервера статического содержимого. Еженедельно сливать бэкап на удаленный сервер.
8) Железо для серверов. Может кто посоветует конкретно под данные задачи? Где критично ставить ssd под систему? Логично ли ставить ssd на сервер выполнения PHP кода, если этот код будет изменяться очень редко? Какой RAID где нужен?
9) Слышал что-то за соединение между сервером PHP и БД с помощью сокетов. Где можно про это почитать и что это вообще значит и дает?

Понимаю что вопросов много, но надеюсь что у кого-то найдется время поделитсья опытом. Огромное спасибо!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Структура серверов для высоконагруженного web сервиса

Сообщение neol »

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

yegor писал(а):
04.01.2012 13:54
Прошу высказать все что у вас на уме по данной схеме, любые замечания будут полезны и приняты с благодарностью!

Она ужасно оформлена и избыточна. Я бы убрал из схемы backup серверы и избавился от пересечения линий/толпы повторяющихся стрелочек. И по этой схеме каждый сервер приложений обращается к своему собственному серверу БД, это действительно так или схема ошибочна?

yegor писал(а):
04.01.2012 13:54
1) На входе стоит firewall. Это подсмотрел на других схемах, которых в интернете не так уж много. Нужен ли фаервол при размещении в ДЦ или они ставят свой на входе? Какой фаервол оптимально использовать для данной схемы?

Это вам надо к специально обученным цискарям. И чтобы выбрать, и чтобы настроить.

yegor писал(а):
04.01.2012 13:54
2) Сервера выполнения кода PHP. Планируем использовать Debian + nginx + php-fpm + apc для локального кэша и memcached для сетевого. На одном узле планируется связка из двух зеркальных серверов, но думаем что одного может оказаться достаточно, т.к. основная нагрузка лежит на БД. Как думаете?

Неизвестно сколько пользователей запускают неизвестно какие скрипты на неизвестно каких серверах. Не многовато неизвестных?

yegor писал(а):
04.01.2012 13:54
3) Распределение нагрузки между серверами PHP, load balancing. Знаю что такое есть, но как выглядит на самом деле не представляю. Что использовать для балансировки между двумя серверами?

Подозреваю, что речь про nginx - http://nginx.org/ru/docs/http/ngx_http_ups...ule.html#server

yegor писал(а):
04.01.2012 13:54
4) Сервера баз данных. Debian + mySQL. Подумываем использовать XtraDB от Percona. В правильную сторону ли мыслим?

Если сейчас вы используете InnoDB, то стоит попробовать. С MyISAM на XtraDB переехать будет посложнее.

yegor писал(а):
04.01.2012 13:54
Где критично ставить ssd под систему?

Под систему - нигде. Возможно имеет смысл ставить под данные СУБД.

yegor писал(а):
04.01.2012 13:54
Логично ли ставить ssd на сервер выполнения PHP кода, если этот код будет изменяться очень редко?

На мой взгляд бессмысленно.

yegor писал(а):
04.01.2012 13:54
9) Слышал что-то за соединение между сервером PHP и БД с помощью сокетов. Где можно про это почитать и что это вообще значит и дает?

http://ru.wikipedia.org/wiki/Unix_domain_socket
У вас приложение и СУБД на разных серверах, так что не актуально.
Спасибо сказали:
yegor
Сообщения: 13

Re: Структура серверов для высоконагруженного web сервиса

Сообщение yegor »

Спасибо за ответ!

neol писал(а):
04.01.2012 16:53
Ну во-первых, при такой задаче я бы нанял опытного системного администратора хотя бы в качестве консультанта. Судя по вопросам в деньгах проблемы нет, а времени и нервов вам это сэкономит немеряно.

К сожалению, не совсем так. Принимаю участие в проектировании стартапа - денег на начальном этапе немного и все направлены на разработку. Слышал как надо делать вот теперь и разбираюсь что из этого правда, и что критично. Хочу быть максимального подготовленным перед обращением к специалисту.

neol писал(а):
04.01.2012 16:53
И по этой схеме каждый сервер приложений обращается к своему собственному серверу БД, это действительно так или схема ошибочна?

Эти непонятные стрелки подразумевают что распределение запросов к серверам идет на уровне приложения. Но данные на серверах БД не дублируются.

neol писал(а):
04.01.2012 16:53
Подозреваю, что речь про nginx - http://nginx.org/ru/docs/http/ngx_http_ups...ule.html#server

я понял. думал есть какие-то простые железкы для данных целей.

neol писал(а):
04.01.2012 16:53
Если сейчас вы используете InnoDB, то стоит попробовать. С MyISAM на XtraDB переехать будет посложнее.

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

neol писал(а):
04.01.2012 16:53
Под систему - нигде. Возможно имеет смысл ставить под данные СУБД.

На сколько знаю у ssd меньше ресурс записи. Т.е. работать будет быстрее но надо будет опасаться выхода из строя HDD?

Еще раз спасибо за ответ
Спасибо сказали:
Аватара пользователя
Bluetooth
Сообщения: 4395
Статус: Блюзовый
ОС: Debian Squeeze amd64

Re: Структура серверов для высоконагруженного web сервиса

Сообщение Bluetooth »

Люто поддерживаю идею нанять консультанта(это как минимум), а лучше нанять и для выполнения соответствующих работ.
Под систему - нигде. Возможно имеет смысл ставить под данные СУБД.
Да, имеет смысл только под СУБД. Но и то, я бы предпочел поставить 15000rpm SAS винты :)
Это вам надо к специально обученным цискарям. И чтобы выбрать, и чтобы настроить.
Добавлю только, что не цисками едиными жив интернет :)
Спасибо сказали:
Аватара пользователя
alienrom
Сообщения: 142
ОС: GNU/Linux, BSD

Re: Структура серверов для высоконагруженного web сервиса

Сообщение alienrom »

yegor писал(а):
04.01.2012 13:54
1) На входе стоит firewall. Это подсмотрел на других схемах, которых в интернете не так уж много. Нужен ли фаервол при размещении в ДЦ или они ставят свой на входе? Какой фаервол оптимально использовать для данной схемы?

Обычно в ДЦ уже предлагают какую-то защиту, но если нет, то на первых порах встроенными в Linux средствами можно обойтись.
2) Сервера выполнения кода PHP. Планируем использовать Debian + nginx + php-fpm + apc для локального кэша и memcached для сетевого. На одном узле планируется связка из двух зеркальных серверов, но думаем что одного может оказаться достаточно, т.к. основная нагрузка лежит на БД. Как думаете?

Не совсем ясен масштаб сервиса. Поэтому непонятно где основная нагрузка лежит, Но на БД нагрузка всегда сильная.
3) Распределение нагрузки между серверами PHP, load balancing. Знаю что такое есть, но как выглядит на самом деле не представляю. Что использовать для балансировки между двумя серверами?

Тут надо сначала определиться баланс какого уровня вы хотите. Если только баланс уровня HTTP, то, как вам уже сказали nginx с этим справится, хотя я бы посоветовал Haproxy. Отдельную железку покупать будет накладно, если вы стартап.
4) Сервера баз данных. Debian + mySQL. Подумываем использовать XtraDB от Percona. В правильную сторону ли мыслим?

Опять же мало исходных данных.
5) Балансировка данных между серверами осуществляется на уровне приложения,

Я так понял ваш софт сам балансирует запросы к СУБД? Нехорошо. Дополнительная логика усложняет проект.
Какой RAID где нужен?

Только под БД. Да и нужен ли он вам?
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Структура серверов для высоконагруженного web сервиса

Сообщение azsx »

Обычно в ДЦ уже предлагают какую-то защиту, но если нет, то на первых порах встроенными в Linux средствами можно обойтись.

возможно я ошибусь (слабо понимаю в линуксах), но роутер берут совместно с выделенным каналом и нужен он для блокировки ддос атак на уровне роутера (это эффективно). При покупке такого кол-ва серверов, наверняка выкупите канал - не взять роутер будет как то странно.
Спасибо сказали:
denis21
Сообщения: 25
ОС: Debian GNU/Linux

Re: Структура серверов для высоконагруженного web сервиса

Сообщение denis21 »

На заметочку. Мы вот кстати, для средне нагруженного вебсервера давненько пользуем mariadb под debian6. Как-то всё гуд пока.
Спасибо сказали:
Аватара пользователя
Bluetooth
Сообщения: 4395
Статус: Блюзовый
ОС: Debian Squeeze amd64

Re: Структура серверов для высоконагруженного web сервиса

Сообщение Bluetooth »

alienrom писал(а):
04.01.2012 20:37
Только под БД. Да и нужен ли он вам?

Сто пудов не нужен рейд. Ведь так весело ночью или в выходные ехать в ДЦ поднимать вылетевший из-за какого-то сраного винта сервер :)
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Структура серверов для высоконагруженного web сервиса

Сообщение KiWi »

yegor писал(а):
04.01.2012 13:54
1) На входе стоит firewall. Это подсмотрел на других схемах, которых в интернете не так уж много. Нужен ли фаервол при размещении в ДЦ или они ставят свой на входе? Какой фаервол оптимально использовать для данной схемы?

В ДЦ -- врядли ставят.
Какой использовать без разницы.
Вполне можно обойтись локальным файрволлом на каждой машине.
Но, естественно, иметь на входе один общий файрволл легче -- банально легче следить за тем, что он правильно настроен.
2) Сервера выполнения кода PHP. Планируем использовать Debian + nginx + php-fpm + apc для локального кэша и memcached для сетевого. На одном узле планируется связка из двух зеркальных серверов, но думаем что одного может оказаться достаточно, т.к. основная нагрузка лежит на БД. Как думаете?

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

3) Распределение нагрузки между серверами PHP, load balancing. Знаю что такое есть, но как выглядит на самом деле не представляю. Что использовать для балансировки между двумя серверами?

IPVS, haproxy, nginx.
Плюс есть компании, продающие отдельные железки, занимающиеся балансировкой.

4) Сервера баз данных. Debian + mySQL. Подумываем использовать XtraDB от Percona. В правильную сторону ли мыслим?

Какая именно база данных используется -- не так уж и важно: какой бы хорошей она не была -- кривые запросы в базу её положат.

8) Железо для серверов. Может кто посоветует конкретно под данные задачи? Где критично ставить ssd под систему? Логично ли ставить ssd на сервер выполнения PHP кода, если этот код будет изменяться очень редко? Какой RAID где нужен?

Некритично. Память в любом случае быстрее SSD.
Поэтому для базы желательно иметь в сервере достаточное количество памяти.
В идеале -- чтобы она вся помещалась в память.
Минимум -- все частозапрашиваемые данные должны быть в памяти(файловый кеш/буффер innodb/etc).

9) Слышал что-то за соединение между сервером PHP и БД с помощью сокетов. Где можно про это почитать и что это вообще значит и дает?

HandlerSocket?

Bluetooth писал(а):
05.01.2012 02:18
alienrom писал(а):
04.01.2012 20:37
Только под БД. Да и нужен ли он вам?

Сто пудов не нужен рейд. Ведь так весело ночью или в выходные ехать в ДЦ поднимать вылетевший из-за какого-то сраного винта сервер :)

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

И в этом мире рейд уже будет нужен исключительно для того, чтобы просто заменить диск, а не настраивать его заново(первое обычно сильно быстрее второго).
Хотя, в случае новомодных облаков -- даже для этого рейд не нужен -- поменял диск, перезагрузил, а дальше -- облако само всё сделает.
Спасибо сказали:
Аватара пользователя
Bluetooth
Сообщения: 4395
Статус: Блюзовый
ОС: Debian Squeeze amd64

Re: Структура серверов для высоконагруженного web сервиса

Сообщение Bluetooth »

KiWi писал(а):
06.01.2012 04:23
И в этом мире рейд уже будет нужен исключительно для того, чтобы просто заменить диск, а не настраивать его заново(первое обычно сильно быстрее второго).

Одного этого более, чем достаточно, чтобы его поставить.

В идеальном мире сервер может хоть сгореть и никто не побежит его поднимать, потому что:
- остальные должны справляться с нагрузкой;
- работа сервиса не должна быть привязана к одной точке отказа.
В итоге все равно придется побежать в ДЦ, пускай уж не ночью и не в выходные, но не откладывая в долгий ящик, ибо нагрузка на другие сервера возрастет и они тоже могут вылететь. Так вот допускать дестабилизацию системы из-за какого-то сраного полетевшего винта - ну нахрен.
Спасибо сказали: