Lecciones aprendidas de la reciente interrupción de AWS S3

Amazon S3 sustenta muchos servicios de AWS, incluidos AWS Lambda, Elastic BeanStalk y el propio Service Health Dashboard de Amazon. También sirve como almacén de objetos y medios para muchos otros servicios de Internet que dependen de él todos los días.

El 28 de febrero de 2017, AWS experimentó una interrupción de horas del servicio Amazon S3 en la región US-EAST-1. Eso creó un efecto en cascada de interrupciones en una buena parte de Internet, incluidos servicios como Dockerhub.

Un error humano resultó ser la causa principal:

A las 9:37 a.m. PST, un miembro autorizado del equipo de S3 que usaba un libro de jugadas establecido ejecutó un comando que estaba destinado a eliminar una pequeña cantidad de servidores para uno de los subsistemas de S3 que se utilizan en el proceso de facturación de S3. Desafortunadamente, una de las entradas al comando se ingresó incorrectamente y se eliminó un conjunto de servidores más grande de lo previsto.

Resulta que existe una idea errónea común sobre la diferencia entre durabilidad y disponibilidad. La durabilidad mide la confiabilidad del almacenamiento y responde a la pregunta "¿Voy a perder mis datos?" La disponibilidad, por otro lado, mide qué tan accesibles son los datos, es decir, "¿Podré recuperar mis datos?"

AWS S3 ofrece una durabilidad del 99,999999999% en una sola región. Si examinamos el ejemplo de Amazon, eso significa que si almacena 10,000 objetos en S3, en promedio, un solo objeto puede perderse una vez cada 10 millones de años. Amazon S3 logra esto replicando los datos en múltiples instalaciones dentro de una región.

La disponibilidad estándar de objetos de S3, por otro lado, es del 99,99% anual dentro de una región. Lo que eso significa es que en un período determinado de 12 meses, debe esperar un total de 52 minutos y 33 segundos de no poder acceder a sus datos.

AWS ofrece servicios IaaS y PaaS. A nivel de IaaS, los clientes de AWS tienen control total sobre los servidores y redes virtuales. Pueden configurar cualquier software y servicio que deseen, y lo administran por su cuenta. Cualquier interrupción es responsabilidad del cliente.

A nivel de PaaS, AWS ofrece servicios de plataforma totalmente administrados, como almacenamiento de objetos, bases de datos, colas, etc. El cliente delega la responsabilidad de la disponibilidad y durabilidad de estos servicios al proveedor de servicios administrados, AWS en este caso. Los servicios de la plataforma AWS que se utilizan a través de su API patentada son particularmente vulnerables a una interrupción regional debido a un error humano en AWS.

El error humano puede causar una interrupción en cualquier lugar: en las instalaciones, en la nube, administrado o autohospedado. Considere la reciente interrupción de la computadora de Delta como un ejemplo de la caída de un sistema autohospedado completo. Delegar la responsabilidad de administrar un servicio de plataforma a un proveedor de nube no cambia el hecho de que el error humano puede derribarlo, pero amplifica el impacto. Mientras que la interrupción de Delta solo afectó a Delta, una interrupción de AWS S3 afectó a una buena parte de Internet.

Afortunadamente, AWS S3 ofrece amplias herramientas para reducir el impacto de una interrupción. Consideremos solo algunos.

Replicación entre regiones S3

Los datos almacenados en una región S3 particular se replican en todas las zonas de disponibilidad y pueden soportar una interrupción en cualquier zona. Sin embargo, no puede sobrevivir a una interrupción en toda una región, como la que ocurrió el 28 de febrero. La replicación de objetos S3 en regiones geográficas ayuda a satisfacer los mayores requisitos de redundancia.

Copias de seguridad

La replicación entre regiones puede ayudar a aumentar la disponibilidad. Las copias de seguridad en AWS Glacier pueden contribuir a una mayor durabilidad. Convenientemente, AWS ofrece un mecanismo automático para realizar copias de seguridad de objetos en S3 en Glacier.

Considere la distribución de contenido con CloudFront

Si se accede con frecuencia a sus objetos de S3, puede tener sentido configurar AWS CloudFront para servir objetos desde S3. CloudFront replicará los datos donde los usuarios más los necesiten y puede ayudar a aliviar los efectos de una interrupción de S3 en algunos casos de uso.

Pensamientos finales

Los servicios de plataforma gestionada son la piedra angular de los servicios en la nube. El uso de uno como S3 puede reducir los costos de DevOps y ayudar a llevar las aplicaciones al mercado más rápido. Si bien AWS ha sido extremadamente confiable a lo largo de los años, Amazon ha experimentado cortes autoinfligidos en el pasado. La reciente interrupción de S3 no es una excepción. Alguna combinación de replicación entre regiones, copias de seguridad y distribución de contenido debería reducir el impacto de tales interrupciones.