EN | ES
Table of Contents |
---|
Info |
---|
Multitenant Support on Platform starts on Release El Soporte Multitenant aparece desde la versión 1.6.0-empire de plataforma. However, it is a functionality in continuous improvement so the use of updated versions is recommended. |
Introduction
Multitenant is a principle of software architecture in which a single instance of the application is capable of serving multiple clients or organizations (tenant or instance).
This model differs from architectures with multiple instances where each organization or client has its own installed instance of the application since in a multitenant architecture the application can virtually partition its data and configuration so that each client has a virtual instance adapted to its requirements.
Multitenant Support in Platform
The Multitenant Platform functionality is supported on 2 concepts:
...
Sin embargo, es una funcionalidad en mejora continua, así que se recomienda el uso de versiones actualizadas. |
Introducción
Multitenant es un principio de arquitectura software en la cual una sola instancia de la aplicación es capaz de servir a múltiples clientes u organizaciones (tenant o instancia).
Este modelo se diferencia de las arquitecturas con múltiples instancias donde cada organización o cliente tiene su propia instancia instalada de la aplicación ya que en una arquitectura multitenant la aplicación puede particionar virtualmente sus datos y su configuración para que cada cliente tenga una instancia virtual adaptada a sus requerimientos.
Puedes encontrar más detalle sobre Multitenant, sus ventajas,… en esta entrada https://onesaitplatform.atlassian.net/wiki/spaces/DOC/pages/edit-v2/2216694314
Soporte Multitenant en Plataforma
La funcionalidad Multitenant en Plataforma se soporta sobre 2 conceptos:
Vertical: representa un producto y proyecto concreto. Supongamos el despliegue de Plataforma sobre una organización que ofrece productos en modo SaaS, en ese caso podríamos tener diferentes verticales desplegados sobre una instancia, por ejemplo Vertical Smart Home, Vertical Waste Management,...…
Tenant: represents a client that the organization serves its products, for example we could offer the Smart Home solution to representa a un cliente a la que la organización sirve sus productos, por ejemplo podríamos ofrecer la solución Smart Home a Carrefour, Leroy Merlin,...
With the support of Onesait Platform with a single platform instance we could serve several verticals and tenants.
The platform capabilities in terms of multi-tenant mode are thus reflected:
Each Vertical has its own ConfigDB, or in other words, each Vertical can create its own platform concepts independently from the rest, that is, its ontologies…
Con el soporte de Onesait Platform con una sola instancia de plataforma podríamos servir a varios verticales y tenants.
Las capacidades de plataforma en cuanto al modo multitenant se reflejan así:
Cada Vertical tiene su propia ConfigDB, o dicho de otra forma, cada Vertical puede crear sus propios conceptos de plataforma de forma independiente al resto, esto es sus ontologías, APIs, DataFlows, microservicesmicroservicios, dashboards,…
Cada Tenant tiene su propia RealTimeDB, de modo que los datos de cada tenant se almacenan de forma independiente y no se mezclan.
Los usuarios son generales a toda la instancia de plataforma y se pueden asociar a vertiales y tenants..
Each tenant has its own RealTimeDB: so each tenant's data is stored independently and not mixed.
Users are general to the whole platform instance and can be associated to vertials and tenants.
As we will see later on, the platform manages all this in a transparent way, abstracting the user from the complexities.
In the following diagram, we can see an example of a case of use of the platform in multitenant mode:
...
Multitenant environment configuration
To use the environment in multitenant mode, simply indicate the environment variable MULTITENANCY_ENABLED as 'true' in the Controlpanel and OAuth Server modules:
Once enabled, there is a global platform user, with PLATFORM_ADMIN role, in charge of creating the verticals.
Basic Operation
Vertical creation
If you enter with the user platform_admin, you will see a screen with the list of platform verticals:
...
To create one, go to create and choose the vertical’s name:
...
You must copy the configuration database schema’s name, then launch the config-init service, with the environment variable CONFIGDB_SCHEMA with that value:
...
Como veremos más adelante la plataforma gestiona todo esto de forma transparente, abstrayendo al usuario de las complejidades.
En el siguiente diagrama, podemos ver un ejemplo de caso de uso de la plataforma en modo multitenant:
...
Consideraciones sobre la instalación
Nueva instalación con versión 1.6.0-Empire o superior
Cuando se realice una instalación nueva, sin datos en la ConfigDB, habrá que indicar la variable de entorno UPDATE_MODE_MULTITENANT a false. Si esta variable no se pone a false, aparecerán mensajes de warning.
Esta variable está pensada para hacer upgrade de entornos que ya tengan datos, para que los datos existentes se migren a la base de datos maestra (usuarios, tokens…).
Actualización a versión 1.6.0-Empire o superior
Si se actualiza un entorno a esta versión, no hará falta especificar nada.
Configuración del entorno multitenant
Para utilizar el entorno en modo multitenant, basta con indicar la variable de entorno MULTITENANCY_ENABLED a 'true' en los módulos Controlpanel e Identity Manager:
Una vez habilitado, existe un usuario de plataforma global con rol PLATFORM_ADMIN encargado de crear los verticales.
Operativa básica
Creación de un vertical
Si entras con el usuario platform_admin, verás una pantalla con el listado de verticales de plataforma:
...
Para crear uno, ve a create y elige el nombre del vertical:
...
Tienes que copiar el nombre del esquema de base de datos de configuración, y lanzar el servicio config-init, con la variable de entorno CONFIGDB_SCHEMA con ese valor:
...
This will load the basic configuration data for the new Con esto se cargará los datos básicos de configuración para el nuevo vertical.
In addition, an administrator user will be created for the vertical, following the format Además, se creará un usuario administrador para el vertical, siguiendo el formato ‘administrator_{vertical}’, iIn this case it will be en este caso administrator_waste , with the default password OpenP2019! and a default client for vertical development, with development format.
With this user, you can create clients or tenants for the vertical, as well as platform users and assign them to a client.
Creating Tenants of a Vertical
With the user-administrator of the vertical, you can create tenants. Go to the menu option ‘Tenant Management’, under the Administration level:
...
To create a new one, select Create and fill in the information:
...
A developer user assigned to the client is created by default. In this case lugo_developer will be created for the tenant smart-lugo of the vertical waste.
...
If you enter each client/tenant, you can see a list of its users:
...
Adding an existing Tenant to another vertical
For this example, the Carrefour client already exists in the Prosumers vertical, so that, if you want it to also be a Waste customer, you will need to re-use the platform_admin user, and go to the Waste vertical, then to the 'Tenants' tab .
...
Here you click ‘Add’ and add Carrefour.
...
Now Carrefour users will be able to access the Prosumers vertical and Waste.
User Creation for a Tenant
To create users and associate them with a tenant, with the administrator of the vertical, the process is the same as always, only this time you will see one more option when creating it: a combo with that vertical’s clients.
Select the one you want to assign and create it:
...
Info |
---|
Bear in mind that a platform user can only be associated with a single client, although, due to this, they can access different verticals. |
Considerations when a Client is associated with several verticals
For this example, as Carrefour is associated with Waste and Prosumers, when you access the platform either through the Control Panel or through Identity Manager OAuth2, you need to specify the vertical to which we want to access.
Info |
---|
If you access with device or API tokens, you don’t need to perform any additional action, as the platform univocally relates these tokens with: vertical, client and user. |
Control Panel
If you enter through the Control Panel, after entering your password you will be assigned a provisional role with authorization only to choose the vertical you want to access - so you will see a screen with a combo to choose the vertical. Select it and log in:
...
As you have noticed in previous captures, when the platform operates in multitenant mode, the vertical in which you are working is always specified in the upper right bar con contraseña por defecto OpenP2019! y un cliente por defecto para desarrollo en el vertical, con formato development.
Con este usuario, se podrán crear clientes o tenants para el vertical, así como usuarios de plataforma y asignarlos a un cliente.
Creación de Tenants de un Vertical
Con el usuario administrador del vertical, puedes crear clientes, desde la opción de menú ‘Tenant Management’, bajo el nivel de Administration:
...
Para crear uno nuevo, dale a create y rellena la información:
...
Se crea un usuario developer asignado al cliente por defecto. En este caso se creará lugo_developer para el tenant smart-lugo del vertical waste.
...
Si entras en cada cliente/tenant, podrás ver un listado de los usuarios del mismo:
...
Añadir un Tenant existente a otro vertical
Para nuestro ejemplo, el tenant Carrefour ya existe en el vertical Prosumers, por lo que si quieres que también sea un tenant de Waste, será necesario volver a hacer uso del usuario platform_admin, dirigirte al vertical Waste e ir a la pestaña ‘Tenants’.
...
Aquí dale a ‘Add’ y añade Carrefour.
...
Ahora los usuarios de Carrefour podrán acceder al vertical Prosumers y al de Waste.
Creación de Usuarios para un Tenant
Para crear usuarios y asociarlos a un tenant, con el administrador del vertical, el proceso es el mismo que siempre, solo que esta vez aparecerá una opción más al crearlo: un combo con los clientes de ese vertical.
Selecciona al que lo quieras asignar y créalo:
...
Info |
---|
Ten en cuenta que un usuario de plataforma sólo puede estar asociado a un Tenant, aunque, por ese motivo, sí puede acceder a varios verticales.. |
Consideraciones cuando un Cliente está asociado a varios verticales
Para nuestro ejemplo, como Carrefour está asociado a Waste y Prosumers, cuando te logas en plataforma (bien a través del Controlpanel o bien a través del Identity Manager), necesitas especificar el vertical al cual quieres acceder.
Info |
---|
Si accedes con tokens de dispositivo o de API, no es necesario realizar ninguna acción adicional, porque la plataforma relaciona de manera unívoca estos tokens con: vertical, cliente y usuario. |
Control Panel
En el caso de que entres a través del Control Panel, después de introducir nuestra contraseña se te asignará un rol provisional con autorización sólo para elegir el vertical al que quieres acceder. Por esto saltará una pantalla con un combo para elegir el vertical. Selecciónalo y lógate:
...
Como habrás notado en capturas anteriores, cuando la plataforma opera en modo multitenant, se indica en todo momento el vertical en el que se está trabajando en la barra superior derecha:
...
Identity Manager OAuth 2.0
For Oauth 2, you need to specify an additional “vertical” parameter, with the name of the vertical you want to access. If you do not specify it and your user is associated with several verticals, you will be given a token with a provisional role that will not have any authorization level to operate withPara autenticar con OAuth2 vía el Identity Manager, será necesario especificar un parámetro adicional “vertical”, con el nombre del vertical al que quieres tener acceso. Si no lo especificas y tu usuario está asociado a varios verticales, se te dará un token con rol provisional, que no tendrá ningún nivel de autorización para operar con él.
...
However, if you add the vertical, it will assign you the right roleSin embargo, si añades el vertical, te asignará el rol correcto:
...
Considerations on installation
...