Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Category:

Продолжаю мучаться с gearmand

Казалось бы простая задача: task queue, адекватно работающая через WAN. Но по факту вылезает столько требований!

Клиенты пушат таски в сервер и получают результаты. Воркеры берут таски из сервера и возвращают результаты.

Если у нас cpu bound worker - то чтобы CPU не простаивал между тасками, надо на воркере иметь запас тасок, чтобы как только таска выполнена - не надо было ждать RTT пока запросишь таску с сервера и получишь её, а можно было сразу брать локально и исполнять.

Если у нас bandwidth bound worker - то надо, чтобы не было промежутков между тасками в канале, т.е. запрашивать с сервера столько тасок, чтобы полностью заполнить bandwidth-latency product.

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

Кроме того, если все эти буферы сделать слишком большими - то ухудшается балансировка между различными воркерами. В частности, задачи, сидящие в буфере загруженного воркера или летящие к нему по каналу, можно было бы отправить другому воркеру, свободному. Наиболее это проявляется для маленьких батчей тасок - общее время исполнения батча оказывается ограничено этим несбалансированным хвостом. Можно пробовать делать work stealing, но там тоже нетривиально - нао следить, чтобы накладные расходы на stealing не превысили выгоды от него.

А ещё есть параллельные воркеры, которым надо слать более одной таски вне зависимости степени влияния вышеупомянутых факторов. Там может возникнуть окончание памяти из-за того, что результаты тасок сильно отличаются по размеру, и воркер тянет либо M тасок, оказавшихся крупными, либо N мелких. Если крупные таски редки - то консервативное ограничение паралеллизма в M сильно просаживает производительность. Аналогично наблюдается при разбросе во времени, если есть быстрые и медленные таски (например, из-за хитов и миссов в дисковый кеш).
Tags: programming
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 5 comments