Концепция хранения

Для начала в главе описывается основная абстракция, которую ADS обеспечивает для потока записей – топик.

Топики – это категории, по которым записи публикуются в платформе. В ADS топики могут иметь нескольких потребителей, которые подписываются на получение находящихся в них данных. Для каждого топика платформа поддерживает партиционированный журнал, схематично представленный на Рис.4.

../_images/ADS_intro_Topic.png

Рис. 4. Партиционированный журнал

Каждая партиция представляет собой упорядоченную неизменяемую последовательность записей, которая постоянно добавляется в структурированный журнал. Каждой записи в партиции присваивается порядковый номер id, называемый смещением (offset), который однозначно идентифицирует каждую запись.

Платформа надежно сохраняет все опубликованные записи в соответствии с настройкой периода их хранения. Например, если политика хранения установлена на два дня, то в течение двух дней после публикации запись доступна для потребления, после чего она удаляется с целью освобождения места. Производительность ADS фактически постоянна по отношению к размеру данных, что обеспечивает возможность хранения знаписей в течение длительного времени (Рис.5.).

../_images/ADS_intro_offset.png

Рис. 5. Логика смещения

Фактически, метаданные, сохраненные для каждого потребителя, являются его смещением или положением в журнале. Это смещение контролируется самим потребителем: обычно потребитель линейно продвигает свое смещение при считывании записи, но так как его позиция контролируется им самим, то он может считывать записи в любом порядке. Например, потребитель может вернуться к более старому смещению для повторной обработки данных или перейти к самой последней актуальной записи и начать считывание с настоящего момента.

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

Партиции в журнале служат нескольким целям. Во-первых, они позволяют журналу масштабироваться сверх размера, который помещается на одном сервере. Каждая отдельная партиция располагается на конкретном сервере, но топик может иметь много партиций и располагаться на нескольких серверах для возможности обработки произвольного количества данных. Во-вторых, партиции действуют как единица параллелизма.

Партиции журнала распределяются по серверам кластера ADS, при этом каждый сервер обрабатывает данные и запросы к определенным партициям. Каждая партиция реплицируется на настраиваемое число серверов для обеспечения отказоустойчивости.

У каждой партиции всегда имеется один сервер, выступающий в качетсве “лидера”. Лидер обрабатывает все запросы на чтение и запись для партиции, а остальные сервера пассивно реплицируют изменения лидера. Если лидер выходит из строя, один из брокеров автоматически становится новым лидером.

ADS MirrorMaker обеспечивает поддержку георепликации для кластеров. С помощью MirrorMaker сообщения реплицируются через несколько центров обработки данных или облачных сервисов, что можно использовать в активных/пассивных сценариях резервного копирования и восстановления или в активных/активных сценариях для размещения данных ближе к пользователям, а так же с целью поддержки требований к местоположению данных.

Поставщики публикуют данные по топикам по своему усмотрению и отвечают за выбор того, какую запись назначить для какой партиции. Это может быть сделано в циклическом режиме для балансировки нагрузки, или это может быть сделано в соответствии с какой-либо семантической функцией разбиения (например, на основе некоторого ключа в записи).

Потребители относят себя к группе потребителей, и каждая запись, опубликованная в топике, доставляется каждому инстансу потребителя, группа которого подписана на данный топик. При этом инстансы потребителя могут находиться на отдельных процессах или машинах. Если все инстансы потребителя имеют одну и ту же группу, то записи эффективно балансируются. А в случае если инстансы потребителя имеют разные группы, то каждая запись передается во все потребительские процессы (Рис.6.).

../_images/ADS_intro_group.png

Рис. 6. Группы потребителей

На рисунке приведен пример двухсерверного кластера ADS с четырьмя партициями (P0-P3) и с двумя группами потребителей. Группа потребителей A имеет два экземпляра потребителей, группа B – четыре.

Чаще всего топики имеют небольшое количество групп потребителей – по одной для каждого “логического подписчика” (“logical subscriber”). Каждая группа состоит из множества инстансов потребителей для обеспечения масштабируемости и отказоустойчивости. Это не что иное, как семантика “издатель-подписчик” (“publish-subscribe”), где подписчик представляет собой не один процесс, а группу потребителей.

Реализация способа считывания в ADS заключается в разделении записей журнала на партиции, исходя из экземпляров потребителя, чтобы каждый экземпляр был исключительным потребителем “изрядной доли” (“fair share”) партиций в любой момент времени. Процесс поддержания членства в группе динамически обрабатывается протоколом ADS. Если к группе присоединяются новые экземпляры, они принимают некоторые партиции от других членов группы; если экземпляр удаляется, его партиции распределяются по остальным экземплярам.

ADS предоставляет только общий порядок записей внутри партиции, а не между партициями в топике. Упорядочивание по разделам в сочетании с возможностью разбиения данных по ключам для большинства приложений является достаточным. Однако если требуется полный порядок по записям, это может быть достигнуто с помощью топика, имеющего только одну партицию, хотя это будет означать только один потребительский процесс для каждой группы потребителей.

Кластер ADS можно развернуть как multi-tenant решение. Этот режим настраивает, в какой топик могут записываться данные, а из какого считываться. Существует также операционная поддержка квот. Администраторы могут определять и применять квоты на запросы для управления ресурсами брокера, которые используются клиентами.