HTTP-клиент Spring Boot для нескольких серверов БЕЗ балансировщика нагрузки - PullRequest
0 голосов
/ 06 августа 2020

Я запускаю службы Spring Boot в AWS ECS с помощью CloudMap. Использование Java 11 и Spring Boot 2.2.1.RELEASE

S(1) и S(2) являются точными копиями службы, интенсивно использующей ЦП, а C вызывает их как часть обслуживания нескольких параллельных запросов. C не привязан к ресурсам, поэтому я не хочу создавать больше его экземпляров. Вызовы выполняются HTTP / REST с использованием com.konghq:unirest-java:jar:3.6.00, который, в свою очередь, использует httpcomponents:httpclient:jar:4.5.11

Вот небольшая диаграмма:

Multiple Parallel Requests ---->  C (10.1.12.25) ---------> S(1) (10.1.178.143)
                                                     \
                                                      \---> S(2) (10.1.118.82)

Использование Cloudmap в качестве каталога служб, когда I dig <service-name>, он возвращает оба IP-адреса в ответе.

;; ANSWER SECTION:
<service-name>. 60  IN  A   10.1.178.143
<service-name>. 60  IN  A   10.1.118.82

Поскольку C - это только один экземпляр, S (1) получает 100% запросов от C. Это заставляет меня думать, что C каким-то образом использует только один из IP-адресов, зарегистрированных как.

Можно ли заставить C использовать ОБЕИХ IP-адреса для вызова <service-name> без использования балансировщика нагрузки? Может быть, настроить что-то в Unirest и / или HttpClient?

Заранее спасибо.

PS: Это мой первый вопрос, так что будьте любезны, если не правильный тег, et c. ; -)

1 Ответ

0 голосов
/ 06 августа 2020

Вы можете использовать Route53 с этим IP-адресом и выбрать политику циклического перебора. Однако, если запросы выполняются параллельно, и вы не хотите перегружать какой-либо конкретный c экземпляр, балансировщик нагрузки необходим в долгосрочной перспективе.

...