Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с cron в load balanser 
:(
    Опции темы
BuShaRt
Дата 14.2.2013, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Есть скрипт, который каждую минуту берет из базы данных ограниченный список пользователей и на основание этого списка производит почтовую рассылку.  Алгоритм работы скрипты следующий:
  •  Локальный cron вызывает локальный скрипт
  •  Скрипт заходи на отдельный MySQL сервер и получает от туда данные
  •  Скрипт постепенно скармливает письма в Amazon SES/

В идеальных условиях скрипт работает как часы, но есть проблема, связанные с инфраструктурой работы серверов:
Production может состоять из несколько серверов-клонов. Сервера клонируются полностью: cron, скрипты, конфиги и т.п.. В связи с этим, каждую минуту на каждом сервере локальный cron запускает локальный скрипт, получает общие данные и начинает ими пичкать SES. В результате синхронной работы мы:
  •  На каждый email уходит столько писем, сколько у нас серверов.
  •  Нагружаем SES выше нормы (а скрипт как раз и балансирует нагрузку)

Первоначально была идея блокировать таблицу. Я предполагал, что один из скриптов опередит другие на людю секунды и заблокирует таблицу, не давая другим работать с ней. Но на практике оказалось, что другие скрипты будут просто ждать своей очереди и отработаются, когда будет снаята блокировку.
Есть у кого-нибудь идеи, как обойти эти проблемы?
PM MAIL   Вверх
s0lman
Дата 14.2.2013, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


Профиль
Группа: Участник
Сообщений: 637
Регистрация: 1.11.2007
Где: Ukraine

Репутация: 9
Всего: 29



Может вовсе не крон юзать, а например, php-daemon? Тогда не должно вызываеться несколько экземпляров скриптов...


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Fortop
Дата 14.2.2013, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(s0lman @  14.2.2013,  20:13 Найти цитируемый пост)
Может вовсе не крон юзать, а например, php-daemon? Тогда не должно вызываеться несколько экземпляров скриптов... 

мде.
Гениально, что я могу сказать...
Советую еще раз перечитать вопрос.



Цитата(BuShaRt @  14.2.2013,  18:13 Найти цитируемый пост)
Есть у кого-нибудь идеи, как обойти эти проблемы? 

Есть два варианта.
1. помечать в БД мыло как уже обработанное.
Минус в том, что можно поиметь тормоза связанные с БД

2. каждому серверу присвоить свои номер и скрипты на сервере должны брать почтовые адреса только если некая f(ID) будет выдавать этот номер.

Т.е. например 
f = ID % 10
Тогда нам нужно 10 серверов, где 1й будет обрабатывать адреса с ID = 1,11,21,31 ...
7й адреса с ID = 7,17,27 ...

Минус в том, что при масштабировании нужно будет менять код на многих серверах сразу.

Добавлено через 1 минуту и 21 секунду
нагрузка же балансируется банальным разнесением задач крона по времени на каждой машине.
на 1ной стартует в 6ть утра
на 2й в 8 утра и т.д.

Добавлено через 4 минуты и 6 секунд
Кстати, вопрос масштабирования серверов легко решается двумя путями:
или автоматическим деплоем (который подстраивает конфиги скриптов)
или немного более усложненным алгоритмом определения номера сервера (например опираясь на какую-нибудь аппаратную часть) чтобы не зависеть от конфига


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
BuShaRt
Дата 15.2.2013, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



Цитата(Fortop @  14.2.2013,  23:41 Найти цитируемый пост)
Минус в том, что можно поиметь тормоза связанные с БД

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

Цитата(Fortop @  14.2.2013,  23:41 Найти цитируемый пост)
 каждому серверу присвоить свои номер и скрипты на сервере должны брать почтовые адреса только если некая f(ID) будет выдавать этот номер.

Цитата(Fortop @  14.2.2013,  23:41 Найти цитируемый пост)
Минус в том, что при масштабировании нужно будет менять код на многих серверах сразу.

Вы сами отмели этот вариант. Погрязать в "технических долгах" нет желания.
PM MAIL   Вверх
Aliance
Дата 15.2.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



У нас на проекте есть аналогичный функционал, мы решаем этот вопрос именно так:
Цитата(Fortop @  15.2.2013,  00:41 Найти цитируемый пост)
1. помечать в БД мыло как уже обработанное.


PM MAIL WWW ICQ Skype   Вверх
BuShaRt
Дата 15.2.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



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

Добавлено через 9 минут и 55 секунд
Цитата(Aliance @  15.2.2013,  10:17 Найти цитируемый пост)
У нас на проекте есть аналогичный функционал, мы решаем этот вопрос именно так:

Окей. Так мы решим проблему дублирования почты, но весь парк серверов по прежнему получит свою порцию писем и разом примется за их рассылку. В то время, как скорость рассылки одного сервера расчитана на полную загрузку Amazon SES. Если серверов будет несколько - Amazon SES не выдержит нагрузки (если быть точным, просто откажет нам в столь стремительной рассылке)
PM MAIL   Вверх
Fortop
Дата 15.2.2013, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(BuShaRt @  15.2.2013,  10:14 Найти цитируемый пост)
Не прокатит. Все сервера получают доступ к записи почти одновременно - разница миллисекунды. Пока самый быстрый скрипт дойдет до инструкции апдейта записи, остальные уже успеют ее прочитать.

Транзакции вам на что?

Добавлено через 2 минуты и 2 секунды
Цитата(BuShaRt @  15.2.2013,  10:14 Найти цитируемый пост)
Вы сами отмели этот вариант. Погрязать в "технических долгах" нет желания. 

Я его не отмел. 

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

Добавлено через 4 минуты и 45 секунд
Цитата(BuShaRt @  15.2.2013,  10:17 Найти цитируемый пост)
В то время, как скорость рассылки одного сервера расчитана на полную загрузку Amazon SES. Если серверов будет несколько - Amazon SES не выдержит нагрузки (если быть точным, просто откажет нам в столь стремительной рассылке) 

Если не в состоянии реализовать балансировку отправки по серверам, то ставьте все письма в очередь.
И отправляйте из нее уже с одной машины, контролируя скорость отправки.

Вообще я не понимаю сути вопроса. Если даже один сервер загружает ваш Амазон под завязку, то много серверов вам зачем? 


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0803 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.