Развиваемся! И даже чувствуется задел на будущее. А ведь уже скоро настанет тот день, когда понадобится подключать третий сервер. Интересно, какое будет у него название?
А можно поинтересоваться (не совсем по теме, но все же): применяется ли на Хабре кеширование страниц (например, текста топиков) и эффективно ли оно, если применяется? Или тут его не применить из-за обновления комментариев и прямого эфра?
Если говорить именно о механизме, то «умные» запросы к memcached позволяют избежать ситуации, когда данные устарели в кеше и приходит несколько запросов, последовательно пытающихся получить данные и записать их в кеш. Если данные устарели, то лишь первый запрос пойдет их обновлять, а остальные запросы будут получать устаревшие данные, пока ушедший за обновлением запрос не отработает :) Поэтому smartSet/smartGet используется не всюду, а лишь там, где не критично получать «немного старые данные».
ЗЫ Juks, молодец! Этого нам не хватало очень сильно.
не один нормальный MySQL load-balancer, боюсь, за несколько часов не поставить. У них у большинства имеются свои ограничения на программную часть, как минимум, скорее всего придётся писать свой межсерверный join
Отставание пока нет, надо конечно, но пока только статус. В деле существенное отставание бывает только когда слейв догоняет мастера после восстановления репликации
можешь написать более точное описание серверов, железа так сказать, мне нужно начальству показать что нужно чтоб миллион запросов обрабатывать. спасибо.
Скажите, %juks%, а может быть имело смысл вынести такую логику по коннекту к определенному DB серверу и выбору менее загруженного, скажем в отдельный скрипт, и запускать его по крону, чтобы он обновлял статистику в memcached актуальными данными. Ну и поставить интервал запуска скрипта в соответствии с Вашим $cacheTime = 35;. А в рабочих скриптах уже просто выгребать данные из кеша. В которых бы лежали статистика по каждому из серверов. Что Вы думаете по данному поводу?
Я думаю, что это уже на любителя. Я стараюсь делать меньше крон-задач, меньше нагромождения.
Текущая реализация схожа по работоспособности с тем, что вы предлагаете, просто действует «on demand». Как-нибудь, может напишу про smartGet и smartSet, там всё элементарно, но в действительности спасает от лишних запросов к базе.
Если не кешировать запросы вообще, то это добавляет по 20% нагрузки CPU на каждый сервер. С кешированием дополнительная нагрузка незаметна. Как получить отдельно число работающих тредов без сбора всей статистики целиком я так и не нашёл.
У крона ведь дискретность одна минута, у Memcached — секунда. Даже при периоде в 5 секунд, время от времени имеет место некоторая «раскачка» нагрузки от сервера к серверу.
Так что если выносить, то надо делать отдельный демон.
Баланс