Модель согласованности данных Amazon S3

Amazon S3 обеспечивает надежную согласованность операций чтения после записи для запросов PUT и DELETE объектов в вашей корзине Amazon S3 во всех регионах AWS. Это поведение применяется как к записи в новые объекты, так и к запросам PUT, которые перезаписывают существующие объекты, и к запросам DELETE. Кроме того, операции чтения в Amazon S3 Select, списках управления доступом (ACL) Amazon S3, тегах объектов Amazon S3 и метаданных объекта (например, объекта HEAD) строго согласованы.

Обновления одного ключа атомарны. Например, если вы делаете запрос PUT к существующему ключу из одного потока и одновременно выполняете запрос GET для того же ключа из второго потока, вы получите либо старые данные, либо новые данные, но никогда не получите частичные или поврежденные данные.

Amazon S3 обеспечивает высокую доступность за счет репликации данных на нескольких серверах в центрах обработки данных AWS. Если запрос PUT выполнен успешно, ваши данные будут надежно сохранены. Любое чтение (запрос GET или LIST), инициированное после получения успешного ответа PUT, вернет данные, записанные запросом PUT. Вот примеры такого поведения:

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

Примечание

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

Конфигурации корзин имеют модель конечной согласованности (eventual consistency model). В частности, это означает, что:

  • Если вы удалите корзину и сразу составите список всех корзин, удаленная корзина все еще может появиться в списке.
  • Если вы включаете управление версиями для корзины в первый раз, для полного распространения изменения может потребоваться короткое время. Рекомендуется подождать 15 минут после включения управления версиями, прежде чем выполнять операции записи (запросы PUT или DELETE) для объектов в корзине.

Конкурентные приложения

В этом разделе приведены примеры ожидаемого поведения Amazon S3, когда несколько клиентов записывают данные в одни и те же элементы.

В этом примере и W1 (запись 1), и W2 (запись 2) заканчиваются до начала R1 (чтение 1) и R2 (чтение 2). Поскольку S3 строго согласован, R1 и R2 возвращают цвет = рубин.

В следующем примере W2 не заканчивается до начала R1. Следовательно, R1 может возвращать цвет = рубин или цвет = гранат. Однако, поскольку W1 и W2 заканчиваются до начала R2, R2 возвращает цвет = гранат.

В последнем примере W2 начинается до того, как W1 получит подтверждение. Следовательно, эти записи считаются одновременными. Amazon S3 внутренне использует семантику "победил последний автор", чтобы определить, какая запись имеет приоритет. Однако порядок, в котором Amazon S3 получает запросы, и порядок, в котором приложения получают подтверждения, невозможно предсказать из-за различных факторов, таких как задержка в сети. Например, W2 может быть инициирован инстансом Amazon EC2 в том же регионе, а W1 может быть инициирован хостом, который находится дальше. Лучший способ определить окончательное значение - выполнить чтение после подтверждения обеих записей.


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Хэш-таблица: разрешение коллизий

Нормальные формы, пример нормализации в базе данных