Я разработал REST WebAPI, используя модуль Services. Работает нормально. У меня есть клиент этого API с предполагаемым использованием, который требует горизонтального масштабирования моего экземпляра Drupal. Обратите внимание, что из-за характера моего API, требующего значительных ресурсов процессора и графического процессора, я не могу использовать облачные серверы. Кроме того, из-за природы моего API, экземпляры Drupal должны работать в ОС Windows. (Моему приложению требуется программное обеспечение, доступное только на Win64.) У меня сейчас довольно мощный сервер в одном месте, и для этого амбициозного клиента я планирую горизонтальное масштабирование моего оборудования следующим образом:
- Один сервер CentOS с HaProxy в качестве балансировщика нагрузки внешнего интерфейса,
- Два для начала, с дополнительным добавлением по мере необходимости серверов Windows Server 2008 R2, на которых размещается Drupal,
- Один сервер баз данных CentOS, предоставляющий одну базу данных для нескольких экземпляров Drupal,
- Один сервер базы данных CentOS работает в режиме репликации в случае смерти сервера БД 1.
Мои вопросы связаны с тем, как работает балансировщик нагрузки HaProxy. Я предполагаю, что sessionIds, созданные экземплярами Drupal, будут уникальными друг от друга. Рассматривает ли балансировщик нагрузки идентификатор сеанса и направляет все запросы на тот же сервер, который создал этот идентификатор сеанса? Как будет работать связь REST WebAPI, если из-за балансировки нагрузки каждый запрос API направляется на другой сервер? Все ли данные, на которые ссылается WebAPI, должны храниться в базе данных, потому что я не могу гарантировать, что несколько запросов API для одного и того же ресурса будут направлены в один и тот же экземпляр Drupal?