¿Cuál es el propósito de la creación de páginas bloqueadas / datos no almacenados en caché?

11

Creo que desde la actualización de Magento 2.3.1 tengo problemas con la carga de páginas sin caché (durante el desarrollo).

Hice un seguimiento de blackfire.io y resulta que pasamos 42 segundos dormidos aquí .

Ahora me pregunto cuál es el propósito de esto. ¿Supongo que estoy corriendo en algún tipo de condición de carrera?

¿Alguien ha experimentado algo como esto antes?

EDITAR: La pila de llamadas parece involucrar commercebug.

Alex
fuente

Respuestas:

8

Bueno, eso es una elección? - Los ingenieros de Magento hicieron.

Esta no es una respuesta, pero parece que esa función acepta una devolución de llamada que está destinada a cargar datos en caché. La devolución de llamada verifica si actualmente hay un bloqueo en su lugar. De lo contrario, establece un bloqueo, carga los datos y luego libera el bloqueo. Si hay un bloque en su lugar, duerme durante 100,000microsegundos (.1 segundos) y luego vuelve a llamar al cargador.

Entonces, pensando en voz alta, mi suposición sería

  1. Tal vez un número de solicitudes más de lo normal para esta función
  2. Tiempos de lectura superiores a lo normal de su caché.
Alan Storm
fuente
7

El mecanismo lockedLoadData necesita disminuir la carga en el servidor.

Anteriormente, cuando la caché de configuración se limpiaba en sitios de alta carga, todos los clientes generaban la misma información que aumenta significativamente la carga de CPU / io.

Con lockedLoadData solo un cliente generará caché y otros lo esperarán.

Más detalles sobre cómo funciona.

La primera función llama a la devolución de llamada "obtener datos" y si obtiene los datos, simplemente devuélvalos (por lo tanto, si los datos están en la caché, el código funciona como antes y no usa ningún bloqueo).

Si los datos no están disponibles y el bloqueo está bloqueado, en el bucle intentamos cargar datos hasta que los datos se bloqueen o se eliminen.

Si no hay bloqueo, creamos un bloqueo y generamos datos para guardarlo en la caché y eliminar el bloqueo y devolver los datos

PD: enviamos estos cambios como un parche para uno de los clientes con una carga de hasta 20kRPM y funciona al menos 3 meses, sin ningún problema. Entonces, tal vez el problema en su personalización / módulos (por ejemplo, si rompieron el mecanismo de caché)

Kandy
fuente
Interesante ... De todos modos, en mi caso se vuelve loco. Estoy depurando esto con Alan, PulseStorm
Alex
que parece ser una solución muy pobre, significa todos los usuarios de espera mantendrá su proceso de vida .. ¿por qué no pueden simplemente utilizar bloqueos de tabla
Ozzie
@OZZIE, ¿prefiere que todos los usuarios generen datos, en lugar de dormir hasta que uno termine? No tenemos recursos de CPU tan libres de matemática
KAndy