«100 вещей которые я сделал бы...»


22.07.2004 Как правильно экономить на "железе" начиная проект на colocation

Жил-был сайт на хостинге у хостинг-провайдера. Успешный такой, хороший и разумный сайт. Сначала посетителей было десять человек в день, потом их стало сто, тысяча, две, три, пять... И вот тут владелец сайта начинает замечать, что сайт "тормозит", работает через раз и вообще как-то некомфортно сайту живется-то на этом самом хостинге. Берем программиста и начинаем оптимизировать скрипты, базу данных и много чего еще. Становится лучше. Через пару месяцев опять старые проблемы. Что делать? Грешим на хостинг-провайдера, меняем его на другого, потом на третьего, четвертого, но лучше не становится. Что происходит? А ничего необычного не происходит, просто сайт вырос из "штанишек" массового хостинга и проделал полный путь развития, которое возможно в пределах массового хостинга. Что делать?

Ответ очевидный для того, кто уже прошел по описанному пути и добрался до этапа, когда любого хостинга уже не хватает. Надо дать сайту больше ресурсов: больше ресурсов процессора, больше памяти, больше производительности дисков. Как это сделать? Просто взять и принять решение о выносе сайта на отдельную машину-сервер и поставить этот сервер на colocation к провайдеру. Зря я тут написал слово "просто". Конечно, это непросто. Проблем возникает масса: кто установит и настроит операционную систему, веб-сервер, базы данных? Кто будет следить за безопасностью и заниматься поддержкой проекта в работоспособном состоянии? Что делать с резервным копированием? Много вопросов. Однако, есть еще один главный вопрос: где, как и какой сервер купить чтобы цена была подходяшей и "железо" хорошим и качественным и как при этом еще и сэкономить не в ущерб производительности и качеству работы сайта? Вот об этом мы сейчас и поговорим.

Сначала определимся с тем, как вообще может выглядеть подходящий сервер, как он будет устроен и почему все именно так. Сервера на colocation обычно размещают в так называемом rackmount-корпусе. Это специальный компьютер, который размещают в промышленной стойке и его габариты характеризуются в основном его высотой. Единица измерения высоты - "юнит". Это 45 мм. Бывают сервера 1U, 2U, 4U и так далее. Плату за размещение провайдеры берут пропорционально количеству юнитов. Следовательно, чтобы платить меньше, нужно чтобы сервер занимал как можно меньше юнитов. Сервера в обычных корпусах, таких как используются в обычных офисных и домашних компьютерах, как правило не размещают. Серверные rackmount корпуса стоят дороже обычных. Как правило, корпус стоит от $200. Есть хорошие корпуса и за $300, $500,.. Вам выбирать, но берите тот корпус, у которого как минимум с охлаждением все будет хорошо - много вертиляторов и они разумно размещены. Это очень важно.

В целом сервер стоит от $1000. Если хочется сэкономить, то "народные умельцы" собирают сервера и за $900 и за $800. "Бытовая" материнская плата, на которой интегрированы "бытовые" же контроллеры жестких дисков, непродуманная система вентиляции и охлаждения, перегрев процессора и дисков, все это приводит к тому, что экономия в $100-200 выливается в простои сервера, в постоянную замену "железа", регулярные визиты к провайдеру для восстановления нормальной работы сервера и так далее. Все это - результат этого самого "самосбора".

Нет, конечно может повезти и вы все сделаете правильно. Однако, довольно часто получается как раз наоборот. В памяти есть отличный пример, кстати. Обратился клиент. "Хочу разместить сервер, что купить?", - стандартный вопрос. Клиент был отправлен в правильное место где можно купить правильное "железо". Не понравилась цена. Причем, судя по конфирурации, которую потом клиент купил "недорого", разница получалась в $200-300. Да и не может больше разница-то получаться. Все это было два месяца назад. Три четверти времени, которое прошло с момента установки клиентом "самосборного" сервера, этот сервер лежит на полочке и ждет когда же клиент принесет очередную "железку" которая не будет перегреваться в простеньком корпусе. Было уже пять или шесть подходов и все равно сервер лежит и чего-то ждет, а не работает и приносит деньги.

Еще один интересный момент при "самосборе" - совместимость с популярными операционными системами. Конечно, гораздо проще купить "бытовую" материнскую плату за $60, а не специализированную серверную за $200-300. Экономия налицо, а очевидных выгод от покупки "правильного" железа вроде бы нет. В итоге потом выясняется, что купленная "мать" не поддерживается FreeBSD или Linux. Например, не поддерживается дешевый контроллер дисков, не поддерживается абсолютно странный chipset материнской платы и так далее. В итоге, идем в магазин, покупаем другую и смотрим как оно, работает или нет. То есть, сервер опять не работает.

Диски. Хороший вопрос: покупать ли SCSI или ATA/SATA диски? Если очень все упростить, то SCSI диски дороже обычных в четыре-пять раз в расчете на один гигабайт (на момент написания этого текста). 36GB SCSI диск стоит $160, а 160Gb SATA диск стоит порядка $140. Что покупать-то? Чем руководствоваться? Можно ли тут сэкономить, купив SATA, а не SCSI, и как там потом будет с производительностью дисковой системы?

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

Что такое ATA и SATA и какая между ними разница. ATA это обычные IDE диски, которые устанавливаются во все компьютеры уже много лет. SATA (Serial ATA) это модифицированная версия обычных ATA дисков (подробно здесь). Отличаются эти диски чуть большей производительностью и форматом разъемов питания и данных. IDE/ATA больше развиваться не будет, SATA же ждет большое будущее.

