Netflix TechBlog | Medium на русском
Подписаться
Исследование межрегиональной проблемы производительности сети
Netflix работает на обширной облачной инфраструктуре Amazon AWS в нескольких регионах, чтобы обеспечивать бесперебойную доставку контента. Когда возникли проблемы с синхронизацией данных между регионами, подозрения сразу же пали на сеть из-за таймаутов.При проведении расследования инженеры сети обнаружили пакеты TCP RST, исходящие от клиента, что указывало на то, что клиент преждевременно заканчивал соединения.Снимки пакетов подтвердили, что сервер постоянно отправлял данные, а клиент внезапно заканчивал соединения через 30 секунд.При изучении приложения выяснилось, что оно имело таймаут в 30 секунд для получения начальных данных от серверов, что приводило к разрыву соединений, если данные не поступали в течение этого времени.Несмотря на отсутствие недавних изменений в приложении или сервере, проблема совпала с обновлением ядра Linux с версии 6.5.13 до 6.6.10.Методичное бисекционное исследование ядра выявило коммит, ответственный за проблему, который ввел новый механизм расчета размера окна TCP-принимающей стороны.Оригинальный расчет предполагал 50% накладных расходов, в то время как новый механизм динамически рассчитывал накладные расходы на основе фактических характеристик данных, что привело к меньшему размеру окна.С меньшим размером окна приложение не могло получать данные достаточно быстро в течение 30-секундного таймаута, что приводило к разрыву соединений.Причиной являлось устаревшее параметр sysctl_tcp_adv_win_scale, который был заменен более точным параметром scaling_ratio для расчета размера окна.Откат ядра до предыдущей версии восстановил нормальную работу приложения, демонстрируя, что изменение ядра было основной причиной проблемы.