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