Strict Standards: Resource ID#33 used as offset, casting to integer (33) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#35 used as offset, casting to integer (35) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#36 used as offset, casting to integer (36) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Мод кластеризации форума
ТвойWeb » » Моды, хаки, скины и дополнения » Мод кластеризации форума

Страниц (3): [1] 2 3 »
 

1. lift - 11 Июля, 2007 - 07:42:48 - перейти к сообщению
Здраствуйте уважаемые форумчане!
Для начала я немного расскажу о себе и сделаю небольшое вступление:
Я достаточно давно занимаюсь форумами. У меня плоховато с PHP и я не могу сам писать моды для ExBB по этому и пишу в этой ветке чтоб поделиться своей идеей с теми кто это написать может.
Итак, у меня есть несколько своих форумов. Все на IBP 2.1.7 и все лицензинные. Все естественно на мускульной тяге. Самый крутный мой форум примерно в 3-4 раза больше этого форума и в сутки его посещают около 10к уникальных пользователей. Форум расположен на отдельном сервере и вместе с файловым архивом весит около 30-40 гигов. По этому я считаю, что могу рассуждать о форумах большого размера.
Так же за время работы моего форума случалить проблемы с ддосом и я знаю что такое когда неделю хостер перезапускает сервак раз в 30 минут Недовольство, огорчение Собственно тогда и родилась моя идея кластеризации форума и его многократного зеркалирования, но те кто знаком с мускулом поймут что реализовать на нем подобное практически не реально.
Время шло и у меня возникла потребность в небольшом и простом форуме. Мне было очень лень возиться с платными хостингами, мускулом и прочем и по этому я просто нашел фулл мод ExBB и решил попробывать его. Сначала на локалке а потом и нескольких фришных хостах. Небольшое релическое отступление, но я оказался очень доволен форумным движком, техподдержкой, вашим форумом и прочим и достаточно сильно поменял совое мнение о форумах на файлах как об игрушке для ламеров. В процессе своей работы над своим форумом я много бы на вашем форуме, много читал и узнал много интересного. И чем больше я тут читал тем тем чаще ко мне возвращалась идея кластеризации форума так как из всего что я знаю о движках форумов ExBB оказывался саым благодарным донором для данного мероприятия...
А теперь собственно идея:
Во первых что такое кластеры: кластер это единичный элемент сложной системы отличительной особенностью которой является то, что выпадение одного кластера из системы не останавливает ее работу в целом. На каждом элементе кластера происходит работа над своим локальном участком и в случае необходимости любой кластер может заменить собой другой.
На вашем форуме есть такая вот тема: какой размер вашего форума?. Думаю все ее читали (блин, не сомг найти линк) и из той темы ясно видно, что форум размером с этот вполне укладывается в 100 мб. не стичая аттачей, файлов и прочего, что не влияет на работу самого форума. Но в то же время есть много тем наподобии этой, этой и особенно этой. Собственно из всего этого ясно видно, что разместить форум вполне возможно на любом фри хостинге но при этом из-за проблем с нагрузкой на CPU возникает куча проблем с множественным обращением к одному файлу (как раз минус форума на файлах перед форумом на БД)
Теперь как мы решаем эту проблему (для простоты решения берем форум установленны с нуля и без тем и веток):
(Добавление)
1) Для начала нам нужно 2 предположительно платных хостинга, первый размером 100-250 метров по необходимости для размещения самого форума и второй для размещения файлов (в нете есть куча планов у хостеров где продается за копейки просто дисковое пространство без скриптов и прочего, только для хранения файлов с ФТП доступом). Кроме этого нам надо по необходимости сколько угодно фришных (ну или платных) хостов для кластеров основного сайта.
2) Устанавливаем на головной хост форум, все настраиваем. Потом на дополнительных хостах делаем полностью идентичные зеркала
3) А вот теперь нам как раз и нужен мод кластеризации и вот что он должен уметь поскриптно (причем при желании в нете можно найти готовые скрипты по раздельности и задача то в общем собрать их вместе и сделать мод под ExBB)
Самый первый скрипт должен делать всего 2 простые вещи: тусовать запросы по всем заркалам и скрывать при этом заголовки старниц на кластерных копиях форума. Тоесть когда человек набирает адрес форума, он попадает на главный сайт, а в последствии, при навигации по сайту он в произвольном порядке "тусуется" по всем серверам при каждом запросе и при этом адрес в строке браузера соответствует адресу по которому человек пришел. Данный скрипт рабоет одновременно на каждой кластере форума и еще до обработки запроса он решает на какой сервер его послать или вообще никуда не посылать а обработать на себе. Тоесть таким образом мы добьемся того, что при множественном запросе к одному файлу на форуме или ддос-атаке запросы будут распределены случайным образом по разным кластерам. Соответственно в зависимости от желания кластеров на том же холме или другом фришном хосте можно сдеать и сотню и тысячу и нагрузка на каждый конкретный хост будет минимальна Кроме того, если скрипт будет пере пересылкой запроса проверять доступность хоста то все перегруженные хосты будут сразу исключены.
Второй срипт, можно сказать изюминка мода, так же установлен на всех кластерах и занимается только тем, что при малейшем изменении любого файла на форуме (топик, просмотр темы, новый пост) кроме разумеется файла поиска который очень большой по размеру, будет рассылать другим кластерам его копию. Учитывая минимальные размеры конкретного файла трафика это будет заменять немного. А скриптов доступа от ФТП к ФТП простовеликое множество. Этот скрипт как раз и будет синхронизировать все кластеры тоесть делать то, что на любом форуме с БД практически невозможно. Нет, конечно можно синхронизировать в реальном времени сотню баз по 100 мб размером, но... Думаю все и так понятно, делаем из минуса форума на файлах его боооольшой плюс, тоесть легкость синхронизации пусть и множества, но МАЛЕНЬКИХ файлов.
Ну и тертий скрипт как раз и делает то, из за чего данная система будет являться иенно кластерной а не зеркальной. В самом начале описания поговри о втором платном хосте для хранения файлов. При установке ExBB в нем есть некоторый набор фойлов, они есть в каждой копии сайта, на каждом кластере. Но если при изменении аватара, создании архива файлов или аттачивании файлов рассылать копии по всем кластерам, то это будет не гут потому что во первых для каждого кластера нужно будет много места на диске и синхронизация например файла в 2 мегабайта по 100 кластерам скушает достаточно много трафа. Не говоря уже о том, что на многих фри хостах где по идее и будут висеть кластеры есть ограничения на размер файла и это вызовет дополнительные проблемы. По этому данный скрипт будет помещать файлы загруженные пользователями, файловуй архив и аватары на хост-хранилище файлов а на форуме будут автоматом меняться линки. Причем с учетом второго скрипта достаточно будет чтою на любом кластере в любой теме появился аттач, чтоб правильный линк на него появился на всех кластерах.
Собранные в один мод все эти скрипты позволят сделать сайт с возможностью развития до любого размера и при этом будет минимален по затратам. Конечно, есть еще сложности, например администрирование не все можно будет делать с одного кластера, некоторые вещи придеться делать на всех хостах, или обновления тоже придеться делать везде. Да и счетчики кроме майл.ру не воспримут такую систем как один сайт... Но не может же быть просто куча плюсов без минусов Улыбка Но оно того стоит Улыбка
Так что я жду комментариев гуру сайта и возможно подобного мода Улыбка
С уважением, Lift
2. Леголегс - 12 Июля, 2007 - 06:13:53 - перейти к сообщению
lift
Определённо у тебя плоховато с программированием Подмигивание На php нет вменяемого способа обнаружить изменение файла. Это не будет происходить мгновенно. Займёт время и пересылка ftp неэффекитвен на маленьких файлах (соединение, авторицация и т.д.). За это время на других узлах кластера другие посетители могут изменить этот файл, и как ты будешь всё в один соединять? И так блокировки не у всех работают и проблемы с синхронизацией записи мучают даже владельцев FM 0.1.5, а ты хочешь слабое зврено ещё нагрузить. Боюсь эта идея не жизнеспособна.
3. lift - 12 Июля, 2007 - 10:21:50 - перейти к сообщению
Леголегс
Леголегс пишет:
Определённо у тебя плоховато с программированием

