Jan 1, 0001
Flightradar
В день совершается 120 тысяч авиаперелётов. примерно 15 тысяч могут находиться одновременно в небе. Каждый из них примерно раз в секунду передаёт блок информации о себе (примерно 1 килобайт).
По всему миру расставлено примерно 20 тысяч приёмников этих сигналов, которые затем передаются в систему, где обрабатываются и показываются пользователям.
Пользователей несколько миллионов в день, некоторые из них следят за конкретным самолётом, но большинство - в целом за картинкой региона.
Во время кризисов количество наблюдающих за самолётом может увеличиваться на порядок.
Требования
Входы
какая информация содержится в этом килобайте данных? Можно ли что-то отрезать?
ничего нельзя обрезать
как устроены приёмники сигналов? Можем ли мы встроить туда что-то своё?
не можем, просто шлют нам информацию
могут расположены близко, сигналы могут дублироваться
среднее / максимальное число самолётов на какую-то единицу площади
хотим выдерживать все 15к
что мы можем хранить локально? Как быстро протухнут такие данные?
расписание
регулярные рейсы
популярные направления
Это можно делать, но не сильно интересно
средняя / максимальная длительность полёта
…
Выходы
должны ли мы хранить и предоставлять доступ к истории?
да, историей пользуются нечасто
средняя площадь, за которой следит пользователь
не так важно
должны ли мы отображать точно геолокация самолета? Достаточно ли время вылета + (ожидаемое) время прилета? (И на карте соединять прямой)
должны точно, с маленькой задержкой
какая допустимая задержка между пингой от самолёта и получением информации пользователем?
5с
какое максимальное количество пользователей может смотреть за одним самолётом / за одним регионом?
10кк
что должен выводить сайт в случае, когда самолёт длительное время не выходит на связь (убираем из рассмотрения/оставляем старое расположение/…)
зависаем
Оценочки
Приём сигнала
- 20к трансмиттеров
- самолётов $\leq$ трансмиттеров. Будем считать, что максимум 20к
- примерно 30% самолётов в густой зоне трансмиттеров, от каждого прилетает не 1, а 4 сигнала.
- $20k \cdot (0.3 \cdot 4 + 0.7 \cdot 1) \approx 40k$ сигналов в секунду
- каждую секунду получаем 40 мб данных
- в час 144 гб
- в день 3.5 тб
Нужна дедубликация
Хранение
- 150к перелётов
- среднее время полёта - 2 часа
- $150к \cdot 60 \cdot 60 \cdot 2 \approx 1TB$
Нужно уменьшать количество хранимых данных
Отдаём пользователям
- 10 млн $\rightarrow$ активных 3 млн
- каждый раз в секунду получает информацию о карте (сколько весит пакет данных?)