Как сделать бюджетный геокластерный хостинг

В качестве распределенного хостинга возьмем классический пример — создание блогосервиса на основе mu-Wordpress.
Задача — при ограниченном бюджете собрать отказоустойчивую (насколько это возможно) геораспределенную систему. Соответственно все оборудование берется в аредну в различных Дата-Центрах.
И тут следует сказать что не все Дата-Центры одинаково полезны. Высококачественные сдают сервер за 800$, а у низкокачественных вполне можно взять примерно такой же сервер в аренду уже за 100$. И именно эти особенности надо учитывать при создании геокластера.

Теперь о небольших хаках. По умолчанию в mu-Wordpress функция отдачи загружаемого контента сделана крайне неудачно — через PHP. Соответственно она была заменена на загрузку отдельным сервисом и вставкой загружаемого контента прямой ссылкой на статику.
Вторым хаком была модификация контроля кеширования. Кроме указаний кешировать статичные элементы дизайна был введен еще такой хак, который запрещал кешировать запись на время ее обсуждения (по умолчанию — 14 дней), а уже после она отдавалась с заголовком разрешающим кеширование. Кроме того хитро кешировались фиды RSS.
Финальным хаком стала система синхронизации БД — каждый INSERT/DELETE/UPDATE выполнялся на «соседе». Получился такой себе софт-рейд в контексте MySQL+PHP.

image

Сначала о DNS. Так как в mu-Wordpress использовался поддомен для каждого блога, то самым разумным решением было использовать услугу Slave DNS от двух независимых регистраторов — серые облака. Это недорого и вполне надежно.

Высококачественный Дата-Центр зеленого цвета, где арендуются два сервера использовался для первичных DNS, службы начальной регистрации и формы заливки загружаемого контента.
Два Дата-Центра среднего качества были использованы как основной «костяк» геокластера. Каждый сервер имел своего соседа и они синхронизировали межу собой всю информацию БД+файлы.

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

Эти боты создавали на каждый сервер 200-300 одновременных соединений, что конечно ни к чему хорошему не приводило — начались таймауты и 50x ошибки. Конечно, можно было бы уменьшить число запросов через robots.txt опцией crawl-delay, но… кому охота чтоб его блог медленно индексировался?

И тут помогли дешевые желтые Дата-Центры + настройка мониторинга и DNS на двух серверах в зеленом Дата-Центре. Как это все работало:

Два желтых Дата-Центра функционировали как первичные (родительские) прокси squid. Остальные три использовали их как родительские, что снижало нагрузку на синий «костяк».
Мониторинг на серверах в зеленом Дата-Центре мониторил доступность желтых и синих, выполняя модификацию DNS в случае сбоя.

Теперь поговорим о отказоустойчивости. Что мы теряли при отключении зеленого, синего или желтого сегментов?

  • Зеленый — регистрация и загрузка файлов
  • Синий — в случае одного ничего, в случае всех — админка не работала + последние записи вне кеша не отображались.
  • Желтый — в случае одного ничего, в случае всех — просто повышенная нагрузка на синие сервера


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

P.S. По вопросам серверной оптимизации под mu-WordPress можете писать мне в комментарии — достаточно много собак было скушано под этим делом ;)
+17
5 января 2010, 21:28
54

комментарии (25)

0
YoungSkipper #
В целом познавательно.

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

Какая цель была?
+4
Andrey_Rogovsky #
Да, примерно так
Цель — сделать массовый блогохостинг
+1
YoungSkipper #
Спасибо за ответ, извините за опечатки в вопросе.
0
BarsMonster #
Жесть, Wordpress неслабо усложнил вам жизнь :-)

А если бы написали 1 раз как следует код лично для вас, который бы держал 500-800 запросов в секунду, ваши расходы на многочисленные сервера быстро бы отбились… :-)
+1
Goodkat #
Осталось бы только продать пиплу свою скоростную, но незнакомую CMS без всех ништяков вордпресса, типа тем и плагинов :)
0
BarsMonster #
Вот и написали бы, что у вас WordPress — хостинг :-)
+1
Goodkat #
У нас нет хостинга, а автор статьи написал это в первом предложении:
В качестве распределенного хостинга возьмем классический пример — создание блогосервиса на основе mu-Wordpress.
+1
egor1989 #
а зачем геокластерному хостингу быть бюджетным? есть вед ь и другие виды, более подходящие для этого
0
Andrey_Rogovsky #
При неограниченном бюджете можно построить свой гугл. Тут весь смысл в том, чтоб было хорошо и недорого.
0
selitskas #
Насколько мне известно, подобную схему использует WikiMedia: там тоже несколько датацентров с кучей squid'ов, отдельная загрузка и регистрация, поиск и т. д.

