Meta представила ZGateway: прокси для ZippyDB, обрабатывающий миллиард операций в секунду
Прямой доступ к ZippyDB — самой массовой key-value БД Meta — порождал хаос: каждый клиент тянул десятки тысяч TLS-соединений к сотням тысяч хостов. Итог — перегрузка памяти и CPU, падения из-за исчерпания файловых дескрипторов и OOM, а одна ошибка маршрутизации привела к бесконечной перезагрузке всего флота. Править клиентскую сторону было нереально — её поддерживают сотни команд.
ZGateway — stateless-прокси, работающий как региональный уровень поверх ServiceRouter. Он принимает запросы от клиентов по постоянному соединению, завершает TLS, проверяет ACL, применяет квоты, определяет нужный шард, батчит запросы и перенаправляет их на реплики. Прокси бывает двух видов: чистый прокси и read-through cache. Движок — тот же толстый C++ клиент ZippyDB, но запущенный как управляемый сервис. Сейчас ZGateway обрабатывает около 40% трафика ZippyDB (более 1 млрд операций в секунду) с накладными расходами ~6% CPU, и доля должна вырасти до 60%.
Моделирование показало: при 20 регионах, 500 тыс. хостов БД, 30 тыс. прокси-хостов, 1 млн клиентов и 50 тыс. шардов на клиент число соединений на хост падает на 97–98%, а общее количество постоянных соединений — примерно в 19 раз. Главный выигрыш — масштабирование: прямое подключение линейно растёт с числом клиентов, а через ZGateway — зависит только от регионов и плотности шардов.
Помимо базовой маршрутизации, ZGateway получил безопасное переключение трафика по процентам и регионам, Discriminant Load Shedding (DLS) — при перегрузке страдает только виновник, а остальные выполняют 99,9% запросов без отказов. Также реализованы read-кэширование с CDC-обновлениями, балансировка нагрузки между хостами разной мощности, кросс-региональная отказоустойчивость и поддержка транзакций, перенесённая в прокси.