Оптимизация форума на IPB {Эксперименты и результат}

15822500169_0931f5ecbf_b

Оптимизация форума на IPB {Эксперименты и результат}

Буду очень краток. Последний месяц выдался слишком напряженным, поэтому я ушел в отпуск, на ближайший месяц точно!

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

Первым делом было принято решение менять сервер.
Взяли на Hetzner SX61 SSD, настроили ему нормальный конфиг базы данных, нормально настроили связку nginx + apache. Все ожило. Но осталось одно но. Средняя нагрузка на процессор все равно была 60-70% и в пик доходила до 100. А любой паук, собирающий битые ссылки, гугл, или «дружественная организация с DDOSом», могли спокойно обрушить стабильность системы. Так что смена сервера это был первый шаг. Мало  того Динокс на радостях, что форум живой, скормил гуглу сайтмапы, после чего гуглбот заселился по полной на форуме, будто Дэн Билзерян в пентхаусе Беладжио.

80% от всей нагрузки создавала база, и cтало ясно, что нужно дать ей дополнительный запас прочности. И тут на ум приходит страшное слово — репликация.

А там где репликация — там уже второй сервер.  Сказано, сделано, заказали вторую железяку. Подняли реплику. Поставили страшного зверя MaxScale, который должен был балансировать нагрузку между базами. И ничего не произошло.

Ну как, не «совсем ничего», разгрузили мы где то процента три. А все почему, потому, что в IPS присутствует несколько недоделанный ORM, который валит очень мало чистых атомарных запросов на чтение. И тут надо вернуться назад, так как нативная репликация средствами mysql возможна только в master-slave режиме, соответственно на слейв запросов уходило очень мало, хотя мы и настроили все в режим master-write/slave-read. Было принято решение разворачивать кластер и делать репликацию по схеме master-master.

Всякие недоделанные оптимизаторы, могут меня ща ткнуть пальцем в статью на ruhihgload про то что можно извернуться и сделать master-master репликацию, средствами mysql-сервера. Но тут чуваки реально  гонят, так как любая коллизия порушит к монахам подобную связку, а еще есть deadlock.
Так вот, всякие адепты ruhighload — идите в жопу и играйте в песочнице.

В такой ситуации без полноценного DB-кластера, мы бы просто ходили по минному полю.
Вобщем взяли аккаунт на DigitalOcean, запилили там тестовую площадку и развернули Galera Cluster. В силу врожденной лени, Savage4pro нашел чудоюдософт под названием ClusterControl. Нереальная хрень, с гиперизбыточным функционалом, денег стоит я подозреваю ахулиард, но месяц бесплатного фуллтриала нас полностью устроил. С помощью CC — на голые сервера в три клика накатывается на 90% готовая сконфигурированная система. А потом узлами кластера можно жонглировать как горячими пирожками.

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

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

Чуваки, мы реально три дня долгими зимними вечерами, только тем и занимались что тушили-включали узлы, по очереди, все, в разных последовательностях, и оно все равно заводилось, подтягивало актуальное состояние во все базы и начинало работать.
Я не шучу — мы правда на это потратили три дня.

В итоге с такой-то матерью и полным кардбланшем от Динокса, мы завели и отработали тестовую систему и пришло время собирать это дело в бою. Было решено собрать систему в формате web server с nginx и phpfpm, без всяких apache + две реплики базы master-master + небольшой управляющий vps под сервисные нужды.

И вот тут мы наткнулись на полный ппц, если вы помните, две недели назад  вместо форума полдня были миньоны. В теории они должны были появится на 2-3 часа, а провисели 16, несмотря на горы проведенных тестов всего предусмотреть нельзя и в одном моменте мы крепко хомутнулись, потому что нельзя просто так взять и просто так взять! Все в итоге закончилось успешно и форум начал дышать полной грудью.

В первые дни Гугл сошел с ума, я так понимаю что он меряет время отдачи контента и сам балансирует нагрузку, которую создают боты. А тут он получил абсолютно стабильные 200мс загрузки страницы. Ну и загружал он, как я показывал на предыдущих графиках по 150-250000 страниц в сутки + нагрузка от посетителей порядка 70-100 000 просмотров + другие боты, я думаю суммарно сопоставимы с гуглом. в итоге 300-500 000 просмотров страниц в день и полет  нормальный.

Конечно в итоге не обошлось без приключений. Какое то время пришлось потратить на решение пары вопросов, связанных с окружением и спецификой работы таблиц innodb в кластере, те самые deadlock.  Но это уже были детали.

Также мы включили Opcache. Для тех кто не понимает Opcache — это не хранилище для данных, это кеширование исполняемого кода php. В прошлой статье я задавал вопрос. куда делась system — нагрузка, вот ее Opcache и снял.

Сразу после сетапа сервера, которому суждено было стать web-мородой мы на него поставили Munin для мониторинга всего и вся. А сегодня еще прикрутили PHP7.
Я специально оставил этот процесс на сладкое, для того чтобы имея подробную статистику показать вам, да и самому увидеть есть ли от него толк. Таки есть.

Вот вам большой красивый график:

ctoday_cpu

 

Да действительно PHP дает большой прирост производительности. Но друзья мои. У нас здесь только web-сервер, нагруженный, но тут нет базы. Не спешите бежать к вашим вебмастерам с воплями ХОЧУ ХОЧУ ХОЧУ. Если вы для магазина на Opencart поставите PHP7, явной разницы между 5.4 или 5.6, вы не ощутите. В нашем случае это выглядит красиво и дает 10 кратный запас прочности, вместо 6 кратного, который был до этого и это очень круто, так как программой максимум было развернуть систему с нагрузкой в 25%, а тут получились все 10.

Вот еще одна красивая картинка с динамикой событий:

