Skip to content

Авто ​

«Авто» держит соединение на сервере выбранной подписки и переключает его, только если текущий сервер перестал отвечать. Если появился сервер побыстрее, это ещё не повод переключаться: пока текущий отвечает, приложение остаётся на нём.

«Авто» можно включить только в одной подписке за раз. При включении приложение выбирает сервер с лучшим баллом (о нём ниже) и, если VPN подключён, переподключается на него.

Балл сервера ​

Чтобы выбрать сервер, «Авто» ставит каждому балл по его последним замерам. Балл складывается из трёх частей:

  • обычный пинг сервера;
  • насколько сильно пинг скачет от замера к замеру;
  • 1000 за каждый замер, на который сервер не ответил.

Выбирается сервер с наименьшим баллом. Балл не говорит, работает сервер или нет, он задаёт очередь: все серверы подписки выстраиваются по баллу, и «Авто» берёт первый.

Например, у трёх серверов есть по три последних замера:

СерверЗамеры, мсОбычный пингСкачет наНе ответилБалл
Финляндия60, 61, 626120 раз63
Германия20, 25, 300252800 раз305
Нидерланды15, 18, нет ответа1831 раз1021

«Авто» выберет Финляндию. У Германии лучший замер быстрее, но пинг сильно скачет. Нидерланды быстрее всех, но один раз не ответили.

Серверы без пинга встают в очередь после серверов с баллом: сначала те, у кого есть замер скорости (от быстрых к медленным), потом ни разу не проверенные, а в самом конце те, чей последний замер остался без ответа. При равном балле сохраняется порядок из подписки.

Точное определение

У сервера хранятся последние 5 замеров. В балл идут те, что сделаны тем же способом, что и последний (TCP, URL или ICMP), и не старше 24 часов. Пусть r1≤r2≤⋯≤rn – задержки ответивших замеров в миллисекундах, а f – число замеров без ответа. Тогда

S={r~+(rn−r1)+1000⋅f,n≥2rпосл+1000⋅f,n<2

где r~ – медиана («обычный пинг»; при чётном n берётся большая из двух средних), rn−r1 – разброс («скачет на»), а rпосл – результат последнего замера.

Когда начинается проверка ​

Сервер перестал отвечатьФинляндияНидерландыФинляндияФинляндия молчит→ Нидерландыпроверка:Финляндия молчитФинляндия ответила,1 раз из 2ответила снова→ обратно0 мин5 мин10 мин15 мин20 мин25 мин30 минПропала сетьФинляндиянет сетипроверки через 15 с, 30 с, 1 мин, 2 мин…молчат все, соседниеподписки тоже → остаёмсясеть вернулась,всё как было0 мин5 мин10 мин15 мин20 мин25 мин30 мин
Полоса показывает, через какой сервер идёт соединение. Если сервер молчит, а другие отвечают, «Авто» переключается на другой и потом возвращается. Если молчат все, значит, пропала сеть, и «Авто» ничего не трогает.

Пока VPN включён, приложение следит за трафиком. Проверка начинается, если:

  • данные уходят, а в ответ 2 секунды подряд ничего не приходит (на компьютере – 5 секунд);
  • ядро не смогло подключиться к серверу;
  • за 30 секунд ничего не пришло, хотя что-то отправлялось;
  • с прошлой плановой проверки прошло 5 минут и за это время был трафик. Пока устройством не пользуются, «Авто» серверы не трогает.

На Android проверка не начинается, если у телефона сейчас нет ни одной сети.

Как проходит проверка ​

Приложение проверяет текущий сервер и до 9 серверов той же подписки с лучшим баллом – так же, как это делает HTTP-пинг. Плановая проверка смотрит меньше серверов: текущий, сервер для возврата и пару лучших.

  • Текущий ответил – приложение остаётся на нём, даже если кто-то ответил быстрее.
  • Текущий не ответил, а другие ответили – приложение переходит на ответивший сервер с лучшим баллом.
  • Не ответил никто – приложение спрашивает соседние подписки, об этом ниже.

При переходе балл считается так же, только вместо обычного пинга берётся пинг из этой проверки. Поэтому сервер, который сейчас ответил быстро, но весь день скакал, всё равно уступит стабильному.

Точное определение

Пусть L – пинг сервера в этой проверке, A – набор из L и ответивших замеров сервера за 24 часа, а f – число замеров без ответа за то же время:

S′=L+(maxA−minA)+1000⋅f

Если выбранный сервер пропал из подписки после обновления, «Авто» сразу ставит вместо него лучший из оставшихся и переподключается.

Если молчит вся подписка ​

По одной подписке не понять, упали её серверы или пропала сеть. Поэтому приложение спрашивает соседей: по 2 лучших сервера из ближайшей подписки выше и из ближайшей подписки ниже в списке.

Соседи тоже молчат. Значит, пропала сеть. Приложение остаётся на сервере и не записывает эти замеры в историю, иначе после поездки в лифте лучшие серверы целые сутки ходили бы со штрафом. Следующая попытка будет через

Tk=min(15⋅2k−1, 120) с,

где k – номер попытки подряд: 15, 30, 60 секунд, а дальше раз в 2 минуты. На Android смена сети, например с мобильной на Wi-Fi, сразу снимает паузу.

Соседи отвечают. Значит, сеть есть, а упала своя подписка. Следующая проверка захватит её шире, до 30 серверов. Если подписка снова молчит (эта проверка будет не позже чем через 5 минут), «Авто» переходит на лучший сервер соседней подписки.

Возвращение ​

Уходя с сервера, приложение запоминает его. Плановая проверка смотрит и его, и если он ответил два раза подряд, «Авто» на него возвращается.

Пока вы на сервере соседней подписки, своя подписка проверяется раз в минуту. После 5 неудач подряд такие проверки останавливаются на 15 минут, чтобы не мерить серверы всю дорогу в метро.

Ограничения ​

  • Не больше 3 переключений за 3 минуты. Если серверы падают один за другим, приложение не прыгает по кругу, а ждёт.
  • После переключения 5 секунд, а после обычной проверки 15 секунд новая проверка не запускается: само переподключение на пару секунд выглядит как сбой.

Серверы, которые «Авто» не берёт ​

Если зажать кнопку «Авто», можно отметить серверы, на которые «Авто» переходить не будет. На Android TV для этого зажмите OK на пульте, а мышью нажмите правую кнопку.

  • Последний неотмеченный сервер отметить нельзя.
  • Если после обновления в подписке остались только отмеченные серверы, «Авто» выбирает из них.
  • Если отметить сервер, к которому вы сейчас подключены, после «Готово» приложение перейдёт на лучший из остальных.

Отметки сохраняются при обновлении подписки.