Я работаю над этим уже несколько дней, и я нашел несколько решений, но ни одно из них не было невероятно простым или легким. Основная проблема заключается в следующем: у нас есть кластер из 10 машин, на каждом из которых работает одно и то же программное обеспечение на многопоточной платформе ESB. Я могу довольно легко справиться с проблемами параллелизма между потоками на одной машине, но как насчет параллелизма на одних и тех же данных на разных машинах?
По сути, программное обеспечение получает запросы на передачу данных клиента из одного предприятия в другое через веб-службы. Однако клиент может существовать или не существовать в другой системе. Если это не так, мы создаем его с помощью метода веб-службы. Так что это требует своего рода тестирования и установки, но мне нужен какой-то семафор, чтобы блокировать другие машины от возникновения условий гонки. Раньше у меня были ситуации, когда удаленного клиента создавали дважды для одного локального клиента, что на самом деле нежелательно.
Решения, с которыми я концептуально играл:
Использование нашей отказоустойчивой общей файловой системы для создания «блокирующих» файлов, которые будут проверяться каждой машиной в зависимости от клиента
Использование специальной таблицы в нашей базе данных и блокировка всей таблицы, чтобы выполнить «проверку и установку» для записи блокировки.
Использование Terracotta, серверного программного обеспечения с открытым исходным кодом, которое помогает в масштабировании, но использует модель со спицами.
Использование EHCache для синхронной репликации моих "блокировок" в памяти.
Я не могу себе представить, что я единственный человек, у которого когда-либо были подобные проблемы. Как ты это решил? Вы готовили что-то на месте или у вас есть любимый продукт стороннего производителя?