Llevamos unos meses trabajando en un producto integrador entre varias soluciones de recursos humanos Cloud y no Cloud. El producto está compuesto por un bloque sobre CPI y otro sobre BTP.
En este bloque de BTP tenemos una mega aplicación multi-target construida en CAP con su parte de persistencia sobre HANA Cloud y su parte UI con múltiples aplicaciones de configuración y monitorización sobre un Launchpad. Parece interesante el proyecto, ¿verdad?
Pero donde quiero llegar es que el despliegue para los clientes se ha pensado en modalidad SaaS Multitenant, que es lo que me gustaría explicar un poco en detalle en esta entrada.
SAP BTP proporciona una funcionalidad de múltiples tenants que permite a los proveedores de aplicaciones poseer, implementar y gestionar aplicaciones con reconocimiento de tenants para múltiples consumidores, con costes reducidos.
Es decir, en una cuenta global el proveedor de la aplicación implementa y despliega la aplicación, y en otras subcuentas los consumidores se pueden suscribir a dicha aplicación. Los consumidores de la aplicación inician las aplicaciones utilizando URLs específicas del consumidor y pueden configurar determinadas funciones de la aplicación.
Respecto a las autorizaciones, nosotros generamos los scopes, roles y role templates necesarios en la aplicación, y será la instancia de XSUAA de la subcuenta proveedora la que hará la gestión de las autorizaciones. Aunque tendremos la asignación de roles independiente en cada una de las cuentas consumidores, donde también se crearán estos roles a la hora de la suscripción.

Con las aplicaciones multitenant, podemos:
- Separar los datos de forma segura para cada tenant.
Tenemos varias formas de hacerlo:
- Discriminando por columnas: los datos se almacenan en el mismo esquema de la misma base de datos y los detalles del tenant se mantienen en una columna de la tabla. Este es el más rentable, pero la separación es muy débil y las configuraciones específicas de tenants son difíciles de implementar. No es posible realizar una copia de seguridad y restauración específicas del tenant.
- Separación en HDI Containers: los datos se almacenan en un esquema separado (la misma base de datos) por tenant. La rentabilidad y la separación de datos están equilibradas. Ha sido la opción elegida en el desarrollo.
- Instancias de base de datos: cada tenant tiene su propia instancia de base de datos. Proporciona el nivel más alto de aislamiento de datos, ya que las instancias están separadas físicamente. Esto implica el mayor costo ya que se necesitan instancias de servidor adicionales para almacenar cada base de datos.

- Ahorrar recursos compartiéndolos entre tenants.
Como hemos explicado anteriormente, nos ha permitido compartir por ejemplo una única instancia de HANA Cloud entre todos los consumidores o también tenemos una única instancia del servicio de Portal en la subcuenta proveedora que compartimos entre todos nuestros clientes.
Como parte del registro de la aplicación en formato SaaS tenemos un par de callbacks de la API que debemos implementar:
- getDependencies: proporciona dependencias para los servicios de reutilización de múltiples tenants, como la instancia de Portal, destinations, etc…
- onSubscription: esto permite que las aplicaciones realicen la configuración del tenant en la aplicación. La implementación depende del enfoque de separación que utilice para su aplicación. En nuestro caso uno de los puntos es la generación de los HDI Containers o las rutas.

- Actualizar las aplicaciones de manera eficiente, en un solo paso.
Cuando tengamos un paquete de actualizaciones sobre la aplicación, lo desplegamos sobre la cuenta proveedora y todos los consumidores recibirán dichos ajustes sin tener que ir consumidor por consumidor aplicando dichas mejoras. Existe la posibilidad de dar permisos a los consumidores para que hagan extensiones de nuestra aplicación.
Con esto yo creo que queda entendido el funcionamiento del modelo SaaS Multitenant, que era lo que pretendía en este post.
Ya sabéis que en mi blog me suelo meter más en la práctica que en la teoría, pero creo que este era un paso necesario antes de meternos en jarana ;-D.
Espero que os sirva, y cualquier duda podéis mandarme un comentario.
Deja una respuesta