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 |
Принципы работы
Инвалидации
- Запускаются с сообщениями из мета топиков
- Через обратные индексы мета пайплайны понимают, кого инвалидировать
- Отправка инвалидаций идёт в нужные пайплайны через внутренние очереди
- Коммит сообщения из мета топика делается только тогда, когда все пайплайны обработают сообщение об инвалидации
Принципы работы
Что ещё?
- Переиспользование сторов после рестарта делается через graceful shutdown.
-
Есть оптимизация первого старта.
- Метаданные идут вперёд данных.
Принципы работы
Допущения и упрощения относительно Kafka Streams
-
Все филиалы и эталоны будут на каждой ноде в глобальном хранилище.
-
Считаем, что эталоны и филиалы не удаляются никогда
-
Выходные сообщения попадают всегда в тот же номер партиции, что и входное сообщение.
-
При первом старте кластера топики с метаданными дочитываются до конца, и только потом начинают читаться топики с товарами.
-
Количество партиций входного топика с товарами и промежуточного топика совпадает.
DEMO TIME
Спасибо!
Pacman
By Yury Badalyants
Pacman
- 194