mutex для распределённого приложения

218
19 декабря 2016, 19:26

Приложение берёт из БД пачку id объектов и проделывает с ними некие вычисления, занимающие до нескольких минут. Сами объекты – набор файлов на диске.

Пора расширяться на несколько серверов. Нужно, чтобы случайно не совпало, и один объект не попал в работу одновременно на нескольких машинах – это приведёт к сбою.

Ещё будут процессы бэкапа, garbage collection / стирания устаревших данных и другие типы работ с объектами, которые так же должны «уважать» эксклюзивную залоченность объекта.

Стек: Linux, PHP, MySQL, Redis.

Пробую просто помещать в set в Redis id объектов, взятых в обработку. Но есть неотловленный пока косяк: иногда эти id зависают в Redis. Видимо, бывает аварийное завершение, при котором не удаляется из набора обработанный id.

Можно завести таблицу в БД, куда заносить id в работе. Менее привлекательно, т.к. задействует диск, в отличие от чисто-памяти Redis.

Как лучше организовать mutex (mutual exclusion, взаимное исключение), «запирание» объектов, которые попадают в работу? Разумно ли использовать свою реализацию, или есть лёгкие/надёжные общепринятые?

Upd. нашёл предложение решения распределённого mutex на Redis.

READ ALSO
Как отнять период от даты в PHP?

Как отнять период от даты в PHP?

Имеем дату из БД $row['doomsday'] в формате 0606

241
Вывод данных из бд с сортировкой

Вывод данных из бд с сортировкой

Есть таблица db_weapons

261
Ошибка при установке Bitrix на хосинг

Ошибка при установке Bitrix на хосинг

При установке Bitrix на хостинг появляется следующая ошибка: Для установки продукта в кодировке UTF-8 необходимо установить библиотеку mbstring c параметрами...

315
php поменять точку на запятую

php поменять точку на запятую

Обрабатываю числа функцией round:

196