You are here:-, Funcionalidades Clinni, Tutoriales-Mejora radical en la velocidad de Clinni

Mejora radical en la velocidad de Clinni

Ya decía en el post de ayer mismo https://blog.clinni.com/clinni-ya-tiene-telegram/ que hoy explicaría la mejora radical en la velocidad de Clinni que nos trae el uso de Elastic Search. Voy a ello.

Todo viene gracias al aviso de algunos usuarios que nos indicaban ciertos momentos de baja velocidad de respuesta de Clinni. Revisando las gráficas de CPU, conexiones, I/O… vemos que, efectivamente, hay picos puntuales en los que la base de datos tiene más carga y se retrasa en procesar algunas peticiones.

Toca investigar…

Empezamos a monitorizar también los procesos concretos que se van ejecutando en cada momento y descubrimos uno que se repite en gran número de ocasiones y que somete a la base de datos a una alta demanda de recursos… la búsqueda de pacientes.

La búsqueda de pacientes, en concreto, que está en el listado de pacientes. Hay otras pero no generan ni de lejos tanta carga en las bases de datos. Buscamos, entonces, la explicación a que antes fuese bien y ahora no… y es, claro, lo de siempre… crecimiento.

Hay casi millón y medio de pacientes en la base de datos de Clinni y, aunque este número es más que manejable en términos de almacenamiento o consultas optimizadas mediante particiones o índices, las bases de datos relacionales (SQL) no están preparadas para atender búsquedas complejas de tipo texto. Y el listado de pacientes busca el texto introducido en más de 30 campos de texto… y eso sólo para empezar… luego hay 600 líneas de código para atender las distintas casuísticas en función de lo que se rellene en el formulario de búsqueda.

Vale, ya sabemos qué es… pero, ¿cómo lo arreglamos?

Teníamos claro que necesitábamos una mejora radical en la velocidad de Clinni, es decir, no nos valían soluciones a medias sino recursos a largo plazo que resolviesen con holgura las búsquedas de pacientes.

Una vez eliminada esa carga de las bases de datos SQL, todo volvería a ir fluído. Pero, ¿qué sistema es capaz de gestionar búsquedas full text entre millones de registros y, además, hacerlo ágilmente? Fácil: Elastic Search.

Y resulta que AWS (donde todo Clinni está desplegado) tiene su propio servicio administrado de clústeres de Elastic Search. Así que nos pusimos a estudiar la mejor manera de integrar este servicio.

Por poner un poco el contexto de qué es Elastic Search, y sin entrar en demasiado detalle técnico, diré que es un motor de búsquedas que almacena documentos JSON (vamos, una bbdd No-SQL), hecha en Java y que corre sobre Apache Lucene. Nada técnico… xD

Formación y desarrollo…

Aunque ya conocíamos a grandes rasgos qué era y cómo funcionaba, no habíamos trabajado nunca con este sistema. Nos pusimos, por tanto, a refrescar conceptos y a levantar nuestro primer clúster de Elastic Search para pruebas. Después de eso vinieron los mappings, analizers personalizados para el idioma español y, por fin, el plan de actuación concreto para nuestro caso de uso: los pacientes de Clinni.

Determinamos todos los datos de cada paciente que era necesario tener en Elastic Search para realizar las búsquedas y todos los puntos en Clinni que hacen que se actualicen esos datos en la base de datos SQL, para crear eventos de sincronización con Elastic Search.

La soncronización es absolutamente serverless gracias al entorno de AWS, es decir, nunca va a fallar porque no hace uso de máquinas específicas sino que es absolutamente transparente para nosotros y totalmente administrado por AWS. Es carete, eso sí, pero es fantástico y, por dar un dato, hicimos una sincronización de unos 3.000 pacientes en menos de 3 segundos. Una tasa de 1.000 pacientes por segundo nos pareció bastante aceptable, la verdad. Y eso era durante las pruebas de desarrollo.

Ya sólo faltaba migrar… millón y medio de pacientes… lo hicimos escalonado y a horas de baja carga de la base de datos SQL ya que es el origen de la información y no queríamos afectar a los centros trabajando en cada momento.

Mejora radical en la velocidad de Clinni

Con la actualización de hoy recién lanzada, vemos que la base de datos, con una carga basal habitual de entre el 30 y el 40%, y con picos del 90%… no pasa del 20%. A la base de datos SQL le falta hablar y mandarnos un abrazo de agradecimiento con lágrimas en los ojos por el cable que le hemos echado con Elastic Search.

Estaremos muy pendientes de la evolución pero todo apunta a que esta actualización va a ser recordada (al menos nosotros a nivel interno la recordaremos así) como un punto de inflexión en la velocidad de Clinni y en la agilidad de las respuestas de la base de datos.

Además, Elastic Search nos permite integrar más pantallas, búsquedas concretas en distintas partes de Clinni… esto no ha hecho más que empezar 🙂

Estamos deseando escuchar tu opinión, pásate por la comunidad https://community.clinni.com o escríbenos directamente al mail de soporte hola@clinni.com 

¡¡Seguimos!!

About the autor: