Upload
yandex
View
128
Download
10
Embed Size (px)
DESCRIPTION
Logbroker: сбор и поставка больших объёмов данных
Citation preview
Logbroker: сбор и поставка больших
объемов данных
Алексей Озерицкий, старший разработчик
Яндекс.Статистика
› Сбор, хранение, обработка информации
› На выходе: статистические расчеты для дальнейшей аналитики и принятия продуктовых решений
4
Система поставки данных
› Более 10 000 источников
› Более 50 Тб сжатых данных в день
› Сотни типов логов со своими форматами
› Необходимо вовремя забрать данные, распарсить, поставить на кластеры для расчета отчетов
› В первой версии качали данные по ssh (pull-поставка данных)
5
Pull-поставка данных
› Статистика имеет доступ к серверам всего Яндекса по ssh – небезопасно
› Не знаем, как обновляются данные на серверах: невозможно обеспечить малое отставание поставки
› Сложная логика обхода серверов
› Следующий этап: push-поставка
6
Push-client
› Легкая минималистичная программа на С
› Поддерживаются Linux, FreeBSD, Windows
› Статистика больше не имеет доступа к серверам
› Push-client умеет отслеживать ротацию файла, автоматически переключаться на новый файл
› Данные отправляются в статистику по http:
1. В качестве приемника выступает самописное решение: Архив
2. Данные сохраняют в виде обычных файлов
3. Резервирование данных по rsync
› Данные отправляются 5-минутными интервалами
7
Новое решение
› Отказоустойчивость
› Масштабируемость
› Секундные задержки поставки данных
› Возможность простого подключения новых потребителей данных
8
Apache Kafka
› Персистентная очередь сообщений
› Высокая пропускная способность
› Отказоустойчивость
› Масштабируемость │ Недостатки:
› At least once семантика доставки сообщений
› ACL, квотирование
› Ограничения на максимальное число потоков
9
Семантика доставки
› At most once
1. Возможны потери данных
› At least once
1. Kafka при проблемах на отправке перепосылает данные: возможны дубликаты
2. Нужно уметь точно определять, что сообщение записалось в Kafka
› Exactly once
1. Ровно одно сообщение будет доставлено: нет дублей и потерь данных
10
Logbroker
› Изолирует от пользователя низкоуровневую структуру Apache Kafka
› Предоставляет HTTP API для записи и чтения
› Exactly once семантика доставки сообщений
› Междатацентровая репликация с exactly once семантикой
› Сервис push поставки с поддержкой YAMR, YT, HTTP
› Поддержка pull
11
Топик
0 1 2 3 4 5 6 7
Старые Новые
Part 1
0 1 2 3 4 5 6 Part 2
0 1 2 3 4 5 Part 3
Запись
Сообщение: • Id • SeqNo • Data
12
Для файлов с логами: Id – идентификатор файла SeqNo – позиция чтения
Репликация внутри ДЦ
0 1 2 3 4 5 6 7
Старые Новые
Replica 1 Leader
0 1 2 3 4 5 Replica 2 Follower
0 1 2 3 4 Replica 3 Follower
Запись/Чтение
6 7
5 6 7
13
Репликация внутри ДЦ (смерть машины)
0 1 2 3 4 5 6 7
Старые Новые
Replica 1 Dead
0 1 2 3 4 5 Replica 2 Leader
0 1 2 3 4 Replica 3 Follower
Запись/Чтение 6 7
5 6 7
14
Репликация внутри ДЦ (включение машины)
6 7
Старые Новые
Replica 1 Out of sync
10 11 12 13 14 15 Replica 2 Leader
10 11 12 13 14 Replica 3 Follower
Запись/Чтение 16 17
15 16 17
Нагоняем отставание
15
Протокол
123 Id: FFAB Seqno: 10
124 Id: 12FA Seqno: 150
125 Id: FFAB SeqNo: 15
Сообщение: • Id • SeqNo • Data
126 Id: FFAB SeqNo: 19
Id: FFAB SeqNo: 21
Part 1
316 Id: 11AB Seqno: 99
317 Id: 11AB Seqno: 100
318 Id: 13FF SeqNo: 51
319 Id: 14FF SeqNo: 78
Part 2
Id: 12FA Seqno: 156
Id: 11AB Seqno: 102
Id: 11AB Seqno: 101
Id: 12FA Seqno: 157
Id: 12FA Seqno: 57
16
Протокол (обработка ошибок)
123 Id: FFAB Seqno: 10
124 Id: 12FA Seqno: 156
125 Id: FFAB SeqNo: 15
126 Id: FFAB SeqNo: 19
122 Id: FFAB Seqno: 5
Id: FFAB SeqNo: 20
123 Id: FFAB Seqno: 10
124 Id: 12FA Seqno: 156
125 Id: FFAB SeqNo: 15
126 Id: FFAB SeqNo: 19
122 Id: FFAB Seqno: 5
127 Id: FFAB SeqNo: 20
123 Id: FFAB Seqno: 10
124 Id: 12FA Seqno: 156
125 Id: FFAB SeqNo: 15
126 Id: FFAB SeqNo: 19
122 Id: FFAB Seqno: 5
Id: FFAB SeqNo: 20
Исход 1
Исход 2
Id: FFAB SeqNo: 20
?
Чтение партиции при создании новой сессии записи 17
Зеркалирование
› Обслуживаем лидеров
› Зеркалируем партицию в партицию
› Гарантируется порядок сообщений в партициях
› Exactly once
Broker 1 part 1
replica 1 part 2,
replica 1
part 3, replica 1
part 4 replica 1
part 5 replica 1
part 6 replica 1
Broker 2 part 1
replica 2 part 2,
replica 2
part 3, replica 2
part 4 replica 2
part 5 replica 2
part 6 replica 2
Broker 3 part 1
replica 3 part 2,
replica 3
part 3, replica 3
part 4 replica 3
part 5 replica 3
part 6 replica 3
Зеркальщики на хостах LB качают данные из ДЦ2
18
Зеркалирование (смена лидеров)
› Автоматическая перебалансировка зеркальщиков при смене лидеров
Broker 1 part 1
replica 1 part 2,
replica 1
part 3, replica 1
part 4 replica 1
part 5 replica 1
part 6 replica 1
Broker 2 part 1
replica 2 part 2,
replica 2
part 3, replica 2
part 4 replica 2
part 5 replica 2
part 6 replica 2
Broker 3 part 1
replica 3 part 2,
replica 3
part 3, replica 3
part 4 replica 3
part 5 replica 3
part 6 replica 3
Зеркальщики на хостах LB качают данные из ДЦ2
19
Зеркалирование (глобальная схема)
› Каждый LB пишет в топики с префиксом своего ДЦ
› Зеркальщик копирует топики с других ДЦ, различая их по префиксам
LB, ДЦ1
DC1.log1 DC1.log2 DC1.log3
DC2.log1 DC2.log2 DC2.log3
SRC1
LB, ДЦ2
DC1.log1 DC1.log2 DC1.log3
DC2.log1 DC2.log2 DC2.log3
SRC2
SRC3
SRC4
SRC5
SRC6
20
Поставка данных (общая схема)
ДЦ1
LB
SRC1
SRC2
SRC3
YT
YAMR
ДЦ2
LB
SRC1
SRC2
SRC3
YT
YAMR
ДЦ3
LB
SRC1 SRC2 SRC3 21
Преимущества схемы
› Экономится дорогой междатацентровый трафик
› Простой клиент
1. Небольшая кодовая база
2. Не надо часто обновлять
› Прозрачно для источников переживаем отключение ДЦ
› Просто добавлять новых потребителей
1. Добавление потребителя не затрагивает конфигурацию многочисленных источников
22
Чтение
› Чтение всех данных в своем ДЦ
› Чтение своих топиков во всех ДЦ
› Чтение одних и тех же топиков в разных ДЦ без дублирования сообщений не поддерживается
LB, ДЦ1
DC1.log1 DC1.log2 DC1.log3
DC2.log1 DC2.log2 DC2.log3
DST, ДЦ1
LB, ДЦ2
DC1.log1 DC1.log2 DC1.log3
DC2.log1 DC2.log2 DC2.log3
DST, ДЦ1, ДЦ2,
…..
23
Технологии
Server-side:
› Apache Kafka 0.8.1.1 (http://kafka.apache.org/)
› Scala 2.10 (http://www.scala-lang.org/)
› Akka 2.3 (http://akka.io/)
› Spray 1.3 (http://spray.io/)
Client-side:
› С
› Libevent 2.0.x (http://libevent.org/)
24
Logbroker в цифрах
› Инсталляция из 60 машин
1. 3 ДЦ по 20 машин
› 60 Тб в день на кластер входящего трафика
› До 180 Тб в день исходящего трафика с кластера │ RT:
› 88% сообщений укладываются в 1 секунду от источника до приемника
› 99% – 15 секунд
25
Планы
› Единая шина поставки данных (не только логов)
› Улучшение показателей RT (88% -> 99%)
› OpenSource:
1. Асинхронная клиентская библиотека для Kafka
2. Клиент для отправки логов (push-client + push-server-lite)
26