Допустим, у меня есть служба HTTP2, в которой есть список пользователей и цвет волос пользователя, в памяти и в базе данных.
Теперь я хочу увеличить масштаб до нескольких узлов, однако я этого не делаю. хотите, чтобы один и тот же пользователь находился в памяти двух разных серверов - каждый сервер должен обрабатывать этих указанных c пользователей. Это означает, что мне нужно сообщить балансировщику нагрузки, где обрабатывается каждый пользователь. В случае удаления масштаба мне нужно сообщить, что этот пользователь нигде не может быть перенаправлен на любой сервер или по заданному правилу - IE сервер с меньшим объемом используемой памяти.
Any1 узнает, загружен ли ALB балансир это поддерживает? Один путь, который я думал об использовании маршрутизации на основе параметров строки запроса, поэтому я мог сообщить в самом запросе что-то вроде destination_node = (int)user_id % 4
в случае, если у меня было, например, 4 узла - и это сработало хорошо в доказательстве концепции, но это приводит к несколько проблем:
- Самому сервису необходимо знать, сколько экземпляров нужно сбалансировать.
- Я не могу гарантировать даже балансирование, в основном это балансировка на основе удачи.
Какой подход предпочтителен для этого или каков общий способ решения этой проблемы? AWS ELB поддерживает это из коробки? Я пытался избежать написания своего собственного балансировщика, промежуточного программного обеспечения, которое отслеживает, какие сервисы обрабатывают какие пользователи, чья ответственность будет заключаться в распределении запросов между этими серверами.