Сетевой вопрос
Oct. 9th, 2016 06:21 pmХэлп нидед ) Разбираюсь с ненормальными задержками в пролезании данных, ситуация описана в одном из недавних постов.
Детали такие:
- есть два клиентских браузера и сервер между ними
- в одном браузере в какой-то документ вносится правка, она сохраняется в локальную базу
- также браузер немедленно пытается отправить правки на сервер, это серия из 2-3 коротких запросов, каждый в пределах килобайта; несколько запросов нужно для согласования дерева ревизий
- если связи нет, браузер повторяет попытку каждые ~20 секунд, аналогично если репликация завершается с ошибкой
- браузер на другом конце отслеживает изменения longpoll-запросом, который обрывается и возобновляется каждую минуту
- этот запрос – подписка на канал изменений в БД, как только в базе что-то поменялось, оно появляется в этом канале
- подписка на канал имеет параметр since, в котором указывается номер обновления, с которого надо начинать слив; так браузер получает обновления “из прошлого” после обрывов
- один клиент соединён через 3G, второй через спутник
- одновременно с браузером работал вайбер, никаких проблем с доставкой сообщений в вайбере не было.
Дополнительно:
- протокол репликации надёжно работает на 14400 (<2kb/s) с latency в 1 секунду и обрывами каждые 30 секунд, в рассматриваемом случае мы имеем лучшие условия
- у меня не воспроизводится проблема ни при каких комбинациях сетевых параметров и нагрузок, худшее, что я смог получить – две минуты задержки
- в логах сервера ничего не видно, на сервере в БД конфликтов нет (то-есть не было таких ситуаций, что два человека пишут в один документ одновременно)
- логи в браузерах клиентов уже затёрты, там log rotate и небольшой объём.
Вообще, нормальная задержка в пролезании – единицы секунд, на хороших сетях – меньше секунды. В нашей ситуации люди иногда видели лаг в часы. Я хз вообще, куда думать.
Тут что-то экзотическое – и скорее всего, сетевое. Может, у кого-то из уважаемых френдов есть догадки?