Я понимаю, что мы ничего не можем поделать с тем, что S3 не поддерживает работу atomi c.
Однако, как лучше всего обеспечить такую операцию atomi c на уровне приложения, как таковое это условие можно смягчить:
На этой диаграмме показаны два процесса, подключенных к S3 с помощью библиотеки. Эти процессы выполняются в контейнере сервлетов. Проблема здесь в том, что у обоих клиентов будет шанс получить проверку ключа, которая говорит о том, что ключ не существует, и в зависимости от того, сколько времени займет процесс блокировки в каждом клиенте, оба будут хранить «факт», что целевой ключ не существует. затем, позже, PUT
этот ключ - это основная проблема.
«Client_B» случайно перезаписывает ключ. Как можно смягчить такие инциденты на уровне приложения / сервера?