Балансировка запросов - один из первых элементов, который возникает при переходе к распределённым системам. Есть два варианта, как это можно добавить:
- иметь отдельные узлы, которые умеют распределять трафик
- примеры софта: HAProxy, nginx, traefik
- иметь знание о всех участниках кластера внутри каждого узла
- примеры софта: etcd, consul, zookeeper (надо похоронить)
Популярные варианты балансировок:
- round robin - раскидываем запросы последовательно по всему списку участников
- плюсы: прямолинейная реализация, поддерживает большинство софта
- минусы: запросы неравномерные по стоимости, сервера могут быть разные
- weighted round robin - раскидываем запросы согласно весам
- плюсы: можно слать больше запросов на жирные сервера
- минусы: ручной контроль распределения
- least connection - раскидываем на сервера, с которыми меньше всего соединений активных
- плюсы: запросы автоматически равномерно распределяются
- минусы: сложно понять куда что улетит
- sticky session - одинаковые запросы раскидываются на одни и те же сервера
- плюсы: можно сделать запросы быстрее
- минусы: ручной контроль распределения
Что дальше
context:: распределённые системы problem:: масштабирование сервисов
Источники
Как улучшить
- перечитать sam who, и дополнить варианты