Ayer por la mañana tuve la oportinidad de participar en un evento en Microsoft sobre algo que últimamente se oye mucho: Software As a Service (SaaS). Lo primero que os preguntaréis, como me lo he preguntado yo es: ¿qué es eso de SaaS? Una definición bastante completa es la siguiente: SaaS es un modelo de distribución del software que proporciona a los clientes el acceso al mismo a través de la red (generalmente Internet), de manera que les libra del mantenimiento de las aplicaiones, de operaciones técnicas y de soporte. Las aplicaciones distribuidas en la modalidad SaaS pueden llegar a cualquier tipo de empresa sin importar su tamaño o su ubicación geográfica. Se trata de un modelo que une el producto (software) al servicio, para dotar a las empresas de una solución completa que permita optimizar sus costes y sus recursos.
El concepto
La definición anterior está muy bien, pero ¿que implicaciones tiene el modelo SaaS?
- Desaperece el concepto de licencia, se pasa a hablar de pago por uso. De manera que los clientes se "suscriben" al servicio aportado para poder utilizar las aplicaciones ofrecidas en modalidad SaaS.
- El software no se distribuye in-house, sino a través de la red.
- La aplicación está hosteada, de manera que da servicio a muchos clientes.
- El hecho de que la aplicación esté hosteada implica que no se abre de una infraestructura privada, sino de una infraestructura pública que permite que muchas empresas puedan suscribirse al servicio.
- Es un modelo descentralizado de uso de aplicacione software.
- Permite una escalabilidad sin límites.
- ...
Este modelo es una de los elementos estratégicos claves de Microsoft, como lo demuestran algunas cifras que se aportaron durante el evento:
- Más del 25 % de los ISV's están desarrollando una oferta de soluciones en modalidad SaaS.
- Más del 70 % de los ISV's han recibido financiación por parte de Microsoft durante el año 2006 para ofrecer soluciones SaaS.
Hasta aquí todo parece más o menos claro, pero seguro que alguno se preguntará: ¿y SaaS no es lo que ya teníamos con el modelo ASP?La respuesta es que no, ya que:
- ASP sigue un modelo de licencias frente a SaaS dónde se paga por uso.
- ASP es un modelo pensado para ofrecer aplicaciones a unos pocos usuarios. Con SaaS, el servicio se ofrece a tantos usuarios como suscriptores.
- ASP utiliza normalmente una infraestructura privada frente a SaaS que utiliza una infraestructura pública.
Para resumir, en un modelo SaaS:
- El foco es el servicio frente a hablar de tecnología, aplicaciones, etc.
- Los clientes pasan a ser virtuales.
- Hablamos de plataformas de N clientes.
- El cliente sale claramente beneficiado del modelo:
- Menor coste e inversión inicial.
- Menor riesgo.
- Alta escalabilidad asegurada.
- El cliente se centra en el negocio.
- Aumenta la seguridad.
- La respuesta ante los cambios es muy rápida.
Algunos ejemplos
En este artículo de Infoworld, se agrupan las soluciones SaaS en 4 categorías (que dejan fuera soluciones de otro tipo):
- Soluciones de Back Office, que incluyen aplicaciones ERP, de compra, de RRHH, etc.
- Soluciones de mensajería, es decir, de gestión de correos electrónicos, tratamiento de SPAM, protección frente a virus, etc.
- Aplicaciones CRM.
- Soluciones de integración.
¿Y desde el punto de vista tecnológico?
Hasta ahora hemos hablado del concepto de SaaS, las implicaciones asociadas al término, que supone para el desarrollador de software y para el cliente, así como algunos ejemplos de soluciones en modalidad SaaS. Pero, ¿qué implicaciones hay desde el punto de vista tecnológico? ¿qué consideraciones tecnológicas hay que tener en mente cuando pensamos en ofrecer soluciones SaaS?
- Implicaciones tecnológicas para el fabricante de software:
- Es necesario reescribir el código de las aplicaciones para que funcione correctamente en un entorno descentralizado, permite N-Usuarios y N-Empresas,...
- Las aplicaciones tienen que incluir servicios que no existína tradicionalmente: monitorización, facturación, etc.
- Gestión de la escalabilidad y los recuros en la medida en que la infraestructura de hosting puede ser compartida por distintas aplicaciones y un número indeterminado de usuarios.
- Soporte 24x7, hay que asegurar a los clientes que las aplicaciones funcionan correctamente las 24 h y que no se producen anomalías en el servicio ofrecido.
- Hay que elaborar un plan de puesta en marcha de mejoras continuas y nuevas versiones.
- Seguridad en los datos y en las transacciones.
- ...
- ¿Cómo voy hacia SaaS?
- Diseño de la solución:
- Sea escalable.
- Permita N-Usuarios.
- Sea fiable y permita la iteracción de múltiples usuarios.
- No afecte a otras soluciones.
- Integre los nuevos servicios y funcionalidades necesarios en una solución SaaS.
- ...
- Elegir la mejor arquitectura para el servicio a ofrecer:
- Tecnologías a utilizar: Java vs .NET, versión de .NET Framework, tecnología para la GUI, ....
- Número de capas adecuado.
- Sistema Operativo de los servidores.
- Integración con otras aplicaciones (del cliente).
- ...
- Formación ténica adecuada.
- Preparar planes de contingencia para el outsourcing de las soluciones.
- ...
- Dudas tecnológicas:
- ¿Sólo son posibles las aplicaciones web dentro de SaaS? La respuesta es que no, se pueden contemplar escenarios offline y clientes ricos que utilicen las funcionalidades de los servicios hosteados. Esto también aplica al desarrollo de aplicaciones en el entorno de Microsoft Office.
- ¿Me olvido de los dispositivos móviles? Para nada, en las soluciones que implementemos tendremos que contemplar una versión móvil del servicio.
- Una solución SaaS, ¿está aislada o se puede integrar con otras aplicaciones / soluciones? La respuesta es que no es una solución aislada, sino que tiene que incluir los puntos de extensibilidad necesarios para que se pueda integrar con otros entornos.
- Implicaciones en la arquitectura de la solución:
- Requisitos fundamentales:
- Escalable de manera natural, es necesario definir un plan de escalabilidad en nuestra aplicación para estar preparados ante un número de clientes crecientes y que se aseguren los tiempos de respuesta adecuados: mecanismos de caching, compartición de recursos, entrada / salida asíncrona, etc. Hay que tener en mente que en SaaS no vamos a tener una previsión de clientes / usuarios.
- Configurable, se trata de que el usuario de manera intuitiva tenga una cierta experiencia de configuración: llegue a lo que para el es su modelo de aplicación.
- Eficiencia, la solución funcione manera eficiente.
- Seguridad, pues en el modelo SaaS vamos a tener datos de diferentes clientes.
- Arquitectura SOA, se trata de concebir soluciones no aisladas, es decir, que puedan interoperar con otras aplicaciones o servicios: Windows Communication Foundation.
- Permita personalizar y configurar la aplicación a medida de distintos clientes, pero utilizando la misma solución. Idealmente se trataría de compartir infraestructura (servidor IIS, servidor de BD's) y utilizar metadatos para habilitar la personalización y configuración que exige una solución multicliente y multimarca.
- Sea escalable a distintos niveles:
- A nivel de aplicación.
- A nivel de estructura de datos: esquemas de replicación, mantenimientos de referencias al cambiar estructuras de datos, etc.
- Pruebas de Stress de la solución...es fundamental en un modelo SaaS hacer este tipo de pruebas teniendo en cuenta el modelo de aplicaciones hosteadas en el que se basa.
- Capacity planning: tener previstos un plan de incremento de capacidad para prever situaciones incremento de carga.
- Configurabilidad a distintos niveles (y que el usuario puede tocar):
- Esquema de datos, hay que elegir entre las opciones de: tener una BD aislada, compartir la BD pero no las estructuras de datos, o bien compartir todo.
- Procesos (workflows) y reglas de negocio...un ejemplo tipo es el workflow de aporbación que tenemos en WSS 3.0 & MOSS.
- Interfaz de usuario: se adapte a las caracteristicas del usuario. Para cliente web tendríamos las siguientes posibilidades tecnológicas para habilitar este nivel de configuración.
- ASP.NET:Master Pages, Themes, Web Parts.
- Silverlight (XAML).
- Seguridad:
- ¿Qué posibilidades de autenticación tenemos?
- Centralizada (ASP.NET membership, STS: WCF).
- Descentralizada (ADFS y SSO).
- ¿Qué mecanismo de autorización defino...?
- ...
Un ejemplo de arquitectura alto nivel que englobe estas y otros consideraciones es la siguiente:
- ¿Cómo vamos a hacer la monitorización de la aplicación?
- Lo primero es instrumentar que queremos monitorizar: eventos,contadoresderendimiento.
- Luego hay que elegir las herramientas de administración: Powershell, MMC.
- Creando un modelo de salud.
- Establecimiento de métricas y facturación.
- ...
- Y muchas cosas más....
Cómo véis, bajo el concepto de SaaS hay un montón de implicaciones funcionales y técnicas que hay que tener en mente a la hora de pensar en construir una aplicación en esta modalidad. Por supuesto, en este post he comentado algunas de las implicaciones, pero hay muchas más que comprender y entender sobre SaaS. Finalmente, comentaros que desde Microsoft se está creando un ejemplo de aplicación SaaS: LitwareHR (se ha creado también la correspondiente sección en Codeplex). Espero que el post os haya resultado interesante.