Еще довод в пользу обычных ATA/SATA дисков. Если ставить не один, а два или более дисков экономя таким образом, можно спланировать нагрузку на дисковую систему так чтобы нагрузка на диски распределялась равномерно по нескольким носителям. Например, файлы базы данных SQL разместить на одном диске, скрипты и статические файлы (картинки,..) на другом диске. Файлы операционной системы и протоколы (логи) тоже разместить так, чтобы они находились на менее нагруженном диске. В общем, все эти слова относятся и к планированию размещения файлов и на SCSI дисках, но в случае с более дешевыми ATA/SATA носителями это позволит серьезно сэкономить и не покупать SCSI если это на самом деле не требуется.

Про надежность вообще. Все мы знаем слово RAID. RAID-решения бывают как для SCSI, так и для ATA/SATA. Подумайте об этом. Получается несколько дороже, но нет головной боли с дисками. Бывают hardware RAID решения, когда вы покупаете RAID контроллер или сразу используете материнскую плату с интегрированным RAID контроллером. Бывают и software RAID решения, когда RAID-функции выполняет программное обеспечение операционной системы. Для FreeBSD это пакет vinum, например - хороший вариант.

О надежности ATA/SATA дисков. Конечно, они менее надежны и менее долговечны чем SCSI. Однако, если правильно спланировать нагрузку, организовать резервное копирование данных, внимательно следить за сообщениями операционной системы о возникающих в работе дисков проблемах, то использование обычных дисков получается более оправданно в экономическом плане, так как, возможно, сломаются они не через три-четыре года как SCSI, а "всего" через пару лет, но заменить их на аналогичные будет дешевле чем сразу покупать SCSI. К тому же, со временем диски становятся надежнее и быстрее, так что менять диски периодически даже если они не ломаются - выигрышный вариант.

Из того, что написано выше, следует что ATA/SATA носители это безоговорочно хорошо. Для справедливости все-таки скажем, что это вовсе не так. Этот текст написан о том, как сэкономить и получить за те же деньги больше ресурсов. Однако, иногда не может быть компромисов и лучше покупать SCSI. То есть, если есть очень высокие требования к производительности и надежности, то SCSI альтернатив все-таки нет.

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

Материнская плата. Ради Бога, не надо экономить на материнской плате. Это не значит что нужно немедленно пойти в магазин и купить крутую серверную "мать" за $700. Достаточно просто нормальной рабочей "железки" за $250-300. Там все будет интегрированно, там все будет условно хорошо с размещением элементов на плате в плане оптимального охлаждения, там будет хорошая гарантия и вменяемый производитель, который думал когда делал. Не надо покупать в сервер плату за $60 и за $100. Не компьютер для word/excel/тетриса/lines собираем, на котором будет работать секретарша - это главное. Это будет сервер, который несколько лет будет усиленно трудиться 24 часа в сутки семь дней в неделю. Может имеет смысл и не поесть несколько дней, а купить нормальное железо? :-)

Так, все это хорошо и замечательно, но ... денег нет. Вернее, есть, но не $1000, а всего $100-150. При этом вы полны идей "как и для чего делать свой мега-портал", есть люди которые будут этим заниматься, и вообще все хорошо с планами. Кроме денег. Что, все бросать, да? Нет, не надо бросать. Нужно идти к провайдеру и брать сервер в аренду. Получится как раз $100-150.

Что у нас имеется на рынке по аренде. Это перспективное направление бизнеса для многих компаний. То есть, если захочется сервер в аренду, то варианты есть. Совет один - не надо брать самые дешевые сервера у компаний без имени. Это может оказаться тем самым "самосбором". Надо брать сервер по цене выше минимальных предложений и обращать внимание на производителя сервера. То есть, спросить у провайдера кто собрал этот сервер, сходить на сайт производителя и составить о нем мнение. Важно сколько тестируется сервер перед отправкой потребителю, какие комплектующие применяются, какие гарантии дает производитель.

Например, .masterhost предлагает хорошие сервера собранные на платформе Intel хорошим поставщиком - Kraftway. Смотреть здесь. После сборки сервера тестируются в течение как минимум пяти дней в камере с температурой 40C. Дается гарантия на 3-5 лет. Это вот звучит вполне убедительно. Если же слова о происхождении сервера не звучат настолько убедительно, остается ждать поломок, простоев, вылетания дисков с вашими данными и так далее. Ну или повезет и ничего плохого не случится. Или не повезет. Или повезет. Или не повезет. Или повезет. Или не повезет. Или повезет. Или не повезет. Или повезет. Или не повезет. Или повезет. Или не повезет. Или повезет. Или не повезет. Или повезет. Или не повезет. Или повезет. Или не повезет. Или повезет. Азартные игры вы искренне любите и всегда выигрываете? ;-)

В общем, экономия в $20-30 на ежемесячной аренде сервера это то же самое, что и экономия $200-300 на его покупке. Если хотите меня в этом разубедить или получить дополнительные аргументы - пожалуйста, координаты здесь. Готов ответить на любые вопросы, как говорится :-)

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

Итак, чтобы получить правильный сервер, который будет хорошо работать и приносить деньги, а не головную боль, нужно:

  1. Не покупать плохого
  2. Не экономить копейки на первоначальных вложениях
  3. Не стараться получить самое-самое-самое дешевое
  4. Правильно понимать масштабы своего проекта
  5. Корректно оценить планы развития посещаемости проекта
  6. Проконсультроваться с теми, кто имеет опыт запуска подобных проектов
  7. Правильно потратить деньги так, чтобы потом об этом не жалеть

Ну и напоследок разные правильные ссылки:

Комментарии можно присылать по email (если есть вопросы - запросто пишите) или оставлять тут
Отправить ссылку по почте

[an error occurred while processing this directive] посещений
[an error occurred while processing this directive]
© 2004 Петр Диденко