Согласованность S3 для успешного чтения после записи - PullRequest
0 голосов
/ 02 ноября 2019

Не удалось найти окончательный ответ здесь.

Согласно документам Amazon S3, предостережение для чтения после записи: если я получил 404 для GET, затем PUT новый объект, затем GET. Мой вопрос, после того, как я ПОЛУЧУ успешное чтение,
будут ли последующие чтения также успешными?

Пример:

GET key 404
PUT key 200
GET key 404 # because caveat
GET key 200 

Отныне ли любой последующий GET key гарантированно будет успешным?

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Предупреждение AWS в документации S3 предполагает, что они используют слой кэширования поверх базы данных, которую они используют для хранения сведений об объектах в S3, таких как их ключ и метаданные.

Если вы сделаете PUT для объекта в качестве первой операции и GET после этого, произойдет пропуск кэша для операции GET, поэтому слой кэширования будет извлекать информацию об этом объекте из базы данных.

Если вы выполните GET до PUT, то слой кэширования запросит базу данных, получит информацию о том, что этот объект не существует, и кеширует эту информацию, даже если после PUT создается упомянутый объектвскоре после. Таким образом, GET после PUT получит информацию о том, что объект не существует из кэша.

Возможно, поэтому существует эта оговорка. К сожалению, это не отвечает на ваш вопрос, потому что мы не знаем, как работает этот уровень кэширования. Если этот уровень использует общее состояние, вы должны получить ответ 200 на все запросы, как только вы получите один ответ с 200. Я предполагаю, что они не используют общее состояние для слоя кэширования, поскольку это легче масштабировать. Без общего состояния это зависит от вашей удачи, времени жизни для элементов в кеше и от того, используют ли они некую недействительность кеша для обновленных объектов, получаете ли вы 200 или 404 для запросов даже после первогоуспешный 200 запрос.

Поскольку детали внутренней работы S3 неизвестны, я не буду полагаться на последующие вызовы, чтобы преуспеть, но я предполагаю, что вероятность получения 404 после успешного200 довольно низкий. В конце концов, в зависимости от вашего варианта использования вы должны решить, имеет ли смысл объяснять эту ситуацию и как.

0 голосов
/ 02 ноября 2019

В документации AWS не указываются детали времени для возможной записи, но да, это возможно, поэтому вы получаете 404 после своего PUT. Но, по моему опыту, после распространения записи они надежны, поэтому после первых 200 для GET вы можете предположить, что остальные GET вернут 200.

...