Радость я написал об этом в самом начале сообщения. Но пока из моего опыта я видел что на нем можно реализовать практически любую функцию разложив ее на несколько более простых.
Леголегс пишет:
На php нет вменяемого способа обнаружить изменение файла

Поправь меня если я ошибаюсь, но при изменении/добавлении поста, темы, форума, профиля или при любом действии изменяется время файла и по этому параметру можно отследить новые файлы Улыбка К тому же если я правильно разобрался со структурой форума ExBB то многие изменения проходят через (и с участием) файла lib.php. В него же так или иначе встраиваются многие моды. Так что это все вполне реально связать в одну систему.
Леголегс пишет:
Займёт время и пересылка ftp неэффекитвен на маленьких файлах (соединение, авторицация и т.д.)

Есть несколько достаточно простых способа синхронизировать один файл на нескольких узлах. Как тонапример скрипт который отслеживает изменения может поддерживать соединение с несколькими другими кластерами а их сеть создаст цепочку. При этом возьмем для примера файл темы: на этом форуме тема ограничена в настройках до размера 5 страниц по 15 постов по 5 кб. каждый (я только про текст и только прикинув на примере нескольких конкретных тем) итого имеем 375 кб на один файл темы. Насколько я разобрался с ExBB это максимальный размер изменяемого файла. Но на канале сервера разослать такой файл на 10-20 соседних узлов кластера это дело нескольких секунд. И сединение между ФТП можно поддерживать постоянно, это просто вопрос реализации.
Леголегс пишет:
и как ты будешь всё в один соединять

