Nota: este artículo ha sido escrito por Vojta Jakubec, de Tecnologías Concur, una empresa de gestión de gastos de viaje que presta servicios de gestión de viajes y gastos a empresas.
En Concur tenemos más de 15 años de experiencia en la creación de software como servicio. Con 93 millones de pasajeros de aerolíneas que reservaron a través de nuestro producto Travel & Expense en el último año, lideramos el mercado de viajes de negocios. Para poner esto en perspectiva, cualquier avión comercial en el mundo tendría en promedio más de 3 pasajeros que reservaron el boleto a través de nuestro software.
Sin embargo, gestionar con éxito un producto SaaS durante más de una década también tiene algunos inconvenientes. Nos encontramos en una situación en la que tuvimos que ampliar la vida útil de nuestra interfaz de usuario mucho más allá de las expectativas originales. Una parte significativa sigue estando en ASP clásico, que era la pila tecnológica de Microsoft antes de que apareciera .NET. Para estar a la altura de las exigencias de nuestros clientes, hemos tomado varias medidas técnicas para modernizar el entorno.
Almacenamiento de datos en caché en ASP clásico
Una de las iniciativas que hemos tomado ha sido introducir el almacenamiento de datos en caché en la capa ASP. Cada llamada entre la interfaz de usuario y la capa intermedia tarda varios milisegundos. El problema es que el motor de renderizado ASP clásico no ofrece ninguna forma de paralelizar estas llamadas, por lo que el tiempo total de ejecución de la página sigue sumando. En algunos casos puede llegar a varios cientos de milisegundos. Por esta razón, necesitamos mantener el tiempo de obtención de datos de nivel medio al mínimo.
Nuestra solución fue alojar una caché de datos en Couchbase. En lugar de realizar una costosa llamada de 30 ms al nivel intermedio, la interfaz de usuario puede obtener los mismos datos en menos de 1 ms de la caché de Couchbase. La llamada al nivel intermedio sólo es necesaria cuando no hay datos en caché.
Para minimizar el tiempo de acceso a los datos, tuvimos que acceder a los datos de Couchbase de forma nativa desde ASP clásico. El enrutamiento a través de una capa de servicio adicional sólo aumentaría la latencia y obstaculizaría nuestros esfuerzos de almacenamiento en caché. Por esta razón creamos un envoltorio COM de código abierto en torno al SDK .NET para Couchbase. Permite a cualquier aplicación capaz de trabajar con objetos COM trabajar de forma nativa con servidores Couchbase.
Despliegue del SDK COM
El escenario de despliegue más sencillo consiste en copiar los archivos del SDK COM de Couchbase en el servidor y registrar las clases COM con el comando Regasm herramienta. Puede obtener los binarios de la última Publicación en GitHub o cree el proyecto usted mismo. La herramienta Regasm forma parte de la instalación de .NET Framework y ya debería estar presente en su servidor.
En este punto el SDK COM de Couchbase debería estar disponible para tus aplicaciones.
Configuración del SDK COM
Mapear las clases de configuración .NET en objetos COM supondría un importante esfuerzo a largo plazo para mantener ambos sincronizados. Por suerte, el SDK de .NET nos dio la opción de utilizar archivos de configuración externos. En la práctica es como trabajar con archivos App.Config o Web.config en cualquier aplicación .NET. Para más detalles, consulte Documentación del SDK de .NET.
Ejemplo de configuración del SDK COM en código ASP:
El ejemplo anterior abrirá un archivo de configuración desde la ruta especificada, buscará la sección de configuración llamada "aspCacheConfigSection" y configurará el SDK .NET subyacente con ella. Se trata de una operación única que puede realizarse en global.asa al iniciar la aplicación.
Optimizar el uso de los recursos
En ASP, los usuarios suelen crear y destruir objetos COM con bastante rapidez. Al separar la vida útil de los objetos SDK .NET subyacentes de sus envoltorios de objetos COM, pudimos optimizar este caso de uso sin afectar negativamente al uso de recursos ni al rendimiento. Todos los objetos COM SDK bucket que representan un bucket de Couchbase utilizan en realidad un objeto .NET SDK bucket singleton subyacente.
Ejemplo de caché ASP sencilla
El siguiente ejemplo asume que ya has configurado el SDK para conectarte a un cluster de Couchbase que tiene un bucket llamado "default" en él.
Siempre empezamos creando una clase factoría, desde la que solicitamos un objeto que nos permita trabajar con un bucket con nombre ("default" en este ejemplo). Usando la operación Get, encontramos y usamos inmediatamente los datos almacenados en caché, o emitimos una petición de nivel medio y almacenamos el resultado en Couchbase. Nótese que la operación Upsert para almacenar datos toma un parámetro adicional especificando la expiración, en este caso 60 segundos.
Conclusión
Con esta sencilla envoltura COM alrededor del SDK .NET de Couchbase, obtenemos toda la potencia que Couchbase puede ofrecer de forma nativa en aplicaciones ASP clásicas. Esto nos permitió escalar fácilmente nuestra interfaz de usuario ASP con sólo unos pocos ajustes de código. La creación del SDK COM también llevó a varias contribuciones para mejorar el SDK .NET y empujar los límites de cómo puede ser usado.