Как добавить согласованность чтения после обновления к AWS S3 - PullRequest
1 голос
/ 20 февраля 2020

Я пытаюсь использовать S3 в качестве хранилища данных для приложения (по причинам, которые не относятся к этому вопросу, я не могу использовать правильную СУБД).
Моя проблема заключается в том, что я хочу читать после последовательность обновления: если я пытаюсь прочитать объект сразу после обновления , я хочу получить обновленный объект.

S3 гарантирует согласованность чтения после записи (т. Е. Если вы пытаетесь прочитать объект сразу после его создания, вы гарантированно добьетесь успеха).
Однако он не гарантирует чтение после обновить согласованность (т. е. если вы попытаетесь прочитать объект сразу после , обновив его, вы можете получить предыдущую версию объекта).
Кроме того, у него есть больше предостережений .

Что я могу добавить к своему решению, чтобы оно имело согласованность чтения после обновления?

Я подумал о нескольких вариантах:

  1. Кэш сквозной записи: каждая запись сначала обновляет кэш (подумав об использовании mongoDB, как я наиболее знаком с ним, и он быстро читает последние объекты), затем на S3. Каждое чтение сначала пробует кэш и возвращается к S3, если не найдено.
    Однако, это решение удваивает вероятность сбоя (т. Е. Если mongoDB не работает, или S3 не работает, то вся моя база данных вниз). В идеале я бы хотел иметь только S3 в качестве точки отказа.

  2. Всегда пишите новые объекты, никогда не обновляйте: Я думал, что смогу обойти это, используя гарантию чтения после записи; вместо создания объекта /my-bucket/obj-id.json я создам /my-bucket/obj-id/v1.json. Когда я обновлюсь, я просто создам V2 et c.
    . При чтении мне нужно перечислить ключи с путем obj-id и выбрать последнюю версию.
    Однако, один из приведенных выше caveats:

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

Есть ли способ «обмануть» возможную последовательность S3? Или я застрял с компонентом кэша?
Или, может быть, есть третья, лучше идея?
спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...