Desarrollé un REST WebAPI usando el módulo Servicios. Funciona bien. Tengo un cliente de esa API con un uso proyectado que requiere escalar horizontalmente mi instancia de Drupal. Tenga en cuenta que debido a la naturaleza de mi API, que requiere recursos importantes de CPU y GPU, no puedo usar servidores en la nube. Además, debido a la naturaleza de mi API, las instancias de Drupal deben ejecutarse en el sistema operativo Windows. (Mi aplicación requiere software solo disponible en Win64.) Ahora tengo un servidor bastante robusto en una ubicación conjunta, y para este ambicioso cliente, estoy planeando escalar horizontalmente mi hardware de la siguiente manera:
- Un servidor CentOS que ejecuta HaProxy como equilibrador de carga frontal,
- Dos para comenzar, con más agregados según sea necesario, los servidores Windows Server 2008 R2 que alojan Drupal,
- Un servidor de base de datos CentOS que proporciona una única base de datos para las múltiples instancias de Drupal,
- Un servidor de base de datos CentOS que se ejecuta en modo de replicación en caso de que muera el servidor DB 1.
Mis preguntas tienen que ver con el funcionamiento del equilibrador de carga HaProxy. Supongo que los Id. De sesión creados por las instancias de Drupal serán únicos entre sí. ¿El balanceador de carga mira el sessionId y enruta todas las solicitudes al mismo servidor que produjo ese sessionId? ¿Cómo funcionaría una comunicación REST WebAPI si el equilibrio de carga causara que cada solicitud de API vaya a un servidor diferente? ¿Todos y cada uno de los datos a los que hace referencia WebAPI deben almacenarse en la base de datos porque no puedo asegurar que varias solicitudes de API para el mismo recurso se enrutarán a la misma instancia de Drupal?