Создать ответ 
 
Рейтинг темы:
  • Голосов: 3 - Средняя оценка: 2.33
  • 1
  • 2
  • 3
  • 4
  • 5
6 способов убить Ваши сервера — познаем масштабируемость трудным путем
Автор Сообщение
Karman Не на форуме
Senior Member
****

Сообщений: 339
Зарегистрирован: 14-12-2009
Рейтинг: 0
Сообщение: #1
6 способов убить Ваши сервера — познаем масштабируемость трудным путем
Узнать, как отмасштабировать Ваше приложение, не имея при этом никакого опыта, — это очень нелегко. Сейчас есть много сайтов, посвященных этим вопросам, но, к сожалению, не существует решения, которое подходит для всех случаев. Вам по-прежнему необходимо самому находить решения, которые подойдут под Ваши требования. Так же, как и мне.

Несколько лет назад ко мне пришел мой босс и сказал: «У нас есть новый проект для тебя. Это перенос сайта, который уже имеет 1 миллион посетителей в месяц. Тебенеобходимо его перенести и убедиться, что посещаемость может вырасти в будущем без всяких проблем.» Я уже был опытным программистом, но не имел никакого опыта в области масштабируемости. И мне пришлось познавать масштабируемость трудным путем.

ПО сайта представляло собой CMS на PHP, с применением MySQL и Smarty. Первым делом была найдена хостинговая компания, которая имела опыт высоконагруженных проектов. Мы предоставили им свою требуемую конфигурацию:
Балансировка нагрузки (с запасом)
2 веб-сервера
MySQL сервер (с запасом)
машина для разработки

Что мы получили (хостер сказал, что этого будет достаточно):
Балансировка нагрузки — Single core, 1 Гб RAM, Pound
2 веб-сервера — Dual core, 4 Гб RAM, Apache
MySQL сервер — Quad core, 8 Гб RAM
машина для разработки — Single core, 1 Гб RAM

Для синхронизации файлов хостер установил DRBD в конфигурации active-active.

Наконец, время переноса пришло. Рано утром мы переключили домен на новые IP и начали мониторить наши скрипты. Трафик мы получили практически сразу и казалось, что все работает хорошо. Страницы загружались быстро, MySQL обрабатывал кучу запросов и все были счастливы.

Затем неожиданно прозвонил телефон: «Мы не можем зайти на веб-сайт, что происходит?!» Мы посмотрели в наше ПО для мониторинга и увидели, что сервера упали и сайт не работал. Конечно, первым делом мы позвонили хостеру и сказали: «все наши сервера упали. Что происходит?!» Они пообещали проверить сервера и перезвонить после этого. Спустя некоторое время они позвонили: «Ваша файловая система безнадежно испорчена. Что Вы делали?!» Они остановили балансер и и сказали мне посмотреть на один из веб-серверов. Открыв index.php, я был шокирован. Он содержал непонятные куски кода на Си, сообщения об ошибках и что-то, похожее на лог-файлы. После небольшого расследования мы установили, что причиной этому была наша DRBD.

Урок №1

Положите кеш Smarty в active-active DRBD кластер под высокой нагрузкой и Ваш сайт упадет.

Пока хостер восстанавливал веб-сервера, я переписал часть CMS таким образом, чтобы кеш-файлы Smarty хранились в локальной файловой системе. Проблема была найдена и устранена и мы вернулись онлайн.

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

Наш клиент был на нервах, но он понимал, что переезд обычно несет с собой некоторые проблемы.

Нам было необходимо как-то уменьшить нагрузку и мы обсудили это с хостером. Один из их админов предложил хорошую идею: «Ваши сервера сейчас на Apache+mod_php. Может перевести на Lighttpd? Это небольшой проект, но даже Википедия использует его.» Мы согласились.

Урок №2

Установите на Ваши сервера веб-сервер «из коробки», ничего не настраивайте и Ваш сайт упадет.

Администратор перенастроил наши сервера так быстро, как только мог. Он отказался от Apache и перешел на конфигурацию Lighttpd+FastCGI+Xcache. Сколько сервера протянут на этот раз?

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

В следующие дни сервера справлялись с нагрузкой относительно хорошо, но в пиковое время они были близки к падению. Мы установили, что узким местом является MySQL и опять позвонили хостеру. Они посоветовали master-slave репликацию MySQL со slave на каждом веб-сервере.

Урок №3

Даже производительный сервер БД имеет ограничения — и, когда они будут достигнуты, Ваш сайт упадет.

Эту проблему было не так-то просто исправить. CMS была очень простой в этом отношении и в ней не было встроенной возможности разделения SQL-запросов. Модификация этого заняла некоторое время, но результат был стоящий.

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

Урок №4

