Consistencia de las operaciones simultáneas
Después de que se devuelve un mensaje de éxito en respuesta a la solicitud de escritura o eliminación de un cliente, el cliente puede obtener los últimos datos. Si un cliente que inicia una solicitud de escritura se agota en espera de una respuesta, o el servidor devuelve el código de estado de respuesta HTTP 500 o 503, las operaciones de lectura posteriores pueden fallar. Si se produce un error de este tipo, consulte si los datos se han cargado correctamente en el servidor. Si no es así, cargue los datos de nuevo.
Si un cliente carga, consulta o elimina simultáneamente el mismo objeto o bucket, estas operaciones pueden llegar al sistema en momentos diferentes y tener diferentes períodos de latencia, por lo que pueden regresar diferentes resultados. Por ejemplo, si varios clientes cargan simultáneamente el mismo objeto, la última solicitud de carga recibida por el sistema reemplazará a la anterior. Si desea evitar que se acceda simultáneamente a un objeto, debe agregar un mecanismo de bloqueo para el objeto en aplicaciones de capa superior.
Ejemplo de operaciones simultáneas
1. Cuando el cliente1 está cargando un objeto V1, el cliente2 está cargando un objeto V2 con el mismo nombre. Después de las cargas satisfactorias, tanto el cliente1 como el cliente2 pueden acceder a los últimos datos de objeto V2, como se muestra en Figura 1.
2. Cuando el cliente2 está cargando un objeto V1 y los metadatos del objeto aún no están escritos, el cliente1 elimina un objeto con el mismo nombre. En este escenario, la operación de carga del cliente2 sigue siendo exitosa, y tanto el cliente1 como el cliente2 pueden acceder al objeto de datos V1, como se muestra en Figura 2.
3. Cuando el cliente2 ha cargado con éxito un objeto V1 y los metadatos del objeto todavía se están escribiendo, el cliente1 elimina un objeto con el mismo nombre. En este escenario, la operación de carga del cliente2 sigue siendo exitosa. Sin embargo, cuando el cliente1 y el cliente2 intentan descargar el objeto, pueden ser capaces de acceder al objeto de datos V1, o puede devolverse un error que indica que el objeto no existe, como se muestra en Figura 3.
4. Cuando client1 está descargando un objeto, client2 elimina un objeto con el mismo nombre. En este escenario, el cliente1 puede haber descargado una copia completa o solo una parte de los datos del objeto. Después de que se devuelve un mensaje de éxito de eliminación al cliente2, un intento de descargar el objeto fallará, y se devolverá un error indicando que el objeto no existe, como se muestra en Figura 4.
5. Cuando el cliente1 está descargando un objeto, el cliente2 está actualizando un objeto con el mismo nombre. En este escenario, el cliente1 puede haber descargado una copia completa o solo una parte de los datos del objeto. Después de que se devuelva un mensaje de actualización exitosa al cliente 2, un intento de descargar el objeto tendrá éxito, y se devolverán los últimos datos, como se muestra en Figura 5.
6. Cuando el cliente2 está cargando la parte V1 de un objeto, el cliente1 está cargando la parte V2 del mismo objeto. Después de cargar con éxito la parte V2, tanto el cliente1 como el cliente2 pueden enumerar la información acerca de la multiparte cuya etiqueta de entidad (ETag) es la parte V2, como se muestra en Figura 6.