En una ocasión para un cliente integré un pasarela de pagos online en México en su plataforma que funcionaba de maravilla. Hasta que llegó un momento donde, por decision de negocio, se optó por cambiar de proveedor y tuve que migrar a otra pasarela y con ello las implementaciones a nivel de la plataforma. Gracias a que había definido un Adaptador y Fábrica, la migración no tuvo mayor complicación. La fábrica generaba las instancias según la interfaz que el adaptador arrojaba y el resto de las implementaciones funcionaban sin afectaciones por la migración. Genial tu video, Manuel. Saludos.
Hola, buen video 👍🏽 Una consulta, tendrás un vídeo o sabrás de una web o vídeo sobre la elaboración de una base de datos multi tenant (para un Saas), es decir de un caso o negocio completo..??? 🤔🤔🤔
Excelente contenido Manuel. Para este tema, deberías haber un video del cómo lidiar en las peticiones REST para un multi tenencia. Qué tengas un excelente día!
Lo que pasa es que todo parte de un modelo de negocio central. A raiz de eso tu dibujas tus modelos principales. Ejemplo si desarrollas un software multitenant para gestión académica, vas a requerir conocer cuales son tus procesos de negocio central, registrar notas, subir tareas, pagar en línea, etc. Al final del día esos procesos serán representados por endpoints. Pero los servicios hacen uso de implementaciones diferentes dependiendo el tenant. Es por eso que se nombran mucho algunos patrones estructurales o comportamiento para estas labores, porque de lo contrario terminarias haciendo un montón de validaciones para ejecutar reglas de negocio por cada inquilino.
Gracias por el video a mi me tocó implementar multitenant con .NET aplicamos IdentityServer y RBAC. Se creó un middleware para gestionar los contextos y con eso se conocía a BD apuntar
excelente muy bien explicado. es justo como lo tengo configurado, agregar además que tuve que crear un sub tenant, es decir un sub cliente o sucursal (distinta region) porque comparten datos
Además describes un problema a los que nos enfrentamos con mucha frecuencia cuando queremos crear un producto que sirva a muchos clientes y hacer la menor cantidad de cambios posibles.
Hola Manuel excelente contenido, te felicito. Tienes algun video en donde demuestres como implementar lo expuesto en el video? Por ejemplo .net core y c# A la espera de tu valiosa respuesta.
He diseñado una aplicación web Multi-tenant, única aplicación con múltiples bases de datos(DB) y los retos fueron los siguientes: 1- Crear la DB por cada tenant registrado en la aplicación. - En este punto tengo una clase que crea al tenant, y usuario de acceso a la DB para finalmente con los datos anteriores ejecuta migraciones del tenant. 2- Para acceder a la DB del tenant, al iniciar sesión se valida información de conexión para ver sus datos. 3- Se dice que actualizar la estructura de DB es complejo y es verdad, pero logre crear una clase que al hacer login se obtienen los datos de conexión hacia la DB del tenant, uso esa información para validar que migraciones están pendientes y ejecutarlas de ser necesario, esto ayuda a no generar updated de la DB de forma masiva sino por demanda cada vez que inicia sesión el tenant o los usuarios pertenecientes al tenant. ¡En cuanto al vídeo muy bien explicado!
Muchas gracias Manuel, seria genial que hablaras un poco para complementar sobre las tecnologías que facilitan este tipo de implementacion, que d hecho existen evitando hacer de cero lo que nos compartes y se adecuan a distintos tipos de lenguajes, gracias de nuevo
gracias por la info, excelente trabajo, siempre pensé que tenant significaba inquilino y por eso sería multi inquilino y no multitenencia pero es bueno aclarar que al español también se puede decir. explicas muy bien, sigue con el excelente trabajo, tienes un subscriptor +
3 ปีที่แล้ว +2
De hecho si va por multi-inquilino, lo que pasa es que con la tropicalizacion del ingles, queda tenencia, pero para no generar controversia, ambas cosas llegan a ser lo mismo para efectos practicos
Yo trabajo en un proyecto para un sistema multitenecia y este video me cae perfecto ya que no conocía todos los conceptos que mensionas, pienso que otro patrón útil puede ser el patrón builder para cuando queremos crear un objeto personalizado que puede tener muchas configuraciones.
Muchas gracias Manuel. Excelentes tus vídeos, son muy claros y explicas muy bien. Te pregunto algo, cómo se podría implementar una arquitectura multitenan con microservicios? Podrías hacer un vídeo explicando un poco esto? . Gracias.
Muy buen video manuel, he estado trabajando en un sistema asi pero un poco desorganizado y no entendia. tu video me ayudo a enteder y aplicar estrategias para mejorar ese sistema o programar uno nuevo aplicando los puntos que mensionaste
Hola Manuel, muchas gracias por compartir este tipo de videos! Quería saber si me puedes compartir por favor más recursos, cursos o información para saber cómo comenzar a implementar esto en una aplicación. Muchas gracias!!
Justo en mi trabajo existe ese problema... El código es spaghetti ... Gracias por el contenido, estudiaré los patrones que mencionas para implementar en mi trabajo
Hola Manuel, excelente aporte sobre todo los patrones de arquitectura y diseño. Tengo una consulta sobre implementacion para acceder a las base de datos por cliente (estoy con la opcion 2 Separada (Isolated)) internamente en mis token tengo un identificador unico por cliente el cual uso para consultar en una tabla tenant sus datos de conexion hacia su base de datos, Este seria los paso, 1) acceso a mi DB princical tabla tenant y obtengo los datos de conexion, 2) cierro esa instancia y creo una nueva para este cliente, 3) conculta a realizar. Estoy usando un ORM, mi pregunta es; lo estoy bien o hay una forma mejor de aplicar esto?
Hola excelente video no lo había encontrado. Estoy desarrollando en PHP y Codeigniter. Este framework es MVC pero en el camino nos perdemos tienes un curso para desarrollo web app.
Con el vídeo ya tienes un buen contexto sobre el tema, Onasis. Profundizar en el tema depende del reto particular que tengas: bases de datos, escalabilidad, reglas de negocio, entre otros.
Se me ocurre que también se podría tener un sistema de BD híbrido en el que haya 1 DB para los datos de NUESTRO negocio (que es dar el servicio), y 1 DB por cliente para los datos de SU negocio. Así incluso podría cada cliente tener sus configuraciones y reglas de negocio en su DB.
Muy buen video. Recomiendas algún libro, sitio o curso para aprender a desarrollar multi-tenencia ? En mi caso estoy desarrollando una aplicación .Net Core 3 + Angular 8 y me interesa saber como pudo implementarlo.
Tocas temas muy buenos e interesantes. Yo siempre he tenido problemas con usuarios roles y permisos cómo modelar la bd y crear la lógica de la app si pudieras hacer un video sobre ello te estaría agradecido.
Te voy a dar una opinión un poquito controversial: yo no programaría el módulo de usuarios y roles. Yo usaría algo que ya está hecho. Tanto frameworks como herramientas como Auth0 hacen eso mil veces mejor de lo que nosotros podríamos. Ahora, si en realidad lo quieres hacer desde cero, te comparto este vídeo de mi colega @hdeleon.net: th-cam.com/video/Xrbl6Xgmi-Q/w-d-xo.html
Hola Manuel, como aporte, para implementar "multitenencia" también hay que considerar temas de seguridad de los datos, personalmente me toco participar en un proyecto donde un requisito era ser "HIPPA compliant", por lo cual cada base de datos de cada cliente, tenia que estar totalmente separada y cumplir ciertos estandares adicionales. Saludos desde La Paz, Bolivia
Manu! Excelente tu video, súper claro! Tengo una duda, esta es la arquitectura que por ejemplo utiliza Shopify? Para poder registrar clientes de manera “automática” ? Gracias !
Mí ejemplo más común es que tuve que desarrollar un sistema para varias sucursales de una empresa..donde tienen mínimo un usuario o PC por sucursal a veces mas
Hola OAntu! No que yo sepa. Los patrones de diseño los usas para problemas puntuales en tu código, no para un sistema completo como tal. Por eso no estoy seguro que exista. Saludos!
Buen video, muy educativo... pregunta, esos patrones de diseño don aplicables a cualquier lenguaje de programación? Por ejemplo, JS? De antemano, muchas gracias!
Hola manuel muchas gracias por tu explicación. Entiendo de que va todo, pero sigo sin saber que me convendria hacer en mi caso. Estoy desarrollando un sistema, el cual voy a vender a varios clientes, por un lado estoy con tecnologia Next JS, y como API PHP, que estoy pensando si usar php puro o laravel como api. El sistema va a ser un sistema administrativo, a nivel de recursos de procesamiento, generar archivos pdf creo seria una de las funcionalidades que demande un poco mas de procesamiento, pero despues no creo que consuma muchos recursos. La DB seria Mysql, ahora... No tengo idea que cantidad de clientes puedo llegar a captar. Si un sistema llega a tener 8000 clientes, sistema sencillo, querys dentro de todo sencillas, y solo generacion de archivos pdf por ejemplo, a que debo apuntar? Y como manejas el almacenamiento (archivos subidos por el cliente) total de informacion? Me da mucha duda el semejante peso que puede llegar a tener una db con todos los datos de los clientes.
Muy buen vídeo amigo, una pequeña consulta: sí presento una aplicación web donde mi lógica de negocio está siendo trabajada en una única API con una única Base de Datos, pero a su vez el API está trabajando con control de versiones en caso de que uno o más cliente requieran nuevas características, ¿entraría en el concepto de Multi-tenencia?
Esa es una excelente pregunta Adrian. La multi-tenencia normalmente está asociada a los datos. Ya a nivel de funcionalidad, puedes explorar patrones de diseño o patrones de arquitectura.
En el caso de una DB por cliente, si tenemos una tabla con información que debe estar disponible para todos los tenants (digamos, una tabla de países). Cuál sería la mejor manera de compartir ese recurso? Tener la tabla en todos los tenants y replicar la información?
Si es una tabla en común con datos que no cambien o que controles directamente tu como negocio, como países o estados por ejemplo es una sola tabla a la que van a consultar todos tus tenant pero sin permitirles borrar o editar. En el caso que los tenant puedan modificar la información entonces tienes que igualmente a tu tabla de países agregarle un tenantid y que cada cliente administre la información. Lo que podrías es cuando creas un tenant le inyectas a esa base de datos unos valores básicos y que luego el cliente los personalice
@@yeanurdaneta736 gracias por tu respuesta. Justamente pensaba en eso, que la tabla países debiese ser una sola tabla que los demás tenants consulten a ella. Pero eso me crea otra duda, que pasa con las claves foráneas? Si voy a insertar un registro en un tenant haciendo referencia al país, no tendría posibilidad de implementar una clave foránea. Existe una manera de mitigar este problema o es un sacrificio que hay que hacer al momento de trabajar con esta arquitectura?
La clave foránea iría contra la tabla de países. Lo único es que tendrías que quitarle que se borre en cascada para evitar eliminar datos sin querer. Pero en teoría no debería hablar problemas con eso. Seria cosa de probar y ver si se adapta a lo que realmente estás buscando hacer.
Hola Manuel, excelentes videos, me han servido mucho, solo una pregunta, en la empresa donde trabajo hay varias plataformas, una desarrollada con laravel, la otra con c# devExpress, otra con angular y la ecommerce que está con Magento, mi pregunta sería, ¿Cual o cómo sería la mejor forma para hacer que entre todas las plataformas y servicios mencionados se usen un solo login, osea centralizar el login mismo usuario y contraseña para todas las plataformas ?
Valla hace un año yo tenía esa misma duda. Con una plataforma multitenant y varios aplicaciones separadas. Quizás a estas alturas sepas la respuesta, pero básicamente necesitas un single sign on, existe soluciones en la nube para eso, no recomiendo implementaciones propias, se puedén cometer varios errores y problemas de vulnerabilidad.
Hola. La estrategia híbrida que propones es confusa, una BD por cliente pero a la vez con un tenanId? Si te entendí bien? si es así.. no tiene mucho sentido. De hecho la estrategia mas optima en mi concepto es el de esquemas, pues funciona con un aislamiento tan alto como tener BD separadas (también te libras de estar filtrando por un tenantId que es peligrosisimo) con el bajo costo y optimización de una columna tenantId en las tablas. El problema que dices de mantener las tablas actualizadas tanto para la estrategia de BD x tenat como Esquema x tenat es el mismo y se resuelve creando un un script muy bien hecho multi thread que sea capaz de ejecutar los cambios en todos los esquemas/bd tan rápido como sea posible, nosotros corremos scripts de actualización de varios cambios DDL en uno o dos minutos afectando 2000 esquemas cada una con 300 tablas aprox (600,000 tablas en total)
Hola David. Interesantisimo el caso que comentas y como han logrado escalar esos scripts de actualización. El esquema híbrido puede ser útil en esos puntos donde hay incertidumbre y no sabes cómo puedan crecer los datos de ciertos tenants. Pero ciertamente trae complejidad adicional. Gracias por tu aporte!
una pregunta estoy empezando con node tengo una pequeña api pero no entiendo como podria conectarme a diferentes base de datos dependiente de cliente como lo hago tendran un curso o alguien podria darme asesoria??
@@ManuelZapata Y como por donde podría configurar eso, es que soy re novato con esto del tenant y mientras creo al cliente por comando y en la Base de datos me lo crea con caracteres cifrados que no entiendo en que ira
12:22 Manuel, esto NO es solo una pésima practica, es "Sacrilegio" estuve trabajando para una empresa en la que se hacia esto para diferentes clientes y el mantenimiento era un infierno. Nunca lo hagan!
Excelente vídeo, muchas gracias! Respecto a la estrategia de repositorio de datos para aplicaciones multitenant, hay una sobre la que he estado investigando últimamente y es el data sharding; el cual permite escalabilidad (horizontal) y data isolation por tenant, según sea implementado. Saludos!
En mi experiencia metiendome con esta arquitectura dañando erp's, yo pienso que el problema no es desarrollarlo si no desplegarlo y escalarlo. Porque la plataforma a final del día escala como un monolito, y eso ya no es bueno para sistemas grandes que siempre deben estar disponibles. Por lo que quizás la mejor solución sea otra, tal vez combinandola con una arquitectura orientada a servicios. Además de que esta arquitectura puede resultar si el sistema es de 0, no en sistemas legados. Ahi lo único que te queda es microserviciar.
Amigo por casualidad no haces vídeos en udemy o platzi o en alguna plataforma ??? de vdd pagaría lo que fuera por un taller avanzado sobres todo lo que acabas de mencionar en este vídeo.
@@ManuelZapata el rendimiento de la aplicación puede verse afectado cada que un usuario crece más que otro. Y respecto al costo me parece que solo en un principio puede verse como un ahorro sin embargo al paso del tiempo y al ir creciendo la BD los costos van a crecer más rápido.
@@MarkTin2000 no es tan así si tienes lo combinas con una arquitectura de microservicios donde escale según la demanda de la aplicación y soportado por un buen proveedor en cloud.
En una ocasión para un cliente integré un pasarela de pagos online en México en su plataforma que funcionaba de maravilla. Hasta que llegó un momento donde, por decision de negocio, se optó por cambiar de proveedor y tuve que migrar a otra pasarela y con ello las implementaciones a nivel de la plataforma. Gracias a que había definido un Adaptador y Fábrica, la migración no tuvo mayor complicación. La fábrica generaba las instancias según la interfaz que el adaptador arrojaba y el resto de las implementaciones funcionaban sin afectaciones por la migración.
Genial tu video, Manuel.
Saludos.
Hola, buen video 👍🏽
Una consulta, tendrás un vídeo o sabrás de una web o vídeo sobre la elaboración de una base de datos multi tenant (para un Saas), es decir de un caso o negocio completo..??? 🤔🤔🤔
tus videos siempre que busco algo son de mucha ayuda. muchas gracias
Gracias por esas palabras!
Excelente contenido Manuel. Para este tema, deberías haber un video del cómo lidiar en las peticiones REST para un multi tenencia. Qué tengas un excelente día!
@Manuel Zapata
Lo que pasa es que todo parte de un modelo de negocio central. A raiz de eso tu dibujas tus modelos principales. Ejemplo si desarrollas un software multitenant para gestión académica, vas a requerir conocer cuales son tus procesos de negocio central, registrar notas, subir tareas, pagar en línea, etc. Al final del día esos procesos serán representados por endpoints. Pero los servicios hacen uso de implementaciones diferentes dependiendo el tenant. Es por eso que se nombran mucho algunos patrones estructurales o comportamiento para estas labores, porque de lo contrario terminarias haciendo un montón de validaciones para ejecutar reglas de negocio por cada inquilino.
El endpoint sigue siendo el mismo, pero dependiendo el tenant se comporta diferente. Fin
Excelente video, gracias por compartirlo!
Gracias por el video a mi me tocó implementar multitenant con .NET aplicamos IdentityServer y RBAC. Se creó un middleware para gestionar los contextos y con eso se conocía a BD apuntar
excelente muy bien explicado. es justo como lo tengo configurado, agregar además que tuve que crear un sub tenant, es decir un sub cliente o sucursal (distinta region) porque comparten datos
🙌
Excelente, este canal debería tener muchos mas suscriptores 😜
De acuerdo contigo, David! Ahí vamos.
Gracias Manuel! Super útil este video!! Claro y conciso además👍
Además describes un problema a los que nos enfrentamos con mucha frecuencia cuando queremos crear un producto que sirva a muchos clientes y hacer la menor cantidad de cambios posibles.
Y además muestras las posibles soluciones.
Gracias por la retroalimentación positiva, Algedi!
Hola Manuel excelente contenido, te felicito.
Tienes algun video en donde demuestres como implementar lo expuesto en el video? Por ejemplo .net core y c#
A la espera de tu valiosa respuesta.
Excelente vídeo
Visto en 08/11/2020
He diseñado una aplicación web Multi-tenant, única aplicación con múltiples bases de datos(DB) y los retos fueron los siguientes:
1- Crear la DB por cada tenant registrado en la aplicación.
- En este punto tengo una clase que crea al tenant, y usuario de acceso a la DB para finalmente con los datos anteriores ejecuta migraciones del tenant.
2- Para acceder a la DB del tenant, al iniciar sesión se valida información de conexión para ver sus datos.
3- Se dice que actualizar la estructura de DB es complejo y es verdad, pero logre crear una clase que al hacer login se obtienen los datos de conexión hacia la DB del tenant, uso esa información para validar que migraciones están pendientes y ejecutarlas de ser necesario, esto ayuda a no generar updated de la DB de forma masiva sino por demanda cada vez que inicia sesión el tenant o los usuarios pertenecientes al tenant.
¡En cuanto al vídeo muy bien explicado!
Interesante!
Excelente, gracias por compartir tus conocimientos, me ayuda mucho a tomar una decisión
De eso se trata. Genial Martin!
Gracias, muy instructivo
Gracias, me ayudas muchísimo
Muy buen video, me gusta este tipo de contenido
Excelente video. Alguien sabe si sería útil el uso de Keycloack para el desarrollo en este tipo de infraestructura?
Muy buen vide, bien claro sencillo de entender y directo al punto
Gracias por el feedback, Oswald!
Excelente video, quiza seria bueno expandir el multitenant por esquemas.
Excelente contenido, gracias por compartir tus conocimientos.
Muchas gracias Manuel, seria genial que hablaras un poco para complementar sobre las tecnologías que facilitan este tipo de implementacion, que d hecho existen evitando hacer de cero lo que nos compartes y se adecuan a distintos tipos de lenguajes, gracias de nuevo
Que crack muchas gracias.
gracias por la info, excelente trabajo, siempre pensé que tenant significaba inquilino y por eso sería multi inquilino y no multitenencia pero es bueno aclarar que al español también se puede decir. explicas muy bien, sigue con el excelente trabajo, tienes un subscriptor +
De hecho si va por multi-inquilino, lo que pasa es que con la tropicalizacion del ingles, queda tenencia, pero para no generar controversia, ambas cosas llegan a ser lo mismo para efectos practicos
Yo trabajo en un proyecto para un sistema multitenecia y este video me cae perfecto ya que no conocía todos los conceptos que mensionas, pienso que otro patrón útil puede ser el patrón builder para cuando queremos crear un objeto personalizado que puede tener muchas configuraciones.
Tienes mucha razón @Try Catch. El builder también puede ser muy útil.
gracias
Muchas gracias Manuel. Excelentes tus vídeos, son muy claros y explicas muy bien. Te pregunto algo, cómo se podría implementar una arquitectura multitenan con microservicios? Podrías hacer un vídeo explicando un poco esto? . Gracias.
Sería muy similar a como si la aplicación fuera monolítica. Saludos Ricardo!
Excelente video, tengo en mente un proyecto que voy a necesitar soportar multiples clientes
Genial!
Muy buen video manuel, he estado trabajando en un sistema asi pero un poco desorganizado y no entendia. tu video me ayudo a enteder y aplicar estrategias para mejorar ese sistema o programar uno nuevo aplicando los puntos que mensionaste
Que bacano eso que me comentas. Saludos Daniel!
Hola Manuel, muchas gracias por compartir este tipo de videos!
Quería saber si me puedes compartir por favor más recursos, cursos o información para saber cómo comenzar a implementar esto en una aplicación. Muchas gracias!!
Muy buen video, exitos
Muy buena la explicación, gracias!!
Con gusto Juan Carlos!
Excelente video... Tienes un video de. Como. Hacer el multi tenancy en core 3.1
Hola Bryant, no lo tengo. Pero con las explicaciones acerca de como modelar las tablas y la BD, debería ser un proceso sencillo.
Justo en mi trabajo existe ese problema... El código es spaghetti ... Gracias por el contenido, estudiaré los patrones que mencionas para implementar en mi trabajo
Excelente Jaime! Cualquier duda, por aquí a la orden.
Haz un project multitenant partiendo de esta teoria seia genial aprender de ti la forma en como nos brindas enseñansas
El más claro 👏🏻👏🏻
Gracias, Julián!
Tendras un curso de la 2 opcion?
Hola, excelente video, quisiera saber que tan buena o mala seria la multitenencia en un patrón de microservicios??
Hola Manuel, excelente aporte sobre todo los patrones de arquitectura y diseño.
Tengo una consulta sobre implementacion para acceder a las base de datos por cliente (estoy con la opcion 2 Separada (Isolated)) internamente en mis token tengo un identificador unico por cliente el cual uso para consultar en una tabla tenant sus datos de conexion hacia su base de datos,
Este seria los paso, 1) acceso a mi DB princical tabla tenant y obtengo los datos de conexion, 2) cierro esa instancia y creo una nueva para este cliente, 3) conculta a realizar.
Estoy usando un ORM, mi pregunta es; lo estoy bien o hay una forma mejor de aplicar esto?
Hola excelente video no lo había encontrado. Estoy desarrollando en PHP y Codeigniter. Este framework es MVC pero en el camino nos perdemos tienes un curso para desarrollo web app.
Excelente contenido!
🙌
Excelente video Manuel.
Gracias Flávio! 💪
Gracias excelente video
Gracias Paul 🙌
Excelente!!! ...gracias por el aporte
Con todo gusto!
Gracias excelente contenido, vengo por recomendacion de yesi days
Bienvenido Armando! Gracias por compartirme el dato de que Yesi te sugirió el contenido.
Hola Manuel , en realidad no tengo experiencia sobre este tema , tendrias links donde podria informarme mas. Gracias buen contenido
Con el vídeo ya tienes un buen contexto sobre el tema, Onasis. Profundizar en el tema depende del reto particular que tengas: bases de datos, escalabilidad, reglas de negocio, entre otros.
Excelente video, tengo una duda sobre llevarlo a practica... por ejemplo, ¿que tipo de dato debería de ser un campo *tenant_id* ?
Hola. Nosotros en nuestros desarrollos multitenant usamos Guid para los caso de tenantid.
Se me ocurre que también se podría tener un sistema de BD híbrido en el que haya 1 DB para los datos de NUESTRO negocio (que es dar el servicio), y 1 DB por cliente para los datos de SU negocio. Así incluso podría cada cliente tener sus configuraciones y reglas de negocio en su DB.
Gracias por el video, me suscribo si me ayudas a las dudas que tenga
Bienvenido a la comunidad!
Muy buen video. Recomiendas algún libro, sitio o curso para aprender a desarrollar multi-tenencia ? En mi caso estoy desarrollando una aplicación .Net Core 3 + Angular 8 y me interesa saber como pudo implementarlo.
Me encanta! En donde has aprendido todo esto que sabes?
🙌 En muchos lugares, Keiny. Estudiando y en la práctica. Saludos!
Tocas temas muy buenos e interesantes. Yo siempre he tenido problemas con usuarios roles y permisos cómo modelar la bd y crear la lógica de la app si pudieras hacer un video sobre ello te estaría agradecido.
Te voy a dar una opinión un poquito controversial: yo no programaría el módulo de usuarios y roles. Yo usaría algo que ya está hecho. Tanto frameworks como herramientas como Auth0 hacen eso mil veces mejor de lo que nosotros podríamos.
Ahora, si en realidad lo quieres hacer desde cero, te comparto este vídeo de mi colega @hdeleon.net: th-cam.com/video/Xrbl6Xgmi-Q/w-d-xo.html
Debo crear un capa Domain y Application por cada cliente?
Hola Manuel .. tienes algún curso de tenancy..saludos
Hola! No, no tengo curso sobre el tema.
Hola Manuel, como aporte, para implementar "multitenencia" también hay que considerar temas de seguridad de los datos, personalmente me toco participar en un proyecto donde un requisito era ser "HIPPA compliant", por lo cual cada base de datos de cada cliente, tenia que estar totalmente separada y cumplir ciertos estandares adicionales. Saludos desde La Paz, Bolivia
Excelente aporte. Gracias!
Manu! Excelente tu video, súper claro! Tengo una duda, esta es la arquitectura que por ejemplo utiliza Shopify? Para poder registrar clientes de manera “automática” ? Gracias !
Excelente pregunta, Damian! No conozco los detalles de cómo esté implementada esa parte de Shopify, pero seguro por ahí va la cosa.
Mí ejemplo más común es que tuve que desarrollar un sistema para varias sucursales de una empresa..donde tienen mínimo un usuario o PC por sucursal a veces mas
Manuel, ¿existe algun tipo de documentación que se pueda consultar sobre patrones de diseño dependiendo del tipo aplicaciones que queremos crear?
Hola OAntu! No que yo sepa. Los patrones de diseño los usas para problemas puntuales en tu código, no para un sistema completo como tal. Por eso no estoy seguro que exista. Saludos!
Buen video, muy educativo... pregunta, esos patrones de diseño don aplicables a cualquier lenguaje de programación? Por ejemplo, JS? De antemano, muchas gracias!
En cualquier lenguaje orientado a objetos los puedes implementar. Saludos!
@@ManuelZapata Muchas gracias!
Te agradeceria mucho si pudieras recomendarme un libro que implemente o oriente sobre esta arquitectura.
A quien he visto compartir más información sobre multi-tenencia es Salesforce. Más allá de eso, no tengo un libro recomendado.
Hola manuel muchas gracias por tu explicación. Entiendo de que va todo, pero sigo sin saber que me convendria hacer en mi caso. Estoy desarrollando un sistema, el cual voy a vender a varios clientes, por un lado estoy con tecnologia Next JS, y como API PHP, que estoy pensando si usar php puro o laravel como api. El sistema va a ser un sistema administrativo, a nivel de recursos de procesamiento, generar archivos pdf creo seria una de las funcionalidades que demande un poco mas de procesamiento, pero despues no creo que consuma muchos recursos. La DB seria Mysql, ahora... No tengo idea que cantidad de clientes puedo llegar a captar. Si un sistema llega a tener 8000 clientes, sistema sencillo, querys dentro de todo sencillas, y solo generacion de archivos pdf por ejemplo, a que debo apuntar? Y como manejas el almacenamiento (archivos subidos por el cliente) total de informacion? Me da mucha duda el semejante peso que puede llegar a tener una db con todos los datos de los clientes.
Muy buen vídeo amigo, una pequeña consulta: sí presento una aplicación web donde mi lógica de negocio está siendo trabajada en una única API con una única Base de Datos, pero a su vez el API está trabajando con control de versiones en caso de que uno o más cliente requieran nuevas características, ¿entraría en el concepto de Multi-tenencia?
Esa es una excelente pregunta Adrian. La multi-tenencia normalmente está asociada a los datos. Ya a nivel de funcionalidad, puedes explorar patrones de diseño o patrones de arquitectura.
En el caso de una DB por cliente, si tenemos una tabla con información que debe estar disponible para todos los tenants (digamos, una tabla de países). Cuál sería la mejor manera de compartir ese recurso? Tener la tabla en todos los tenants y replicar la información?
Si es una tabla en común con datos que no cambien o que controles directamente tu como negocio, como países o estados por ejemplo es una sola tabla a la que van a consultar todos tus tenant pero sin permitirles borrar o editar. En el caso que los tenant puedan modificar la información entonces tienes que igualmente a tu tabla de países agregarle un tenantid y que cada cliente administre la información. Lo que podrías es cuando creas un tenant le inyectas a esa base de datos unos valores básicos y que luego el cliente los personalice
@@yeanurdaneta736 gracias por tu respuesta. Justamente pensaba en eso, que la tabla países debiese ser una sola tabla que los demás tenants consulten a ella. Pero eso me crea otra duda, que pasa con las claves foráneas? Si voy a insertar un registro en un tenant haciendo referencia al país, no tendría posibilidad de implementar una clave foránea.
Existe una manera de mitigar este problema o es un sacrificio que hay que hacer al momento de trabajar con esta arquitectura?
La clave foránea iría contra la tabla de países. Lo único es que tendrías que quitarle que se borre en cascada para evitar eliminar datos sin querer. Pero en teoría no debería hablar problemas con eso. Seria cosa de probar y ver si se adapta a lo que realmente estás buscando hacer.
Ahora, como puedo aplicar la opción número 2 ?
Hola Manuel, excelentes videos, me han servido mucho, solo una pregunta, en la empresa donde trabajo hay varias plataformas, una desarrollada con laravel, la otra con c# devExpress, otra con angular y la ecommerce que está con Magento, mi pregunta sería, ¿Cual o cómo sería la mejor forma para hacer que entre todas las plataformas y servicios mencionados se usen un solo login, osea centralizar el login mismo usuario y contraseña para todas las plataformas ?
Valla hace un año yo tenía esa misma duda. Con una plataforma multitenant y varios aplicaciones separadas. Quizás a estas alturas sepas la respuesta, pero básicamente necesitas un single sign on, existe soluciones en la nube para eso, no recomiendo implementaciones propias, se puedén cometer varios errores y problemas de vulnerabilidad.
Hola. La estrategia híbrida que propones es confusa, una BD por cliente pero a la vez con un tenanId? Si te entendí bien? si es así.. no tiene mucho sentido. De hecho la estrategia mas optima en mi concepto es el de esquemas, pues funciona con un aislamiento tan alto como tener BD separadas (también te libras de estar filtrando por un tenantId que es peligrosisimo) con el bajo costo y optimización de una columna tenantId en las tablas. El problema que dices de mantener las tablas actualizadas tanto para la estrategia de BD x tenat como Esquema x tenat es el mismo y se resuelve creando un un script muy bien hecho multi thread que sea capaz de ejecutar los cambios en todos los esquemas/bd tan rápido como sea posible, nosotros corremos scripts de actualización de varios cambios DDL en uno o dos minutos afectando 2000 esquemas cada una con 300 tablas aprox (600,000 tablas en total)
Hola David. Interesantisimo el caso que comentas y como han logrado escalar esos scripts de actualización.
El esquema híbrido puede ser útil en esos puntos donde hay incertidumbre y no sabes cómo puedan crecer los datos de ciertos tenants. Pero ciertamente trae complejidad adicional.
Gracias por tu aporte!
una pregunta estoy empezando con node tengo una pequeña api pero no entiendo como podria conectarme a diferentes base de datos dependiente de cliente como lo hago tendran un curso o alguien podria darme asesoria??
Hola pregunta, es posible darle un prefijo a los clientes por ejemplo 1-egahuxhuah; 2-jhshjhlas etc
Por supuesto. Tu tienes la libertad de identificar los clientes como consideres más apropiado.
@@ManuelZapata Y como por donde podría configurar eso, es que soy re novato con esto del tenant y mientras creo al cliente por comando y en la Base de datos me lo crea con caracteres cifrados que no entiendo en que ira
12:22 Manuel, esto NO es solo una pésima practica, es "Sacrilegio"
estuve trabajando para una empresa en la que se hacia esto para diferentes clientes y el mantenimiento era un infierno.
Nunca lo hagan!
Excelente vídeo, muchas gracias!
Respecto a la estrategia de repositorio de datos para aplicaciones multitenant, hay una sobre la que he estado investigando últimamente y es el data sharding; el cual permite escalabilidad (horizontal) y data isolation por tenant, según sea implementado.
Saludos!
Gracias por tu aporte Jorge. El sharding es muy potente!
En mi experiencia metiendome con esta arquitectura dañando erp's, yo pienso que el problema no es desarrollarlo si no desplegarlo y escalarlo. Porque la plataforma a final del día escala como un monolito, y eso ya no es bueno para sistemas grandes que siempre deben estar disponibles. Por lo que quizás la mejor solución sea otra, tal vez combinandola con una arquitectura orientada a servicios. Además de que esta arquitectura puede resultar si el sistema es de 0, no en sistemas legados. Ahi lo único que te queda es microserviciar.
Amigo por casualidad no haces vídeos en udemy o platzi o en alguna plataforma ??? de vdd pagaría lo que fuera por un taller avanzado sobres todo lo que acabas de mencionar en este vídeo.
Gracias Guss! Motivan tus palabras!
Harías un video sobre escalar aplicaciones web y usuarios concurrentes
Pues mira que justo andaba pensando en hacer un live sobre el tema 🤔
❤
Nunca había escuchado la palabra multi tenencia..pero sería multiusuario o concurrencia..
Esti tipo de aplicaciones es buena pero pienso que tiene mas contras que pros.
Cuáles son las desventajas más grandes que le ves, @Majestic Gold?
@@ManuelZapata el rendimiento de la aplicación puede verse afectado cada que un usuario crece más que otro. Y respecto al costo me parece que solo en un principio puede verse como un ahorro sin embargo al paso del tiempo y al ir creciendo la BD los costos van a crecer más rápido.
@@MarkTin2000 no es tan así si tienes lo combinas con una arquitectura de microservicios donde escale según la demanda de la aplicación y soportado por un buen proveedor en cloud.
Tenant es inquilino no tenedor.
Inquilino suena mucho mejor. Gracias por la corrección.
Multi-tenencia??? 🤔 creo que ese nombre fue inventado por este canal jajajaja
jejeje ya quisiera yo atribuirme el nombre.
@@ManuelZapata jajajaja se que no, sólo lo dije en broma
Tienes buen contenido, pero tienes que dejar de decir LISTO cada 10 segundos
Gracias por el comentario. Ya me lo habian hecho notar. Estoy trabajando en corregir la muletilla. No siempre es fácil.
@@ManuelZapata perfecto Manuel, sigue adelante con el canal ya que hay muy poco contenido de arquitectura de software