Не планируйте ничего заранее и Ваш сайт рано или поздно упадет.

К счастью, мы продолжали наблюдать и планировать. Мы оптимизировали код, уменьшили количество SQL-запросов и неожиданно узнали о MemCached. Для начала я добавил MemCached в некоторые основные функции, которые были наиболее тяжелыми. Когда мы развернули наши изменения на продакшене мы не могли поверить результатам — как будто мы нашли Священный Грааль. Мы уменьшили количество запросов в секунду как минимум на 50%. Вместо покупки еще одного веб-сервера мы решили, что лучше использовать MemCached.

Урок №5

Не кешируйте ничего и тратьте деньги на новое железо или Ваш сайт упадет.

MemCached помог нам снизить нагрузку на MySQL на 70-80%, что повлекло за собой огромный прирост производительности. Страницу загружались еще быстрее.

Наконец, наша конфигурация казалась идеальной. Даже в пиковое время нам не надо было волноваться о возможных падениях или о большом времени ответа. Но неожиданно один из вебсерверов начал приносить нам проблемы — сообщения об ошибках, пустые страницы и т.д. С нагрузкой было все нормально и в большинстве случаев сервер работал нормально, но только в «большинстве случаев».

Урок №6

Положите несколько сотен тысяч небольших файлов в одну директорию, забудьте об Inode и Ваш сайт упадет.

Да, это так. Мы были настолько заняты оптимизацией MySQL, PHP и веб-серверов, что не уделяли должного внимания файловой системе. Кеш смарти хранился в локальной ФС в одной директории. Решением был перенос Smarty на отдельный раздел с ReiserFS. Также мы включили опцию Smarty 'use_subdirs'.

В течение следующих лет мы продолжали оптимизацию. Мы поместили кеш Smarty в memcached, установили Varnish для уменьшения нагрузки на I/O систему, перешли на Nginx (Lighttpd случайным образом выдавал ошибку 500), купили лучшее железо и так далее.

Заключение

Масштабировани веб-сайта — бесконечный процесс. Как только вы исправите одно узкое место, скорее всего вы наткнетесь на следующее. Никогда не думайте «Это все, мы закончили». Это погубит Ваши сервера и, возможно, Ваш бизнес. Оптимизация — это постоянный процесс. Если Вы не можете выполнить работу сами из-за отсутствия опыта/ресурсов — найди компетентного партнера для совместной работы. Никогда не переставайте обсуждать с Вашими командой и партнерами текущие проблемы и проблемы, которые могут появиться в будущем.
Моя ссылка

Опубликовано: 24-08-2010
Подробнее: http://www.karman.com.ua/topic/24170-6-s...-masshtab/
24-08-2010 16:58
Найти все сообщения Цитировать это сообщение
Создать ответ 


Похожие темы
Тема: Автор Ответов: Просмотров: Посл. сообщение
  King Servers - проверенные сервера и хостинг. 10% скидка для форумчан King_servers 15 529 28-06-2018 17:05
Посл. сообщение: King_servers
Exclamation OSHQ только качественные услуги хостинга. 1-10Гигабит сервера для стримминга и файлов oshq 1 538 26-10-2017 17:21
Посл. сообщение: oshq
  Выделенные сервера на базе i7-6700 от Rackrent.eu со 30% скидкой rackrent 0 830 08-04-2017 23:35
Посл. сообщение: rackrent
  Сервера, Хостинг, Домены от RealHosters.Com Realhosters 47 17,674 08-09-2016 17:33
Посл. сообщение: Realhosters
  Вкусносервер: серверы по вкусным ценам. Сервера в аренду, vps. vkusnoserver 48 20,998 14-05-2013 01:34
Посл. сообщение: vkusnoserver
  FORNEX - 70% с продаж виртуального или выделенного сервера. affiliatebiz.ru 1 2,199 11-12-2012 10:25
Посл. сообщение: affiliatebiz.ru
  Goodhoster.NET -надёжный хостинг, ВПС, сервера, домены. Онлайн-чат 24\7. Goodhoster 0 1,805 04-07-2012 16:51
Посл. сообщение: Goodhoster
  MarkovServers.com Выгодные выделенные сервера со всего мира, оффшорное размещение. Markov Servers 0 1,843 09-04-2012 20:14
Посл. сообщение: Markov Servers
  Whois сервера Karman 0 1,365 04-11-2011 13:23
Посл. сообщение: Karman
  Аренда сервера Core 2 Duo 2,66 ГГц /2GB Ram /2x320 HDD -399грн/мес Karman 0 1,551 03-10-2011 15:44
Посл. сообщение: Karman



Пользователи просматривают эту тему: 1 Гость(ей)
Обратная связьSitesCo.ruВернуться к началуВернуться к содержимомуЛёгкий режимСписок RSS