Estoy diseñando un sistema multi-tenant y estoy considerando la fragmentación por inquilino en el nivel de la capa de aplicación en lugar de la base de datos.Sharding en el nivel de aplicación
Hipotéticamente, la forma en que esto debería funcionar es que para la solicitud entrante, un proceso de enrutador tiene una colección global de inquilinos que contienen atributos primarios para determinar el inquilino para esta solicitud, así como la identidad del fragmento virtual. Esta identificación de fragmento virtual se correlaciona con un fragmento real.
El fragmento actual contiene tanto el código para la aplicación como los datos completos para este inquilino. Estos fragmentos serían servidores LNMP (Linux, Nginx, MySQL/MongoDB, PHP).
El proceso del enrutador debe actuar como proxy. Debería poder ejecutar algún código para determinar el fragmento de destino para la solicitud entrante en función de la colección almacenada en algunos db o archivos locales. Para poder escalar esto mejor, estoy considerando hacer que los fragmentos también actúen como enrutadores para que puedan ejecutar un proxy inverso que reenvíe la solicitud al fragmento apropiado. Quizás la instancia de nginx que se ejecuta en shard también puede actuar como ese proxy inverso. Pero cómo ejecutará la lógica de la aplicación necesaria para hacer coincidir la solicitud con el fragmento apropiado.
Agradeceré cualquier idea y sugerencia para la implementación de este enrutador.
Gracias
El fragmento de nivel de la aplicación puede ser potencialmente una granja de servidores con un solo MongoDB fragmentado en la parte posterior. Todavía quiero desarrollar la capacidad de separar a los inquilinos para implementaciones controladas a los inquilinos. Sin embargo, estoy de acuerdo con usted acerca de la necesidad de herramientas complejas para poder resistir. – msingla