Pacman

Название

Public API connector

+

man для звучности

Зачем нужен Pacman?

Processing

Public API

ES

Key: ProductId

Value: Product

Key:
(OrgProductId | ReferenceProductId , RegionId)

Value:
Обогащённый OrgProduct
ИЛИ
RefProduct со всеми обогащёнными OrgProduct'ами в рамках одного RegionId

Pacman

Зачем нужен Pacman?

Processing

Public API

ES

Offers

Key: (OrgProductId | ReferenceProductId , BranchId)
Value: Обогащённый Offer

Pacman

Products

Offers

Pacman

offers

Зачем нужен Pacman?

Processing

Public API

ES

Pacman

products

Pacman

offers

Converter

Зачем нужен Pacman?

Processing

Public API

ES

Pacman

products

Pacman

offers

Converter

WebApi

Escobar

Зачем нужен Pacman?

Processing

Public API

ES

Pacman

products

Pacman

offers

Converter

WebApi

Escobar

Pacman

branches

Вход и выход

Pacman

Branches

OrgProducts

RefProducts

Pictures

RefProductsAgg

PublicApiProducts

Metadata

Принципы работы

Похож на Kafka-streams

  • Используются локальные сторы на базе RocksDB.

  • Сторы восстанавливаются из кафка топиков.

  • Есть подобие топологии — это пайплайны. Каждый пайплайн читает топик или партицию.

  • Обработка сообщений делается в памяти, с использованным данных из сторов.

Принципы работы

Пайплайны

  • OrgProductsPipeline

  • RefProductsAggPipeline

  • BranchesPipeline

  • RefProductsPipeline

  • PicturesPipeline

Сторы

  • RefProductsStore

  • BranchesStore

  • BranchOrgsIndex

  • BranchRefsIndex

  • OrgProductsStore

  • RefProductsAggStore

  • PicturesStore

  • PicturesOrgProductsIndex

Принципы работы

Партиционирование и ребаланс

Используется статичечский, а не рантаймовый ребаланс

Принципы работы

Восстановление сторов

Стор Топик Тип стора
RefProductsStore ref-products Global
BranchesStore pacman-branches Global
BranchOrgsIndex org-products Partitioned
OrgProductsStore org-products Partitioned
BranchRefsIndex public-api-products Partitioned
RefProductsAggStore public-api-products Partitioned
PicturesStore pictures Global
PicturesOrgProductsIndex org-products Partitioned

Принципы работы

Инвалидации

  • Запускаются с сообщениями из мета топиков
  • Через обратные индексы мета пайплайны понимают, кого инвалидировать
  • Отправка инвалидаций идёт в нужные пайплайны через внутренние очереди
  • Коммит сообщения из мета топика делается только тогда, когда все пайплайны обработают сообщение об инвалидации

Принципы работы

Что ещё?

  1. Переиспользование сторов после рестарта делается через graceful shutdown.
     
  2. Есть оптимизация первого старта.
     
  3. Метаданные идут вперёд данных.

Принципы работы

Допущения и упрощения относительно Kafka Streams

  • Все филиалы и эталоны будут на каждой ноде в глобальном хранилище.

  • Считаем, что эталоны и филиалы не удаляются никогда

  • Выходные сообщения попадают всегда в тот же номер партиции, что и входное сообщение.

  • При первом старте кластера топики с метаданными дочитываются до конца, и только потом начинают читаться топики с товарами.

  • Количество партиций входного топика с товарами и промежуточного топика совпадает.

DEMO TIME

Спасибо!

Pacman

By Yury Badalyants