Привилегия - единица предоставления услуг конечному пользователю. Список привилегий определяется при разработке сервиса и публикуется\обновляется при каждом запуске сервиса. Ответственен за публикацию своих привилегий непосредственно конечный сервис. Привилегии нужны для создания тарифов, ибо тариф - набор привилегий и их количества, снабженный ценой и общим описанием.
При покупке пользователем тарифа, привилегии, перечисленные в этом тарифе добавляются в аккаунт этого пользователя. "Трату" привилегий и ограничения налагаемые ограниченным количеством той или иной привилегии обрабатывает сам конечный сервис.
При окончании количества привилегии, конечный сервис должен оповестить customer сервис об этом, добавив запись в историю.
Аккаунт - сущность обеспечивающая связь между customer сервисом и конечным продуктовым сервисом. Каждый продуктовый сервис имеет набор тарифов, описывающих ограниченность доступа конкретного аккаунта к услугам, которые предоставляет сервис. При покупке тарифа в customer сервисе, тот публикует данные о купленном тарифе в очередь redpanda, а конечный продуктовый сервис, подписанный на этот топик, получив из очереди информацию о том, что такой-то юзер купил тариф относящийся к нему, должен внести приобретенные привилегии в аккаунт пользователя, купившего тариф.
При использовании услуг продуктового сервиса, он обращается к полям аккаунта, для того чтобы определять, доступна ли этому пользователю данная услуга или же он уже выработал квоту, определённую приобретенным им тарифом.
Так же, в аккаунте хранятся дополнительные настройки, необходимые для взаимодействия пользователя с конечным продуктовым сервисом, но лишние в customer сервисе, т.е. сервисоспецифичные настройки. Например, токены доступа к яндекс диску
Область отвественности аккаунта - хранение данных о пользователе, специфичных для данного сервиса, в том числе, о доступных ему привилегиях. Дублирования информации не происходит - customer сервис хранит только данные о корзине пользователя, о кошельке и историю. При оплате корзины, customer сервис передает продуктовым сервисам данные о оплаченных тарифах и сервисы сами обновляют аккаунт пользователя, который приобрел тариф,добавляя ему соответствующие привелегии. Так же, сам продуктовый сервис следит об окончании той или иной привилегии, о чем оповещает customer сервис.
Отдельного сервиса для хранения и получения аккаунтов нет и, надеюсь, не будет, ибио это сильно увеличит связность системы - этому сервису придётся знать модель аккаунта каждого подключенного к нему сервиса.
Примерный список api методов, который должен быть у сервиса для работы с аккаунтом https://penahub.gitlab.yandexcloud.net/pena-services/customer/-/blob/dev/api/openapi/v1/openapi.yaml?ref_type=heads - в секции Account