Архитектура системы лояльности
От: andsm Россия  
Дата: 23.07.23 09:16
Оценка:
Пришла ко мне задача по перепроектированию системы лояльности, для одного из крупных интернет-магазинов. Понятно, что у системы лояльности десятки миллионов пользователей и многие тысячи запросов в секунду. Функционально, система работает хорошо, основная цель перепроектирования – решить вопросы масштабируемости и улучшить скорость ответа. При этом, хочется еще и гибкости, возможности добавления нового функционала, о котором сейчас никто не думает, без существенных трудозатрат и без модификации архитектуры.
Накидал уже несколько вариантов архитектуры, подумаю еще, может еще варианты придумаю. Каждый из вариантов, насколько вижу, удовлетворяет нефункциональным требованиям в части масштабируемости и ускорения скорости ответа. По гибкости к изменениям, есть некоторая разница. Так, можно задействовать шардирование с использованием PostgreSQL, а можно все хранить в key-value, например в Кассандре. Можно, под каждый тип параметра расчета, делать свой микросервис агрегатов, а можно в одном месте агрегировать данные. Или вообще их не агрегировать, просто кидать из очереди в шарду, а там использовать для вычислений по запросу.
Поискал в инете, что-то каких-то интересных референсных архитектур не нашел. Может кто видел такие примеры? Было бы интересно посмотреть.
Занимался ли кто проектированием систем лояльности, может поделиться с какими проблемами сталкивался? На что там стоит обратить внимание, какие моменты могут быть наиболее проблемными?
Re: Архитектура системы лояльности
От: Дельгядо Филипп Россия  
Дата: 23.07.23 19:40
Оценка: 7 (1)
Здравствуйте, andsm, Вы писали:

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

A>Накидал уже несколько вариантов архитектуры, подумаю еще, может еще варианты придумаю. Каждый из вариантов, насколько вижу, удовлетворяет нефункциональным требованиям в части масштабируемости и ускорения скорости ответа. По гибкости к изменениям, есть некоторая разница. Так, можно задействовать шардирование с использованием PostgreSQL, а можно все хранить в key-value, например в Кассандре. Можно, под каждый тип параметра расчета, делать свой микросервис агрегатов, а можно в одном месте агрегировать данные. Или вообще их не агрегировать, просто кидать из очереди в шарду, а там использовать для вычислений по запросу.
A>Поискал в инете, что-то каких-то интересных референсных архитектур не нашел. Может кто видел такие примеры? Было бы интересно посмотреть.
A>Занимался ли кто проектированием систем лояльности, может поделиться с какими проблемами сталкивался? На что там стоит обратить внимание, какие моменты могут быть наиболее проблемными?

Несколько раз делал программы лояльности в рамках платежек. Никакой особой нагрузки там нет, какие там тысячи запросов в секунду, вряд ли даже до тысячи дойдет даже для очень крупных интернет-систем. Так что особых задач по масштабированию там нет, разве что в хранении истории, там да, можно сделать шардирование (или просто не хранить слишком долго). Микросервисы тут не особо нужны, в лучшем случае отделить собственно лояльность от аналитики (там разные БД нужны и разные типы запросов).
Но вообще ничего особенно сложного для любого современного нормального стека.
Re[2]: Архитектура системы лояльности
От: andsm Россия  
Дата: 24.07.23 09:14
Оценка:
Здравствуйте, Дельгядо Филипп, Вы писали:

ДФ>Несколько раз делал программы лояльности в рамках платежек. Никакой особой нагрузки там нет, какие там тысячи запросов в секунду, вряд ли даже до тысячи дойдет даже для очень крупных интернет-систем. Так что особых задач по масштабированию там нет, разве что в хранении истории, там да, можно сделать шардирование (или просто не хранить слишком долго).


Посмотрел, прямо сейчас несколько тысяч запросов в секунду к системе
лояльности. Интернет-магазин из топ10 России, плюс крупная розничная торговая сеть. Данных у системы лояльности сейчас относительно немного, около 300 Гб, история долго не хранится.
Сервера основательно нагружены, уже упираемся в пределы вертикального масштабирования.
Re: Архитектура системы лояльности
От: Miroff Россия  
Дата: 24.07.23 09:27
Оценка: +1
Здравствуйте, andsm, Вы писали:

A>Накидал уже несколько вариантов архитектуры, подумаю еще, может еще варианты придумаю. Каждый из вариантов, насколько вижу, удовлетворяет нефункциональным требованиям в части масштабируемости и ускорения скорости ответа. По гибкости к изменениям, есть некоторая разница. Так, можно задействовать шардирование с использованием PostgreSQL, а можно все хранить в key-value, например в Кассандре. Можно, под каждый тип параметра расчета, делать свой микросервис агрегатов, а можно в одном месте агрегировать данные. Или вообще их не агрегировать, просто кидать из очереди в шарду, а там использовать для вычислений по запросу.


Структуры данных зависят от запросов и только от запросов. В целом, шардинг по user_id выглядит достаточно разумным решением.

И да, количество запросов выглядит нереальным, это уровень алиэкспресса или амазона, а не российского интернет магазина. Скорее всего, вам нужео избавляться от лишних запросов, а не пытаться масштабировать плохую архитектуру
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.