Vaya fín de semanita que he tenido, el interfaz de acceso de nuestros agentes, resellers y usuarios, en http://apps.peoplecall.com se ha estado cayendo intermitentemente el Viernes y el Sábado pleno Ramadan, y vaya susto hasta que hemos averiguado porqué.
Resulta que una de las llamadas del API de nuestro software de tarificación para locutorios, el RMS, estaba tardando más de lo normal. Pero esto lo lleva haciendo desde hace mucho tiempo, lo que ha sido realmente nuevo es que muchos locutorios abrian practicamente a la misma hora, despues de la hora del rezo del fín del día.
Estos dos sucesos, añadidos a que este año tenemos más locutorios que nunca :), provocaba que la avalancha de peticiones tirase el servidor, de modo que cuando llegaba a atender una conexión, esta conexión ya estaba en timeout.
Esto ya lo solucionamos el Sábado, con modificaciones de la configuracion del Glassfish, instalando un Proxy delante de los servidores Web ( hemos usado el ngnix ) para poder manejar mejor las conexiones y haciendo que la petición vaya más rápida.
Pero lo realmente curioso es que ha sido la prueba de lo que dice un amigo mío : “Los procesos periodicos tienden a auto-sincronizarse” (Murphy again), el RMS realiza las peticiones periodicamente ( cada n segundos) comenzando en el momento de encender el programa, era de esperar que no coincidiesen ya que el programa no lo encienden todos los locutorios exactamente a la vez.
El caso es que debido a las latencias, reintentos, timeouts, etc. si llegan a autosincronizarse, y una vez sincronizados, permanecen sincronizados, así que estabamos recibiendo en lotes de muchisimas peticiones simultáneas, hay unos cuantos estudios por ahí que lo demuestran y aconsejan que no se ponga en el programa cosas como “realiza la peticion X al servidor cada Y segundos y si falla algo repite cada Z”, sino mas bien que Y y Z sean funciones del tipo:
- Y = t1 + random(t2)
- Z = t3 + ( t4 * n^1.5 )
donde t1, t2, t3 y t4 son tiempos y n es el número de reintentos que llevamos (ver exponential backoff)
Ya veis, por donde uno menos se lo espera, salta el galgo, y en este caso, todos los galgos han saltado a la vez !!!
Publicado por: |