Перейти к содержимому

Selectel / Селектел (системный дизайн)

Входные данные: Сервисы Для сбора статистики по трафику в облаке используется некий collector запущенный на нескольких хостах в каждом регионе. Этот коллектор слушает трафик от Traffic mirror system на порту сервера и агрегирует его считая количество переданных байтов по каждому клиенту.

Задача: На выходе, на каждом хосте где запущен collector, эти данные складываются в файлы. Файлы содержат данные за интервал в 5 минут, каждые 5 минут начинается запись нового файла. Файлы содержат строки вида: go/strings-runes

Заголовок раздела «Задача: На выходе, на каждом хосте где запущен collector, эти данные складываются в файлы. Файлы содержат данные за интервал в 5 минут, каждые 5 минут начинается запись нового файла. Файлы содержат строки вида: go/strings-runes»
ClientID Bytes
1234 1234

Столбец ClientID содержит ID (uint32) клиента уникальный в облаке, а Bytes - количество переданных байт (uint64). При этом в одном файле может быть произвольное количество строк для одного клиента (aka несколько сессий).

Так как количество информации в каждом файле зависит только от количества переданного трафика и количества сессий, файлы могут быть размерами от нескольких мегабайт и до нескольких гигабайт.

Задача: Спроектировать систему которая будет собирать эту информацию из файлов на хостах и представлять конечному пользователю доступ к ней в виде графиков потребления трафика с точностью до часа. architecture/system-design

Заголовок раздела «Задача: Спроектировать систему которая будет собирать эту информацию из файлов на хостах и представлять конечному пользователю доступ к ней в виде графиков потребления трафика с точностью до часа. architecture/system-design»

Важные моменты которые надо учитывать при проектировании системы:

  • в облаке несколько регионов, и они географически распределенные (задержки между ними больше 50ms);
  • конечному пользователю необходимо показывать статистику по его уникальному ID со всех регионов или из одного выбранного (должна быть возможность фильтрации);
  • данные для пользователя необходимо хранить только за последние три месяца;
  • один или несколько хостов могут быть временно недоступны по причине аварий;
  • Кроме конечного клиента эти данные использует биллинг для выставления счетов раз в месяц.