Shopify ha sustituido Redis por MySQL como base del sistema que reserva inventario durante el proceso de pago, un cambio motivado por la necesidad de unificar su infraestructura de datos y mantener garantías ACID entre la reserva temporal y el descuento definitivo cuando el pago se confirma. El problema central que aborda el sistema de protección contra sobreventa es doble: si dos compradores pujan a la vez por la última unidad, el comerciante debe cancelar un pedido y asumir el coste de soporte; si el sistema bloquea unidades disponibles, pierde ventas que debería haber cerrado.
La solución anterior, basada en Redis con operaciones DECR/INCR sobre una clave de cantidad, ofrecía buen rendimiento bajo concurrencia, pero obligaba a mantener dos sistemas separados para reservas y libro mayor de inventario. Eso impedía envolver ambas operaciones en una transacción atómica, abriendo la puerta a sobreventas o ventas perdidas.
El nuevo diseño se apoya en la cláusula SKIP LOCKED de MySQL 8: en lugar de una fila por producto con una columna de cantidad, se usa una fila por unidad vendible, y la reserva selecciona y mueve N filas en una sola transacción. Para evitar tablas inmanejables, se mantiene un pool acotado de 1.000 filas disponibles por combinación de producto y ubicación, que un proceso de reposición rellena desde el libro mayor.
El artículo describe tres decisiones técnicas clave: una clave primaria compuesta para reducir de dos a uno los bloqueos por fila; el nivel de aislamiento READ COMMITTED para evitar bloqueos por hueco durante la reposición; y un orden consistente de adquisición de bloqueos entre reserva y confirmación para eliminar interbloqueos.
