Docker - Как написать собственный балансировщик нагрузки? - PullRequest
0 голосов
/ 11 апреля 2019

Чтобы узнать больше о Docker, я хочу попробовать написать собственный балансировщик нагрузки.Я подумываю о создании сети докеров с использованием драйвера моста по умолчанию и размещении приложения балансировки нагрузки в прокси-контейнере для этой сети.Я буду запускать одну или несколько служб с несколькими репликами, и прокси-сервер будет маршрутизировать трафик к каждому контейнеру с использованием циклического перебора.

Я полагаю, что прокси должен знать обо всех других экземплярах, которые существуют в той же сети, иуслуги, которые они предлагают для балансировки нагрузки.Вот мои идеи сделать это:

  • Для каждого контейнера, работающего в сети, отправьте запрос прокси-серверу, чтобы сообщить о его доступности.Я нахожу это выполнимым, но требует настройки всех контейнеров (для периодической отправки запросов).
  • Сделайте прокси-запрос хостом о состоянии сети: я заметил, что команда docker network inspect также дает подробную информацию о конфигурациях сетикак контейнеры, работающие внутри сети, поэтому я думаю, что я могу также отправить эту информацию в прокси.

Мой вопрос: какой подход предпочтительнее?Возможен ли второй подход?Если да, есть ли какое-либо руководство или документация, которую я должен изучить для этого?У меня есть небольшое представление об операционных системах и работе с сетями, поэтому любая помощь в объединении этих вещей действительно ценится.

1 Ответ

1 голос
/ 11 апреля 2019

Вам также необходимо ознакомиться с условиями Обнаружение служб / Реестр служб и узнать, как их использовать вместе с вашим балансировщиком нагрузки.

От: Обнаружение служб и балансировка нагрузки

Обнаружение службы

Когда мы работаем с микросервисной архитектурой, вполне возможно, что у нас есть несколько служб на нескольких серверах или даже на нескольких серверах данных. Хотя конечный пользователь может не заботиться о местонахождении какой-либо из этих служб, наше приложение очень заинтересовано в деталях подключения для каждой службы. Эта проблема решена с помощью Service Discovery.

1. Что такое служба обнаружения?

Как мы уже упоминали, когда службы распространяются, ими становится трудно управлять. Трудно отследить, где находится каждый сервис и какая информация необходима для подключения к каждому сервису. Обнаружение служб - это именно то, на что это похоже, процесс обнаружения всех наших служб и способы их подключения.

Этот процесс отслеживания нескольких служб решается с использованием Service Registry. Каждая служба регистрируется в Реестре услуг при создании, и Реестр услуг отвечает за обработку и поддержание информации, необходимой для подключения к каждой услуге.

...

Поскольку микросервисы могут время от времени выходить из строя, важно подумать о том, как эта ситуация обрабатывается в Реестре сервисов. Как правило, реестр служб связан со слоем балансировки нагрузки (упоминавшимся в предыдущем разделе), который легко переключается при обнаружении того, что экземпляр больше не существует. Поэтому, если экземпляр службы должен был выйти из строя, реестр служб не смог бы вернуть необходимую информацию, и балансировщик нагрузки включился бы для ее обработки, одновременно кэшируя поиск в реестре служб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...