Bloqueo optimista o pesimista: ¿cuál debe usar una reserva o un pago?
Share

In this article
Use bloqueo pesimista cuando muchos usuarios compiten por la misma fila, como los últimos boletos de un evento. Use bloqueo optimista, con un campo de versión, cuando la contención es rara, como reservas o carritos distribuidos en muchas franjas y productos. Elija según la frecuencia con la que dos escritores realmente acceden a la misma fila.
¿Cuál es la diferencia entre bloqueo optimista y pesimista?
El bloqueo pesimista bloquea a otros escritores mientras una transacción mantiene una fila, por lo que los conflictos esperan. El bloqueo optimista permite que todos procedan, luego rechaza una escritura si un campo de versión cambió debajo, por lo que los conflictos se reintentan. El primero intercambia latencia por certeza; el segundo intercambia reintentos ocasionales por no esperar.
¿Cuándo es mejor el bloqueo optimista?
El bloqueo optimista es mejor cuando las escrituras son cortas y las colisiones son raras. En las franjas de reserva de Trexind, un campo de versión significa que la escritura que pierde la carrera genera un conflicto, no una sobreescritura silenciosa, y se reintenta contra el estado actual de la franja. Mantener un bloqueo durante toda la solicitud costaría más de lo que ahorra.
¿Cuándo es mejor el bloqueo pesimista?
El bloqueo pesimista es mejor en una fila caliente única que muchos compradores quieren al mismo tiempo, como los últimos boletos de un evento popular. Allí, los reintentos optimistas generan mucha actividad y obligan a cada perdedor a rehacer todo el pago. Un bloqueo corto permite que el segundo comprador espere milisegundos y luego vea que se agotaron.
¿Cómo decidir para su propio sistema?
Pregunte con qué frecuencia dos escritores acceden a la misma fila y qué cuesta para el usuario perder una carrera. Colisiones raras y reintentos baratos apuntan a optimista. Colisiones frecuentes en una fila, o reintentos que rehacen trabajo costoso, apuntan a pesimista. Mida la contención antes de decidir; la misma aplicación puede usar ambos.
Muchas filas, pocas colisiones por fila: optimista (stock en cientos de SKU)
Una fila, muchos escritores simultáneos: pesimista (últimos boletos de un evento)
La escritura ocurre una vez por entidad: un bloqueo corto está bien (envío de examen)
Resumen
Últimos boletos de un evento (FindYourVibe) · Alto: un pico en una fila · Bloqueo pesimista de fila · El perdedor espera milisegundos en lugar de reintentar todo el pago
Franjas de citas y mesas (Trexind) · Bajo: escrituras cortas, rara vez disputadas · Campo de versión optimista · Un bloqueo durante toda la solicitud no vale la latencia
Stock en muchos SKU (Skyxis) · Bajo: los carritos rara vez acceden a la misma fila · Campo de versión optimista · Un bloqueo durante la ventana de pago cuesta más que el raro reintento
Envío de intento de examen (PS Classes) · Único por intento · Bloqueo Redis en el ID del intento · Un envío ocurre una vez, así que unos milisegundos de bloqueo son más baratos que un ranking corrupto
Publicado originalmente en sakshamjain.codes/blog/optimistic-vs-pessimistic-locking. ¿Necesita esto implementado? Vea mis servicios en NexoRush o envíeme un mensaje.