26

Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

  • Upload
    yandex

  • View
    128

  • Download
    10

Embed Size (px)

DESCRIPTION

Logbroker: сбор и поставка больших объёмов данных

Citation preview

Page 1: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий
Page 2: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Logbroker: сбор и поставка больших

объемов данных

Алексей Озерицкий, старший разработчик

Page 3: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Яндекс.Статистика

›  Сбор, хранение, обработка информации

›  На выходе: статистические расчеты для дальнейшей аналитики и принятия продуктовых решений

4

Page 4: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Система поставки данных

›  Более 10 000 источников

›  Более 50 Тб сжатых данных в день

›  Сотни типов логов со своими форматами

›  Необходимо вовремя забрать данные, распарсить, поставить на кластеры для расчета отчетов

›  В первой версии качали данные по ssh (pull-поставка данных)

5

Page 5: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Pull-поставка данных

›  Статистика имеет доступ к серверам всего Яндекса по ssh – небезопасно

›  Не знаем, как обновляются данные на серверах: невозможно обеспечить малое отставание поставки

›  Сложная логика обхода серверов

›  Следующий этап: push-поставка

6

Page 6: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Push-client

›  Легкая минималистичная программа на С

›  Поддерживаются Linux, FreeBSD, Windows

›  Статистика больше не имеет доступа к серверам

›  Push-client умеет отслеживать ротацию файла, автоматически переключаться на новый файл

›  Данные отправляются в статистику по http:

1. В качестве приемника выступает самописное решение: Архив

2. Данные сохраняют в виде обычных файлов

3. Резервирование данных по rsync

›  Данные отправляются 5-минутными интервалами

7

Page 7: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Новое решение

›  Отказоустойчивость

›  Масштабируемость

›  Секундные задержки поставки данных

›  Возможность простого подключения новых потребителей данных

8

Page 8: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Apache Kafka

›  Персистентная очередь сообщений

›  Высокая пропускная способность

›  Отказоустойчивость

›  Масштабируемость │  Недостатки:

›  At least once семантика доставки сообщений

›  ACL, квотирование

›  Ограничения на максимальное число потоков

9

Page 9: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Семантика доставки

›  At most once

1. Возможны потери данных

›  At least once

1. Kafka при проблемах на отправке перепосылает данные: возможны дубликаты

2. Нужно уметь точно определять, что сообщение записалось в Kafka

›  Exactly once

1. Ровно одно сообщение будет доставлено: нет дублей и потерь данных

10

Page 10: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Logbroker

›  Изолирует от пользователя низкоуровневую структуру Apache Kafka

›  Предоставляет HTTP API для записи и чтения

›  Exactly once семантика доставки сообщений

›  Междатацентровая репликация с exactly once семантикой

›  Сервис push поставки с поддержкой YAMR, YT, HTTP

›  Поддержка pull

11

Page 11: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Топик

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 – позиция чтения

Page 12: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Репликация внутри ДЦ

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

Page 13: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Репликация внутри ДЦ (смерть машины)

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

Page 14: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Репликация внутри ДЦ (включение машины)

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

Page 15: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Протокол

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

Page 16: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Протокол (обработка ошибок)

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

Page 17: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Зеркалирование

›  Обслуживаем лидеров

›  Зеркалируем партицию в партицию

›  Гарантируется порядок сообщений в партициях

›  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

Page 18: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Зеркалирование (смена лидеров)

›  Автоматическая перебалансировка зеркальщиков при смене лидеров

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

Page 19: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Зеркалирование (глобальная схема)

›  Каждый 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

Page 20: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Поставка данных (общая схема)

ДЦ1

LB

SRC1

SRC2

SRC3

YT

YAMR

ДЦ2

LB

SRC1

SRC2

SRC3

YT

YAMR

ДЦ3

LB

SRC1 SRC2 SRC3 21

Page 21: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Преимущества схемы

›  Экономится дорогой междатацентровый трафик

›  Простой клиент

1. Небольшая кодовая база

2. Не надо часто обновлять

›  Прозрачно для источников переживаем отключение ДЦ

›  Просто добавлять новых потребителей

1. Добавление потребителя не затрагивает конфигурацию многочисленных источников

22

Page 22: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Чтение

›  Чтение всех данных в своем ДЦ

›  Чтение своих топиков во всех ДЦ

›  Чтение одних и тех же топиков в разных ДЦ без дублирования сообщений не поддерживается

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

Page 23: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Технологии

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

Page 24: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Logbroker в цифрах

›  Инсталляция из 60 машин

1. 3 ДЦ по 20 машин

›  60 Тб в день на кластер входящего трафика

›  До 180 Тб в день исходящего трафика с кластера │  RT:

›  88% сообщений укладываются в 1 секунду от источника до приемника

›  99% – 15 секунд

25

Page 25: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Планы

›  Единая шина поставки данных (не только логов)

›  Улучшение показателей RT (88% -> 99%)

›  OpenSource:

1. Асинхронная клиентская библиотека для Kafka

2. Клиент для отправки логов (push-client + push-server-lite)

26

Page 26: Logbroker: сбор и поставка больших объёмов данных. Алексей Озерицкий

Контакты

[email protected]

Алексей Озерицкий

Старший разработчик