Я планирую разложить приложение, которое я начал строить в виде монолита с помощью базы данных графов в микросервисы. Но дилемма, с которой я столкнулась, пытается найти правильное решение для разделения различных сервисов и не потерять преимущества, предоставляемые базой данных графа.Микросервисы: разложение приложения на основе графа db
Идея, которую я изначально рассмотрел, состоит в том, чтобы разделить каждый отдельный объект на свой собственный микросервис, используя хранилище документов для сохранения данных для каждой службы. Затем определите службу более высокого уровня для управления отношениями.
Например, с отношением (A) -> (B), создаст 3 микросервиса, службу для объектов типа A, другую для объектов типа B и третий более высокий уровень с базой данных графа, хранящие узлы типа A и B, содержащие только идентификаторы и отношения между ними.
Вопрос 1: Есть ли что-то не так с этим подходом в отношении сцепления, отказоустойчивости или чего-либо еще, о котором я не могу сейчас думать?
Вопрос 2: Когда вы бросаете в игру третью сущность, например (A) -> (B), (A) -> (C) и (C) -> (B) , какой из них будет лучшим подходом в этом сценарии?
- Я придерживаюсь стратегии только одного обслуживания более высокого уровня, чтобы поддерживать все отношения?
- Я создаю несколько сервисов более высокого уровня для поддержания каждого типа отношений?
Вопрос 3: В случае отношений между субъектами одного и тем же типа, например (Person) - isFriendOf -> (Person), имея в виде концепции разделения проблем, это разрешить разделить управление отношениями на другую услугу?
Любой вход, отзывы и идеи очень приветствуются.
Я делал некоторые исследования по этому вопросу, и ради ясности, я предлагаю более конкретный сценарий, так будет легче обсуждать об этом. модель график будет выглядеть примерно так:
Целью здесь было бы реализовать услугу рекомендации списка воспроизведения песни, пытаясь найти песни, которые данный пользователь еще не прислушиваются, основанные на жанры и исполнители из песен, которые пользователь уже прослушивал, а также из других песен, прослушанных другими пользователями, за которыми следует текущий пользователь.