Совместное использование DTO между микросервисами - PullRequest
0 голосов
/ 26 марта 2020

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

Наш второй подход заключался в следующем: мы создали несколько проектов maven. Это Maven проекты содержат только DTO, которые разделяются между службами. Итак, давайте предположим, что у нас есть сервисы 1, 2, 3, 4, 5 и DTO A, B & C. Предположим, что DTO A совместно используется службами 1 и 2. DTO B & C совместно используются службами 3, 4 и 5. В этом случае мы создадим две зависимости maven, первая с DTO A, которая будет включена в сервисы 1 и 2. Вторая зависимость будет содержать DTO B & C и будет включена в сервисы 3, 4, 5.

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

Другим недостатком может быть следующий. Сначала мы подумали, что сервис 1 и сервис 2 будут просто использовать DTO A. Через некоторое время были добавлены новые требования, и теперь DTO A должно зависеть от DTO B. Итак, давайте представим, что DTO A - это Автомобиль с полями (brand, constructionYear) и DTO B - Мотор с полем (мощность). Итак, давайте предположим, что обмен DTO двигателя происходит между сервисами 2 и 3. Обмен DTO автомобиля происходит между сервисами 1 и 2. Через некоторое время мы получаем требование, чтобы DTO автомобиля получил новый полевой двигатель. Итак, теперь у нас есть два варианта:

Вариант 1: Мы позволяем DTO транспортного средства зависеть от DTO двигателя. Вариант 2: Мы создаем другой двигатель DTO (Motor2), который включен в DTO транспортного средства, поэтому у нас есть два двигателя DTO, и транспортное средство не зависит от исходного двигателя DTO.

Преимущество варианта 1 заключается в том, что , что у нас нет никакого дублирования кода. Недостатком является то, что оба dtos находятся в отдельных проектах maven, и их довольно сложно поддерживать. Потому что, если мы изменим одно dto, нам придется обновить версию зависимости.

Преимущество варианта 2 состоит в том, что dtos независимы друг от друга. Но если есть изменения, мы должны коснуться нескольких мест. Конечно, легко изменить один DTO в двух сервисах. Но если изменение затрагивает несколько DTO, которыми обмениваются четыре или пять сервисов, это может быть очень раздражающим. Особенно часто бывает так, что в начале проекта требования меняются очень быстро.

Итак, каков ваш опыт обмена DTO между микросервисами / системами. Какой подход вы используете, и в чем его преимущества или недостатки?

...