По сисеме правил. 2 поста как не сторайся но нельзя написать одновременно. Я сталивался на IPB кога при быстром постинге некоторые посты у конкретного юзера "вылетали" из за того что БД не успевала обновиться. Так что это не значительная сложность.
Леголегс пишет:
И так блокировки не у всех работают и проблемы с синхронизацией записи мучают даже владельцев FM 0.1.5

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

Я не настаиваю на том что она идеал, но думаю что ты просто не сталкивался с:
lift пишет:
Так же за время работы моего форума случалить проблемы с ддосом и я знаю что такое когда неделю хостер перезапускает сервак раз в 30 минут

и не дай бог тебе такое потому что мне та неделя стоила нескольких сотен $ несмотря что техподдержка IPB достаточно неплоха отробатывала те деньги которые я заплатил покупая лицензию.
4. Леголегс - 12 Июля, 2007 - 12:53:21 - перейти к сообщению
lift пишет:
но при изменении/добавлении поста, темы, форума, профиля или при любом действии изменяется время файла
Это не является "вменяемым" методом, т.к. надо опрашивать файлы с некоторым интервалом. Соответственно чем чаще - тем больше нагрузка на сервер, чем реже тем больше задержки.
lift пишет:
то многие изменения проходят через (и с участием) файла lib.php
Вот тут ты прав, об этом я не подумал. Ну хорошо, допустим мы в состоянии начать делать какие-то действия сразу после того, как файл изменился (хотя тут ещё надо новый поток запустить, т.к. старый должен ещё сообщить пользователю, что всё хорошо, это всё время и техн. сложности, ну да ладно)
lift пишет:
поддерживать соединение с несколькими другими кластерами
На php сложно поддерживать соединение постоянно. Есть ограничение на 30 секунд выполнения скрипта и его не всегда можно преодолеть.
lift пишет:
а их сеть создаст цепочку
Сеть? А главный узел будет? А что будет если он упадёт? А если все равны, то как рассылать новые файлы? Каждый - всем или как-то ещё?
lift пишет:
По сисеме правил. 2 поста как не сторайся но нельзя написать одновременно.
Вот написан новый пост в 18:05 00 сек, он добавлен в файл. Тут приходит сообщение с другого узла о том, что в 18:04 50 сек там было сообщение в ту-же тему, надо прочитать файл и записать его со вставленным новым постом. У нас уже 18:05 03 сек, и написан очередной ответ (все уходят с работ и отписываются на прощание). А мы всё ещё возимся со этим файлом и не можем добавить ещё. Надо дождаться, пока файл освободится и тогда этот 3й пост туда внести, а вот как раз с "дождаться" у форума на файлах проблемы. Может пропасть один из постов, а может случиться всеми "любимое" обнуление.
lift пишет:
Тем, кому понадобиться подобный мод я думаю не составит проблемы всетаки покопаться ручками и порешать локальные проблемы.
Если бы это было так просто...
lift пишет:
проблемы с ддосом и я знаю что такое когда неделю хостер перезапускает сервак раз в 30 минут
Ну это ЧП.
5. lift - 12 Июля, 2007 - 16:00:01 - перейти к сообщению
Леголегс пишет:
На php сложно поддерживать соединение постоянно.

