Как динамически направлять трафик к определенному экземпляру сервиса

#amazon-web-services #aws-fargate #aws-load-balancer #aws-elb

Вопрос:

У меня есть служба, развернутая на Fargate, которая автоматически масштабируется, и подключенный к Интернету балансировщик нагрузки, направляющий трафик на эту службу.

Служба использует кэш в памяти для получения быстрых ответов, и, следовательно, автоматическое масштабирование запускается, когда мы начинаем испытывать нехватку памяти. Содержимое, которое нам нужно из кэша, зависит от запроса.

Если ситуация запуска с одним запущенным экземпляром сервиса выглядит следующим образом

 _______                              ________________
| ELB |  Request for project A ->    | Service with  |
|_____|  Request for project B ->    |__cache________|
 

и служба автоматически масштабируется до 2 экземпляров, я хотел бы в итоге

 _______                              ______________________________
| ELB |  Request for project A ->    | Instance 1 of Service with |
|_____|                              |__cache_____________________|
                                     ______________________________
         Request for project B ->    | Instance 2 of Service with |
                                     |__cache_____________________|

 

Таким образом, Instance 1 службы могут использовать весь свой кэш в памяти для ресурсов, связанных с проектом A, а Instance 2 службы — кэш в памяти для ресурсов, связанных с проектом B.

Если бы оба экземпляра получали набор запросов для проектов A и B, их кэш был бы слишком мал, и им постоянно приходилось бы выгружать содержимое из кэша и загружать новое содержимое, сводя на нет всю цель, по которой мы в первую очередь запустили автоматическое масштабирование.

Самое близкое, что я нашел, — это использование липких сеансов, но я не думаю, что это решит мою проблему, поскольку первый запрос, который создает файл cookie, может попасть не в ту службу. Также не помогло бы, если бы запросы поступали до автоматического масштабирования сервиса.

Комментарии:

1. Такие вещи обрабатываются несколькими целевыми группами. Поскольку у вас есть два разных сервиса, вам необходимо настроить целевые группы.

2. @Marcin Возможно, из вопроса было неясно, но это тот же сервис. Запущено всего несколько экземпляров (отредактируем и уточним). Ваш совет все еще применим в этом случае?

3. Если это тот же сервис, вы не можете этого сделать. Весь смысл службы ECS заключается в том, чтобы иметь идентичные и взаимозаменяемые задачи. Если вам нужно как-то различать задачи в одном сервисе, у вас должно быть два сервиса.

4. Что сказал Марчин. Теперь это разные сервисы. Не вводите подобное локальное состояние, поскольку вы фактически исключили масштабирование.