Selectel / Селектел (системный дизайн)
Входные данные: Сервисы Для сбора статистики по трафику в облаке используется некий collector запущенный на нескольких хостах в каждом регионе. Этот коллектор слушает трафик от Traffic mirror system на порту сервера и агрегирует его считая количество переданных байтов по каждому клиенту.
Задача: На выходе, на каждом хосте где запущен collector, эти данные складываются в файлы. Файлы содержат данные за интервал в 5 минут, каждые 5 минут начинается запись нового файла. Файлы содержат строки вида: go/strings-runes
Заголовок раздела «Задача: На выходе, на каждом хосте где запущен collector, эти данные складываются в файлы. Файлы содержат данные за интервал в 5 минут, каждые 5 минут начинается запись нового файла. Файлы содержат строки вида: go/strings-runes» ClientID Bytes1234 1234Столбец ClientID содержит ID (uint32) клиента уникальный в облаке, а Bytes - количество переданных байт (uint64). При этом в одном файле может быть произвольное количество строк для одного клиента (aka несколько сессий).
Так как количество информации в каждом файле зависит только от количества переданного трафика и количества сессий, файлы могут быть размерами от нескольких мегабайт и до нескольких гигабайт.
Задача: Спроектировать систему которая будет собирать эту информацию из файлов на хостах и представлять конечному пользователю доступ к ней в виде графиков потребления трафика с точностью до часа. architecture/system-design
Заголовок раздела «Задача: Спроектировать систему которая будет собирать эту информацию из файлов на хостах и представлять конечному пользователю доступ к ней в виде графиков потребления трафика с точностью до часа. architecture/system-design»Важные моменты которые надо учитывать при проектировании системы:
- в облаке несколько регионов, и они географически распределенные (задержки между ними больше 50ms);
- конечному пользователю необходимо показывать статистику по его уникальному ID со всех регионов или из одного выбранного (должна быть возможность фильтрации);
- данные для пользователя необходимо хранить только за последние три месяца;
- один или несколько хостов могут быть временно недоступны по причине аварий;
- Кроме конечного клиента эти данные использует биллинг для выставления счетов раз в месяц.