monthly_cpu

 

И еще одна:

nginx_monthly

Небольшой общий faq.

Почему  Galera а не  Percona XtraDB Cluster ?
- потому как базы у нас крутились на MariaDB а Galera — родная так сказать система для нее. 

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

Почему в качестве прокси-прокладки мы не стали использовать MaxScale, а остановились на HaProxy
- несмотря на то что MaxScale также продукт MariaDB foundation, у HaProxy получше система мониторинга — а мониторинг наше все.

Почему dedicated а не облако на том же DigitalOcean?
- потому что физический сервер всегда будет быстрее чем любая виртуализация.

Почему арендованные сервера, а не купить свои — это же дешевле?
- свои сервера хорошо и дешевле, пока вы не посчитали стоимость colocation(стоиомость аренды юнита пот сервер в нормальном дц с хорошим,и каналами считайте половина аренды сервера на Hetzner). С ценой сервантов на Hetzner, да еще минус 19% НДС — итоговая цена аренды — совсем не больно, и мы не привязаны физически ни к хостеру ни к ДЦ. Завтра захочется сменить место дислокации — теряется только месячная абонплата.
будет необходимость увеличить ресурсы, новый узел докупается в один клик и готов к использованию прямо сейчас при этом нет проблем со скоростью коннекта между узлами — у Hetzner очень быстрые внутреннии магистрали как внутри так и между дата-центрами. Почти нет разницы в общем стоят сервера в одной стойке, или в разных ДЦ.
Выпустят послезавтра PHP8 с мегаскоростью работы, отказались от избыточных мощностей — сократили затраты.
А свои сервера — только устаревают и теряют в цене!

Почему мы не масштабировали web-сервер?
- пока что в даной конфигурации присутствует десятикратное резервирование, которого достаточно с головой. 

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

Чем осуществляется мониторинг серверов?
- Munin и встроенные средства CLusterControll

Итог.
Я попытался очень кратко описать детали процесса понятным для большинства языком.
Но кое-что я осозанно пропустил. Во первых — не раскрыл подводные камни связанные с развертыванием системы и способы их обхода, во вторых — не вдавался в технические подробности, потому как Commercial.

Также я не стал считать детальную смету месячных расходов, могу озвучить приблизительный порядок — это около 160-200 долларов в месяц.

Я не могу сказать что мы супер-пупер умные перцы. И больше так никто не умеет делать. Это будет полная чушь, так как любая площадка в топ-500 выдачи Яндекса на порядок сложнее.  Но мне кажется у нас получился очень правильный проект и подошли мы к нему не с позиции — лишь бы сделать, а с позиции сделать круто настолько, насколько это возможно, при этом без единого вмешательства в код системы.
И вот тут я должен выразить огромную личную благодарность как Savage4pro, так и Dinox.
Потому что с первым у меня каким то образом получается полное взаимопонимание процессов (ну и как то слишком часто мысли сходятся), и во многом благодаря этому взаимопониманию у нас все получилось, а второй проявил себя очень достойно во всем: от оперативной реакции по его задачам процесса (изменение днс, деплой серверов, конфигурирование форума) до полного вникания во все этапы, но без намека на попытку повлиять на процесс, потому что «где то прочитал». Т.е. все что мы делали, мы делали ровно так и в том виде как мы считали нужным.

——————— Happy end ————-

p.s.


Мой друг Снастик, недавно прищемил хвост Топорчиле за его некомпетентность, немного поведав миру про способности и квалификацию этого супер специалиста. У них там вышла общественная перепалка. Топорчила разнылся как баба (а надо сказать, что как баба он ныл уже не раз, даже убежал поджав хвост с нашего форума, видите ли матом ему не нравица разговаривать, хотя тут он пиздит хуйло, так как за неоправданный мат в паблике у нас, я вычисляю и баню по айпи, и подобной проблемы к которой он аппелирует нет в природе), начал нести какую то пургу про самцов, ранговые потенциалы и еще кучу всякой мути. За Топорчилой прибежал целый хор из его группы поддержки, который начал нести такую несусветную чушь, что я ржал после этого неделю. Но у меня не было и нет ни малейшего желания участвовать в этой дискуссии. И подобных. Уже несколько раз на примерах других людей были ситуации, когда человека тычешь носом в его косяки, он идет и переделывает.

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

Так что, девочки, заканчиваем ебать валенки и занимаемся делом. Работаем. Берите с нас пример, делайте вещи, грызите матчасть, и если дрочите на нас — делайте это тихо!

Хуйнаныр(47)Очко(1)

Запостить высер

Стучать мне на мыло
avatar

Сортировать:   Свежие | Тухлые | Хуйнанырные
Вася Хуйкин
робот-вертер
Вася Хуйкин
5 месяцев 7 дней назад

Пока читал статью — ощущал себя блондинкой и чувствовал как хуй Йоды увеличивается на 5 см/с.

dinox
робот-вертер
5 месяцев 7 дней назад

Спасибо за работу и наконец-то спокойные ночи и стабильную работу форума

19th
робот-вертер
5 месяцев 7 дней назад

крутота

Ping
робот-вертер
Ping
5 месяцев 6 дней назад

Нормальненько написал, с интересом читанул

XPEH
робот-вертер
XPEH
5 месяцев 6 дней назад

А в это же время мудаки типа vier пишут такие фильтры

И это в админке и в одну строку блять!

Причем он сам недоумевает и не может пофиксить почему такое ложит админку магазина в котором категорий чуть больше чем в демке опенкарта

Waha
робот-вертер
Waha
5 месяцев 6 дней назад

Йода, ты прям вырос изрядно)) Уже статья не про то как письками меряются, а прям от профи как на Хабре гуру пишут. Че сказать, ты крут)

wpDiscuz