Повторное использование микросервисов в разных проектах - PullRequest
1 голос
/ 08 января 2020

Мы разработали монолитный c API для использования в качестве SAAS. В компании мы также разрабатываем индивидуальные сборки для некоторых клиентов.

Некоторые наши клиенты спрашивают о некоторых функциях, которые уже реализованы в приложении monolithi c.

Мы думаем о разделении нашего API на микросервисы, но основные вопросы заключаются в следующем :

  • Можно ли повторно использовать микросервисы в разных проектах?
  • Если мы делаем разделение, создадим ли мы микросервис, который используют все, или мы создадим экземпляр для пользовательской сборки?

EG:

project A use "User", "Project" so we deploy 2 microservices
project B use "User", "Project", "Store" so we deploy 3 microservices

total number of microservices deployed : 5
  • Если мы создадим экземпляр каждого микросервиса для пользовательской сборки, не будет слишком сложно управлять связью между всеми микросервисами в одном и том же Пользовательская сборка?
  • Или мы придерживаемся одного экземпляра на микросервис, который все используют, и мы указываем источник проекта?

Поскольку мы используем C# GraphQL. Мы также подумали о создании пакета Nuget для каждого компонента, поэтому каждый пакет будет содержать:

  • Открытые запросы / мутации GraphQL
  • Его собственная база данных
  • Его собственная логика c

EG:

- Api A install "User" & "Project" packages
- 3 db are instantiated "Api.A", "Api.A.User", "Api.A.Project"

- Api B install "User", "Project" & "Store" packages
- 4 db are instantiated "Api.B", "Api.B.User", "Api.B.Project" & "Api.B.Store"

Но имеет ли это смысл?

На мой взгляд, это может очень похоже на Hangfire https://www.hangfire.io/

Обратите внимание, что в настоящее время мы используем AWS Serverless для размещения наших приложений. Важным моментом является то, что мы небольшая команда 2-4.

Мы очень открыты, поэтому любое предложение приятно услышать.

Спасибо!

1 Ответ

0 голосов
/ 08 января 2020

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

Итак, чтобы понять вашу дилемму, у вас есть базовый продукт vanilla, который представляет собой API SAAS, и для некоторых клиентов также существует индивидуальное развертывание. Но так как вам приходится создавать пользовательские развертывания для каждого клиента, вы замечаете общий шаблон, в котором большая часть функций повторяется в SAAS для каждого клиента.

Теперь, если у меня есть правильное требование, я бы Скажем, микроуслуги обеспечат в вашем случае определенные преимущества с точки зрения масштабирования и пользовательской настройки c, которой будут управлять независимые группы.

Но многое зависит от того, как структурирована логика вашего бизнеса c и насколько велика и обширна ваша настройка. Вот некоторые из этих вопросов, которыми должно руководствоваться ваше решение.

  1. Можете ли вы хранить данные, определенные клиентом c, в центральном хранилище данных или на стороне клиента? & Как будут структурированы ваши базы данных и сколько их будет?
  2. Насколько велики настройки? Являются ли они Cosmeti c или придерживаются рабочего процесса?
  3. Сколько перекрестной связи вы ожидаете между различными сервисами, такими как Пользователь, Магазин и Проект, и если есть какая-либо связь через A.User - B.User или A. Проект - B.Store, et c?

Теперь перейдем к некоторым важным вещам, которые вы могли бы рассмотреть после ответа на вышеуказанные вопросы.

Замечание 1 . Если хранилища данных могут находиться в одном центральном месте, вы можете go опередить один кластер, в котором могут быть развернуты все ваши микроуслуги. Но, глядя на предоставленные данные, я могу предположить, что у вас есть несколько баз данных на клиента, и я бы рекомендовал хранить их отдельно и не вводить никакой связи между ними. Таким образом, вы можете получить один микросервис или микросервис для каждого клиента, который взаимодействует только с базой данных этого клиента. (подробнее на рис.1)

Замечание 2. Насколько мне известно, настройка должна быть отделена от самой службы, и каждая ваша служба должна иметь вход для загрузки конфигурации, который будет управлять служебным поведением. Опять же, в зависимости от того, насколько велика ваша настройка, может быть ограничение этой конфигурации, и в этих случаях я рекомендую создать новый сервис со встроенными настройками.

Рассмотрение 3. Это является основным фактором для определения количества микросервисов, которые у вас могут быть, но граница каждого сервиса должна определяться доменом, например, сервисом пользователя, Служба магазина и Служба проекта. Это ванильные сервисы, которые взаимодействуют друг с другом для создания правильного бизнес-сценария. И каждый из клиентов - это только специализированные экземпляры этих услуг.

ok Теперь, когда это сделано, давайте замаскируем ваши основные вопросы ...

  1. Микросервисы Des могут быть повторно использовать в разных проектах? - Да, вы можете, но опять же, это зависит от того, как вы спроектировали рабочий процесс, внедрение конфигурации.

  2. Если мы делаем разделение, создаем ли мы микросервис, который используют все или мы создать экземпляр для пользовательской сборки? - Да, это был бы идеальный сценарий, позволяющий разделить проблемы между проектами, поскольку мы не хотим смешивать границы данных и специфичные для клиента конфигурации c. Тем не менее, может быть случай, когда единственное микросервисное решение - это то, что требуется, но должно быть сделано с осторожностью.

  3. Если мы создадим экземпляр каждого микросервиса для пользовательской сборки, не будет слишком сложно управлять связью между всеми микросервисами в рамках одной и той же пользовательской сборки? - Связь через микросервис является важной частью или фактором, который в большинстве случаев неизбежен. Таким образом, учитывая, что вам потребуется некоторая форма межсервисного взаимодействия, вы можете посмотреть на корпоративную шину или API-интерфейс на основе ваших требований. Но, по моему мнению, это известная мелочь.

  4. Или мы придерживаемся одного экземпляра на микросервис, который используют все, и мы указываем источник проекта? - Я бы не рекомендовал это, поскольку приведенный в вашем вопросе пример модуля для инъекций базы данных не кажется мне хорошей идеей. Это приведет к созданию высокосвязанной системы. И это также может означать, что если один из сервисов не будет работать на всех ваших клиентских сайтах go. Вы, конечно, не захотите этого !!!

Теперь, как говорится, картинка стоит тысячи слов ...

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...