А аналога пинга там нет? Я не скрываю что плохо владею PHP.
Леголегс пишет:
Сеть? А главный узел будет?

Тут есть несколько вариантов. Да простят мне то что я использую не программерскую терминологию, но вот 2 варианта соединения из области СЛС повышенной устойчивости:
1) Двойная звезда (с транковым дублированием)
2) Звезда обвязанная кольцом
(если не понятно о чем речь, скажи и я попробую описать это человеческим языком)
Обе эти системы позволяют дублировать каналы от выпадения элемента. В сетке будет номинально главный узел тоесть узел на котором запаркован домен. На остальных реальные домены могут либо скрываться либо нет по желанию и по возможности.
Леголегс пишет:
А если все равны, то как рассылать новые файлы?

Каждый узел рассылает соседним и происходит сверка файла.
Леголегс пишет:
Вот написан новый пост в 18:05 00 сек, он добавлен в файл. Тут приходит сообщение с другого узла о том, что в 18:04 50 сек там было сообщение в ту-же тему, надо прочитать файл и записать его со вставленным новым постом. У нас уже 18:05 03 сек, и написан очередной ответ (все уходят с работ и отписываются на прощание). А мы всё ещё возимся со этим файлом и не можем добавить ещё. Надо дождаться, пока файл освободится и тогда этот 3й пост туда внести, а вот как раз с "дождаться" у форума на файлах проблемы. Может пропасть один из постов, а может случиться всеми "любимое" обнуление.

Если это происходит на одном и том же кластере то проходит как обычно, если происходит на разных кластерах то посты сливаются при всерке файдлв по правилам. Кстати то что ты написал есть и в форумах на БД. При большом размере базы опреации чтения-записи проходят тоже слишком медленно так что это не совсем весомый аргумент. Кстати, возможно я что-то не понимаю, но разве не проще бороться с обнулением с помощью бекапа файла? Например перед изменением файла делается бекап и если после его изменения происходит уменьшение файла то происходит сверка и если уменьшение бызванно сбоем (модерирование и редактирование с уменьшением размера файла отследить достаточно просто) то файл восстанавливается из бекапа.
Леголегс пишет:
Ну это ЧП.

