Структура серверов для высоконагруженного web сервиса
Модераторы: SLEDopit, Модераторы разделов
-
yegor
- Сообщения: 13
Структура серверов для высоконагруженного web сервиса
Доброго времени суток.
Я проектирую сервис, который в ближайшем будущем должен выдерживать большое количество хитов. Точных цифр назвать не могу - чем больше, тем лучше.
Сайт (сервис) написан на 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 сервиса
Ну во-первых, при такой задаче я бы нанял опытного системного администратора хотя бы в качестве консультанта. Судя по вопросам в деньгах проблемы нет, а времени и нервов вам это сэкономит немеряно.
Она ужасно оформлена и избыточна. Я бы убрал из схемы backup серверы и избавился от пересечения линий/толпы повторяющихся стрелочек. И по этой схеме каждый сервер приложений обращается к своему собственному серверу БД, это действительно так или схема ошибочна?
Это вам надо к специально обученным цискарям. И чтобы выбрать, и чтобы настроить.
Неизвестно сколько пользователей запускают неизвестно какие скрипты на неизвестно каких серверах. Не многовато неизвестных?
Подозреваю, что речь про nginx - http://nginx.org/ru/docs/http/ngx_http_ups...ule.html#server
Если сейчас вы используете InnoDB, то стоит попробовать. С MyISAM на XtraDB переехать будет посложнее.
Под систему - нигде. Возможно имеет смысл ставить под данные СУБД.
На мой взгляд бессмысленно.
http://ru.wikipedia.org/wiki/Unix_domain_socket
У вас приложение и СУБД на разных серверах, так что не актуально.
Она ужасно оформлена и избыточна. Я бы убрал из схемы backup серверы и избавился от пересечения линий/толпы повторяющихся стрелочек. И по этой схеме каждый сервер приложений обращается к своему собственному серверу БД, это действительно так или схема ошибочна?
Это вам надо к специально обученным цискарям. И чтобы выбрать, и чтобы настроить.
yegor писал(а): ↑04.01.2012 13:542) Сервера выполнения кода PHP. Планируем использовать Debian + nginx + php-fpm + apc для локального кэша и memcached для сетевого. На одном узле планируется связка из двух зеркальных серверов, но думаем что одного может оказаться достаточно, т.к. основная нагрузка лежит на БД. Как думаете?
Неизвестно сколько пользователей запускают неизвестно какие скрипты на неизвестно каких серверах. Не многовато неизвестных?
Подозреваю, что речь про nginx - http://nginx.org/ru/docs/http/ngx_http_ups...ule.html#server
Если сейчас вы используете InnoDB, то стоит попробовать. С MyISAM на XtraDB переехать будет посложнее.
Под систему - нигде. Возможно имеет смысл ставить под данные СУБД.
На мой взгляд бессмысленно.
http://ru.wikipedia.org/wiki/Unix_domain_socket
У вас приложение и СУБД на разных серверах, так что не актуально.
-
yegor
- Сообщения: 13
Re: Структура серверов для высоконагруженного web сервиса
Спасибо за ответ!
К сожалению, не совсем так. Принимаю участие в проектировании стартапа - денег на начальном этапе немного и все направлены на разработку. Слышал как надо делать вот теперь и разбираюсь что из этого правда, и что критично. Хочу быть максимального подготовленным перед обращением к специалисту.
Эти непонятные стрелки подразумевают что распределение запросов к серверам идет на уровне приложения. Но данные на серверах БД не дублируются.
я понял. думал есть какие-то простые железкы для данных целей.
В том то и дело, что мы на том этапе когда есть возможность сделать сразу правильней.
На сколько знаю у ssd меньше ресурс записи. Т.е. работать будет быстрее но надо будет опасаться выхода из строя HDD?
Еще раз спасибо за ответ
К сожалению, не совсем так. Принимаю участие в проектировании стартапа - денег на начальном этапе немного и все направлены на разработку. Слышал как надо делать вот теперь и разбираюсь что из этого правда, и что критично. Хочу быть максимального подготовленным перед обращением к специалисту.
Эти непонятные стрелки подразумевают что распределение запросов к серверам идет на уровне приложения. Но данные на серверах БД не дублируются.
neol писал(а): ↑04.01.2012 16:53Подозреваю, что речь про nginx - http://nginx.org/ru/docs/http/ngx_http_ups...ule.html#server
я понял. думал есть какие-то простые железкы для данных целей.
В том то и дело, что мы на том этапе когда есть возможность сделать сразу правильней.
На сколько знаю у ssd меньше ресурс записи. Т.е. работать будет быстрее но надо будет опасаться выхода из строя HDD?
Еще раз спасибо за ответ
-
Bluetooth
- Сообщения: 4395
- Статус: Блюзовый
- ОС: Debian Squeeze amd64
Re: Структура серверов для высоконагруженного web сервиса
Люто поддерживаю идею нанять консультанта(это как минимум), а лучше нанять и для выполнения соответствующих работ.
Да, имеет смысл только под СУБД. Но и то, я бы предпочел поставить 15000rpm SAS винты :)Под систему - нигде. Возможно имеет смысл ставить под данные СУБД.
Добавлю только, что не цисками едиными жив интернет :)Это вам надо к специально обученным цискарям. И чтобы выбрать, и чтобы настроить.
-
alienrom
- Сообщения: 142
- ОС: GNU/Linux, BSD
Re: Структура серверов для высоконагруженного web сервиса
Обычно в ДЦ уже предлагают какую-то защиту, но если нет, то на первых порах встроенными в 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 сервиса
Обычно в ДЦ уже предлагают какую-то защиту, но если нет, то на первых порах встроенными в Linux средствами можно обойтись.
возможно я ошибусь (слабо понимаю в линуксах), но роутер берут совместно с выделенным каналом и нужен он для блокировки ддос атак на уровне роутера (это эффективно). При покупке такого кол-ва серверов, наверняка выкупите канал - не взять роутер будет как то странно.
-
denis21
- Сообщения: 25
- ОС: Debian GNU/Linux
Re: Структура серверов для высоконагруженного web сервиса
На заметочку. Мы вот кстати, для средне нагруженного вебсервера давненько пользуем mariadb под debian6. Как-то всё гуд пока.
-
Bluetooth
- Сообщения: 4395
- Статус: Блюзовый
- ОС: Debian Squeeze amd64
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Структура серверов для высоконагруженного web сервиса
В ДЦ -- врядли ставят.
Какой использовать без разницы.
Вполне можно обойтись локальным файрволлом на каждой машине.
Но, естественно, иметь на входе один общий файрволл легче -- банально легче следить за тем, что он правильно настроен.
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
- Сообщения: 4395
- Статус: Блюзовый
- ОС: Debian Squeeze amd64
Re: Структура серверов для высоконагруженного web сервиса
Одного этого более, чем достаточно, чтобы его поставить.
В итоге все равно придется побежать в ДЦ, пускай уж не ночью и не в выходные, но не откладывая в долгий ящик, ибо нагрузка на другие сервера возрастет и они тоже могут вылететь. Так вот допускать дестабилизацию системы из-за какого-то сраного полетевшего винта - ну нахрен.В идеальном мире сервер может хоть сгореть и никто не побежит его поднимать, потому что:
- остальные должны справляться с нагрузкой;
- работа сервиса не должна быть привязана к одной точке отказа.