-> Взять один IP address -> обрабатывать входящие коннекты на разных машинах
нужно скейлить также и LB-сервера
Простейшая схема (client - …. router - … backend)
Несколько путей - Equal-Cost-Multi-Path (ECMP) routing:
пускать пакеты по нескольким путям (consistent hash). Пути могут изменяться, но это не важно, до конца дойдут все пакеты
пускать пакеты к разным серверам: BGP (Border Gateway Protocol) анонсируют, что они один и тот же IP, пакеты идут к разным серверам, даже не зная, что это разные машины Сервера изменились - коннекты могут отломиться, т.к. все сервера выглядят одинаково, на роутерах нет state-а
Решение - выделить роль director у load balancer
Директор сохраняет информацию о маршрутах
Проблема: добавление директора - он не знает информацию о маршрутах
Решение: синхронизация маршрутов
GLB:
incoming connection -> hash -> primary and secondary server
packet arrives to primary server and “isn’t valid” (??) -> seconday
hashing сохраняется в lookup table
новый proxy -> для 1/N коннектов становится мастером, слейвом - предыдущий -> старые коннекты продолжат работать
GDB-directory - stateless, основная функция - выбирать primary & secondary proxy
Таблица маршрутизации (65к строк, в каждой primary proxy + secondary proxy) -> 512kb
Таблица одинаковая для всех директоров (?????)
Инварианты:
в каждой строке - один сервер
каждый сервер - примерно в одинаковом числе строк
порядок серверов вычисляется только на основе списка серверов (+seed)
изменяются сервера - строки с другими серверами не изменяются