Quello che stai chiedendo è, in sostanza, l'alta disponibilità. Per rendere un sistema altamente disponibile, sono necessarie tre cose:
- Elimina i singoli punti di errore
- Un meccanismo per passare da un endpoint a un altro
- Un modo per rilevare guasti
Elimina i singoli punti di errore
Nel caso di S3, il punto 1 viene affrontato, come Evgeny ha sottolineato, mediante la replica S3 tra regioni .
La replica, tuttavia, non è istantanea e ti consigliamo di verificare se desideri rendere consapevole o meno la replica della tua applicazione. In caso di interruzione, è possibile che qualcosa che è stato scritto nel bucket di origine non sia ancora stato (non replicato) nel bucket di destinazione. Devi pensare a come l'applicazione gestirà tale scenario. Dipende molto dal tipo di dati, da ciò che viene fatto e (potenzialmente) dagli utenti finali o dalle aspettative della direzione.
Un meccanismo per passare da un endpoint a un altro
Per S3, ciò significa che in caso di interruzione, l'applicazione deve interrompere la lettura e la scrittura da / verso il bucket A e utilizzare invece il bucket B.
Come raggiungere questo, per quanto ne so, dipende da te per ora. Alcuni altri servizi AWS offrono fallimenti completamente trasparenti, ma al momento non sono a conoscenza di una cosa del genere per S3.
Ci sono vari modi per raggiungere questo obiettivo. Un esempio è l'utilizzo di un proxy che instraderà il traffico al bucket appropriato. Durante un'interruzione, è necessario aggiornare / modificare il proxy per indirizzare il traffico verso un bucket non interessato dall'interruzione. Un altro esempio potrebbe essere quello di rendere dinamica la configurazione dell'applicazione e archiviarla in un archivio valori-chiave. Se l'applicazione legge l'archivio KV per le proprietà aggiornate abbastanza spesso, puoi passare da dove leggi e scrivi (Spring Cloud ha il supporto per un listener "EnvironmentChange", per esempio).
Un modo per rilevare guasti
Bene, quello è facile, penso. Basta impostare un ciclo di scrittura + lettura e avvisare non appena qualcosa non va bene :)
Note di chiusura
- Se l'applicazione sta scrivendo nel bucket, è necessario pensare a cosa succederebbe in caso di failover. Tutte le scritture sono arrivate al bucket di destinazione (e puoi dirlo)? Puoi consentire le scritture al bucket di destinazione (rendendolo il nuovo "principale")? Un'attenta pianificazione eviterà scenari di aggiornamenti spaccati o persi.
- A seconda dello SLA, è possibile che i punti 2 e 3 siano automatizzati o automatici. Ciò richiede una pianificazione, strumenti e test aggiuntivi, ma script ben scritti reagiranno sempre più rapidamente e in modi più prevedibili rispetto a quelli umani (i fallimenti hanno anche la fastidiosa abitudine di accadere nel cuore della notte quando l'intervento umano è qualcosa di pericoloso.
- Vale la pena ricordare che anche la replica tra regioni non elimina completamente i singoli punti di errore. Certo, se una regione scende, sei coperto. Ma cosa succede se si verifica un'interruzione di AWS negli Stati Uniti? Azure ha avuto un'interruzione parziale ma globale l'anno scorso e anche una nel 2014.