Рассмотрим неверсионную корзину с единственной возможной последовательностью.
Предположим, я только что загрузил объект, а теперь удаляю его.Запрос на удаление отправляется на сервер, на который объект еще не распространяется.
Теперь, как мне кажется, может произойти всего три вещи:
Сервер запоминает операцию удаления и, таким образом, удаляет объект после его прибытия.на этом сервере.
Сервер отвечает "404 Не найден", и объект продолжает существовать.
Сервер отвечает "201 Нет данных ", забывает об операции удаления, и объект продолжает существовать.
Ответ 1 будет означать, что каждый сервер S3 должен запоминать каждый полученный им запрос на удаление.на тот случай, если позднее он получит соответствующий объект от другого сервера.Единственный способ сбросить эту память - это какая-то глобальная атомарная синхронизация всего кластера S3 (поэтому сервер может быть уверен, что нет ожидающих обновлений для удалений, которые он хочет забыть), что я считаю крайне маловероятным.Однако периодический тайм-аут запомненных удалений нарушил бы окончательную гарантию согласованности, если объект все еще появляется позже.
Ответ 2 , с другой стороны, подразумевает, что если
- Я загружаю объект на сервер A
- Я загружаю новую версию объекта на сервер B
- Я удаляю объект на сервере B
- Толькотеперь сервер B слышит от сервера A о загрузке
.., поэтому я получу устаревшую версию объекта, которая нарушает гарантию согласованности.
Ответ 3 также означает, что возможная гарантия согласованности нарушена, поскольку объект будет существовать после выдачи запроса на удаление.
Таким образом, в принципе все три ответа кажутся одинаково маловероятными.Я что-то упустил?