Балансировка запросов - один из первых элементов, который возникает при переходе к распределённым системам. Есть два варианта, как это можно добавить:

  1. иметь отдельные узлы, которые умеют распределять трафик
    1. примеры софта: HAProxy, nginx, traefik
  2. иметь знание о всех участниках кластера внутри каждого узла
    1. примеры софта: etcd, consul, zookeeper (надо похоронить)

Популярные варианты балансировок:

  • round robin - раскидываем запросы последовательно по всему списку участников
    • плюсы: прямолинейная реализация, поддерживает большинство софта
    • минусы: запросы неравномерные по стоимости, сервера могут быть разные
  • weighted round robin - раскидываем запросы согласно весам
    • плюсы: можно слать больше запросов на жирные сервера
    • минусы: ручной контроль распределения
  • least connection - раскидываем на сервера, с которыми меньше всего соединений активных
    • плюсы: запросы автоматически равномерно распределяются
    • минусы: сложно понять куда что улетит
  • sticky session - одинаковые запросы раскидываются на одни и те же сервера
    • плюсы: можно сделать запросы быстрее
    • минусы: ручной контроль распределения

Что дальше

context:: распределённые системы problem:: масштабирование сервисов

Источники

Как улучшить

  • перечитать sam who, и дополнить варианты