• XSS.stack #1 – первый литературный журнал от юзеров форума

Как считать таски лоадера

neko

RAID-массив
Пользователь
Регистрация
24.10.2012
Сообщения
83
Реакции
4
В процессе ваяния собственного кода возник этот вопрос. В том паблике, что я находил таски считаются довольно топорно - если бот зашел на гейт, то отдается задание и записывается боту как выполненное и больше не отдается, но это же бред, так как возможны проблемы:
- соединение прервалось и задание скачалось ботом не полностью
- сервер откуда надо скачать недоступен или перегружен
- файл не запустился
и так далее. Из-за этого статистика будет неправдоподобной. Не будет ли лучше отдать задание, пометить его как pending для бота и ждать второго отстука с подтверждением о выполнении? С другой стороны это рождает проблемы, что довольно трудно точно слить лоады, так как между статусами pending и done задания для конкретного бота может пройти какоето, иногда довольно существенное, время, за которое задание может отдаться ещё нескольким ботам. С другой стороны можно считать общее pending+done и если какие-то pending будут не выполнены в течении некоторого времени - повторяем их для других ботов, которые ещё задания не выполняли, но тут опять минусы - тормозится выполнение задания. Как лучше?

И второй вопрос, возникший вследствии разбора чужих админок - многие кодеры выполненные задания для бота пишут в его запись в каком то поле (разделенные каким-то символом - task1|task2|...). Это как-то коряво на мой взгляд. Насколько помню отношения многие ко многим нормализуются через промежуточную таблицу, где каждая запись будет устанавливать соответствие между конкретным ботом и конкретным заданием. Вопрос в том, что не будет ли это менее производительнее чем первый вариант?

PS Сорри если форум не соответствует, долго думал куда лучше, решил, что все таки здесь - если надо, перенесите пожалуйста.
 
Не знаю у кого как, а у меня реализовано подобным образом - бот стучится на в админку, скрипт админки чекает необходимые параметры ( какие задания назначены этому боту\стране e.t.c) и если всё ок то отдаёт команды боту, бот берёт команды, заносит в у себя в конфиг и пытается их по очерёдности выполнить, если команда выполнена успешно, то бот удаляет её из конфига и отправляет запрос к серверу - "ид такой то команду с таким номером выполнил", если же произошёл сбой то всё повторяется сначала.
Имхо самый оптимальный вариант.
 
x0r дал самую классическую (и логичную) реализацию. Можно много как извратиться, но вопрос стоит ли?
Что касается производительности, то тут два момента:
1. Конечно глупо хранить в варчаре задания разделяя их спецсимволом. (это от большой лени так сделано)
2. Глупо использовать СУБД MYSQL для содержания ботнета. Технологии давно уехали дальше. Посмотрите в сторону той же MongoDB - она позволит держать существенно больше (на порядок точно) ботов на одном и том же сервере нежели мускул.
 
neko твой вопрос обсуждался в моем обзоре myloader.
Нормальный лоадер работает по принципу "выдаем задания до тех пор пока количество исполненией не равно нужному". Не корректно выполненные лоады компенсируются перевыполнением за счет разницы во времени между выданными заданиями и выполненными.
Наверное сложно расписал...


Смотри. Нам нужно 100 лоадов:
Бот ломится в админку - даем задание. Он отвечает что выполнено или не отвечает.
Выдаем поступающим ботам задания до тех пор пока выполнено меньше 100.
Достигаем цифры 100. Задание больше не выдаем.
Но боты получившие задание ранее - выполняют его. И получается количество лоадов > 100. Допустим 105.
5 - это перевыполнение которое списываем на проблемы при запуске которые могли возникнуть.
 
x0r
Спасибо, но немного непонятно вот здесь
>> если же произошёл сбой то всё повторяется сначала.
бот отстукивает об ошибке? есть ли ограничение на количество ошибок? как обрабатывается ситуация когда нам изза ошибок не хватает до лимита?

TrueUser
Спасибо. По MongoDB то понятно, я бы вообще использовал бы python с асинхронным фреймворком ещё (tornado тот же), либо вообще кастом сервер плюсовый, но тут встает проблема денег, тесты хочется сделать побюджетней и на нормальный vds не тратиться, поэтому и связка php+mysql чтобы было больше выбора + объемы не те пока, чтобы заморачиваться особо, просто было интересно.

Ar3s
Спасибо, обзор почитаю. Схема понятна и скорее всего её и применю, так как просто, быстро и надежно.

Ещё раз всем спасибо за ваш опыт )
 
neko
Не, бот просто не отстукивает об успешном выполнении задания, и пытается выполнить ещё раз, если удачно - отстук о выполнении, если нет - опять пробуем
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх