Рейтинг:0

Балансировщик нагрузки с липкостью и упорядоченной доставкой при уменьшении масштаба

флаг pk

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

Согласно с их документы:

При сохранении, если сервер выйдет из строя, HAProxy перенаправит пользователя на другой сервер.

Моя проблема с определением «внизу» здесь.Если мы запускаем это в Kubernetes, означает ли «вниз», что модуль больше не отвечает или просто не исправен (как при сбое на зонде живучести), или это означает, что модуль больше не работает и новый был создан вместо него?

Я спрашиваю об этом, потому что пытаюсь выяснить, как лучше всего поддерживать упорядоченную доставку эффективным способом, поэтому рассмотрим этот пример:

  1. HTTP-клиент обращается к балансировщику нагрузки с помощью HTTP-запроса (R1) и не имеет сеанса.
  2. Балансировщик нагрузки использует алгоритм для определения лучшего сервера (S1), отправляет R1 на S1 и добавляет файл cookie, когда получает ответ от сервера (S1).
  3. Следующие запросы имеют файл cookie, поэтому LB уже знает, какой сервер должен получить запрос.
  4. Теперь клиент отправляет другой запрос (R2), но сервер (S1) не отвечает вовремя (но модуль все еще работает и пытается записать этот запрос в Kafka в виде сообщения)
  5. Поскольку клиент не получил ответа вовремя, он собирается повторить попытку R2 еще раз, но LB увидел, что S1 не отвечает, поэтому на этот раз он выберет новый сервер (S2).
  6. Запрос R2 теперь выполняется успешно, потому что S2 был в порядке и денди
  7. Клиент отправляет R3, и это удается, потому что S2 снова в порядке.
  8. Тем временем теперь S1 восстановился и перед завершением успевает записать R2 в Kafka, нарушая порядок сообщений (потому что теперь у нас есть R1, R2, R3, R2)

Отсюда и мои вопросы выше. Есть ли что-нибудь, даже если не HAProxy, что может добиться этого? Возможно, балансировщик нагрузки Kubernetes? Или мне нужно будет написать собственный балансировщик нагрузки, который должен будет отслеживать модули и проверять, не отвечают ли они просто или полностью исчезли?

К вашему сведению, я совершенно согласен пожертвовать доступностью ради согласованности (теорема CAP) и отклонить запрос. Я также стараюсь избегать использования фиксированного количества серверов, поскольку было бы идеально, если бы они увеличивались и уменьшались в зависимости от трафика.Главное было бы НЕ маршрутизировать запрос, если сервер, который ранее обслуживал этого клиента, все еще где-то болтается, чтобы не нарушать порядок сообщений.

Любые идеи будут приветствоваться.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.