Похвально.
0
gaploid #
Пара вопросов:
1. А чего делается если к примеру insert не прошел на одной из БД?
2. А почему не использовали к примеру вот эту услугу www.akamai.com/html/technology/products/enhanced_dns.html? Там уже с возможностью мониторинга серверов и перенаправление запросов только на живые ip.

И я так понимаю если вырубается зеленый сегмент, то все решение перестает работать, так как первичные dns имена завязаны на них.
0
Andrey_Rogovsky #
1. Транзакция не проходит, юзер получает сообщение об ошибке.
2. Банально — DNS от регистраторов дешевле ;)

Зеленый сегмент скидывает все на вторичные NS, не работает только регистрация и аплоад.
0
gaploid #
1. Понятно что ошибка, но я так понял транзакция проходит по всем БД параллельно, соответсвенно, если на каком то сервере не прошла транзакция нужно откатывать ее везде? или я что-то не правильно понял.

2. Просто эта услуга, которую я привел делает именно то и даже немного больше чем ваш зеленый сегмент, и мне кажется покупать эту услугу будет дешевле чем арендовать дорогие зеленые сервера. Ну и отказоустойчивость у этих ребят будет получше=)
+7
seriyPS #
Схема у вас просто жесть… В смысле картинка…
Описанию как-то не очень соответствует, особенно в части прокси. Что стрелки между облачками обозначают?
Можно-ли как-то поподробнее описать как запросы проходят? В итоге клиенты обращаются к 3-м желтеньким облачкам (и немножко к зелененькому)???
Как далеко друг от друга датацентры расположены?
0
Andrey_Rogovsky #
Стрелки — направление иерархии.
Клиенты обращаются к любым серверам, как это лучше для системы — решает скрипт связывающий snmp с bind.

Расположение Дата-Центров значения не имеет. Вообще в разных странах — зеленый США, синий и желтые — Европа.
0
Urn #
у меня вопрос про «мягкую» репликацию БД.
можно подробнее?
0
Andrey_Rogovsky #
Это не «мягкая» а «софтверная». Все запросы на модификацию выполняются на соседнем сервере, потом на текущим. Если все ок — завершаем транзакцию, нет — откатываемся.
0
Urn #
soft = мягкий ;-)
почему — на соседнем..? тоесть серверы какбы связаны по-кругу? а этот соседний сервер передает запрос на модификацию на следующий (свой) соседний сервер..?
как это реализовано — адаптер БД менеджит коннекты к серверам баз данных, и запросы на модификацию отправляет на соседний сервер..?
+1
pcmaniac #
Такая схема будет корректно работать только если сервер БД знает что такое двухфазная транзакция. Но, насколько я знаю, двухфазные транзакции в MySQL не реализованы. Так при помощи какого вылосипеда вы контролируете целостность зеркальных БД?
0
AstonMartin #
Согласен с seriyPS. Толком нифига не понятно как происходят запросы, как именно все реплицируется, как переключаются днс-ы и прочее.
+2
chuck #
Ожидал от статьи большего. В статье нет ни одного примера… Ни ссылок на ресурсы, которые рекомендует автор.

Хотелось бы:
1. примерная оценка финансовых затрат, примерные цены
2. рекомендации по выбору DNS серверов, зеленых, желтых дата-центров.

Часть ответов есть в комментах, но я думаю, стоит дополнить ими статью, не все читают комменты или могут просто пропустить ветку.
0
gigimon #
Скажите, а как происходит проксирование именно на сквиде? И как я понял из комментариев выше, при ДНС запросе, вы смотрите что менее нагружено и отдаете его адрес?
0
slimlv #
«Каждый сервер имел своего соседа» — вот это круто!
+2
slimlv #
и по существу:
если предположить что каждое облако это отдельная хостинговая площадка на разных континентах, то
— какова скорость синхронизации базы данных и загружаемого контента у данного велосипеда?
— на какую нагрузку расчитанна данная конструкция?
+2
AlexD #
Топикстартер известный шарлатан. Его статьи — это малограмотные «фантазии на тему», никаким реальным опытом не подкрепленные. Разбирали уже не раз — тут он узнает о существовании услуги 'Slave DNS', тут он тестирует Squid vs Varnish, не имея понятия что у него в системе происходит, но выводы делает, тут он оптимизирует шаред-хостинг не имея понятия как работает *nix VM.

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