Это ЧП всетаки построено на эмуляции реальной ситуации тоесть на сильном увеличении количества запросов. Например случай из практики: после рассылки новостей с форума на него как раз вечером после работы ломанулось много народа, при активном постинге и при 900+ юзеров онлайн виртуалка упала. Хостер ее перезагрузил и расстроенные юзеры сразу вернулись чтоб повторить пост... И все повторилось еще раз. Получился непроизвольный ддос слабой виртуалки. В последствии, при переходе на выделенку была спокойно и без тормозов обработана реальная атака на примерно 500 запросов в секунду. Я говорил о лицензионном форуме на БД. Думаю что сейчас говоря о ExBB говорить об 900 юерах онлайн да еще и постящих очень проблемотично...
6. Леголегс - 13 Июля, 2007 - 04:12:19 - перейти к сообщению
lift пишет:
А аналога пинга там нет? Я не скрываю что плохо владею PHP.
Пинг - это специальный пакет (один!) по смыслу похож на "эй, ты!". Сокеты там есть, но не везде разрешены.
lift пишет:
с транковым дублированием
это что такое?
lift пишет:
Если это происходит на одном и том же кластере то проходит как обычно, если происходит на разных кластерах то посты сливаются при всерке файдлв по правилам. Кстати то что ты написал есть и в форумах на БД. При большом размере базы опреации чтения-записи проходят тоже слишком медленно так что это не совсем весомый аргумент.
В распоряжении авторов БД многопоточность, объекты синхронизации (мьютексы и семафоры), гарантированно работающие бликоровки на часть файла и куча времени чтобы это всё написать и отладить.
lift пишет:
Кстати, возможно я что-то не понимаю, но разве не проще бороться с обнулением с помощью бекапа файла?
TvoyWeb почему-то так не сделал, наверно была причина, но я не разбирался.
lift пишет:
Думаю что сейчас говоря о ExBB говорить об 900 юерах онлайн да еще и постящих очень проблемотично...
Для того, чтобы сделать кластер форумов необходимо настолько хорошо решить проблему одновременного доступа к файлу, что эти 900 узеров и так смогут пользоваться форумом на одном сервере.
7. lift - 13 Июля, 2007 - 13:06:17 - перейти к сообщению
Леголегс
Ладно, давай так, я тебе в аттаче подцепил скрипт который переносит файлы с фтп на фтп. Я так понял что ты в PHP всетаки намного больше меня разбираешся и думаю с этим скриптом тебе разобраться проблем не составит. После этого вопрос с синхронизацией с фтпшников станет более четким. Может например окажется что фукции хостинга для такого преноса выйдут за пределы фришных хостов и тогда (если за все узлы кластера придеться платить денег) то моя идея отпадет автоматом Улыбка
Леголегс пишет:
lift пишет:
с транковым дублированием
это что такое?

Это сложная технология. Простой пример реализации: 2 компа соеденены в локалку между собой с использованием по 2 сетевые карты на каждом и с использованием технологии транка. Тогда при нормальной работе эта сеть будет обладать пропускной способностью х4 от пропускной способности каждого канала. Если одна сетевая горит, или рветься кабель или еще что то скорость падает до нормальной при работе с одним каналом. В более сложных случаях (связь более 2-х машин) с таким дублированием приуспела компания Cisco в своих маршрутизаторах. А об их продукции и технологиях можно много найти в поисковках.
8. Леголегс - 13 Июля, 2007 - 15:30:21 - перейти к сообщению
Я всётаки не пойму, как кластер может уменьшить нагрузки при записи - самое слабое место.
9. lift - 15 Июля, 2007 - 12:45:53 - перейти к сообщению
Леголегс
Раскидывая запросы по разным серверам. Несколько не особо навороченных сервера сделают то, для чего нужен один мощный.
P.S. Слущай, учитывая то что за 4 дня кроме нас с тобой никто не отписался в топике он наверное действительно мало кому интересен. Жалко конечно, но предлогаю закончить. Если что-пиши на 268769702 (всегда он, но почти всекда робит) и если хочеш продолжим там Улыбка
10. Леголегс - 15 Июля, 2007 - 12:48:13 - перейти к сообщению
lift пишет:
Раскидывая запросы по разным серверам. Несколько не особо навороченных сервера сделают то, для чего нужен один мощный.
Запросы на чтение - да, раскидываются, запросы на запись - дублируются!

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.047]     [ Gzipped ]