допустимо ли использовать одни и те же таблицы с разных микросервисов? - PullRequest
0 голосов
/ 15 октября 2018

У нас есть 2 микросервиса:

service_A, service_B.Оба они используют одну и ту же базу данных.Сегодня я узнаю, что у нас есть репозитории для одних и тех же таблиц, используемых различными сервисами.Я помню, что я читал, что это по какой-то причине ошибка дизайна, и пытался погуглить эту информацию.Но, к сожалению, мой поиск не увенчался успехом.Не могли бы вы объяснить эту проблему?

Также это может быть моей ошибкой.Так можно ли использовать одну и ту же таблицу для разных микросервисов?

1 Ответ

0 голосов
/ 15 октября 2018

Исходя из моего опыта, не рекомендуется использовать одни и те же данные между микросервисами.Вот (вероятно, неполный) набор причин:

  • Трудно сказать, какой микросервис действительно является владельцем данных.Это нехорошо с архитектурной точки зрения

  • Стоимость изменения схемы намного выше, поскольку контракт не является четко определенным.Например, если вы удалите, скажем, столбец, в одном микросервисе, второй микросервис может перестать работать, даже если код первого микросервиса был откорректирован для изменений.В других случаях это все равно будет работать, но производительность может ухудшиться (например, удаление индекса с помощью сопровождающего первого микросервиса, поскольку это не относится к запросам, выполняемым в нем, может привести к ухудшению производительности второго микросервиса)

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

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

  • Стоимость перехода на другую базу данных (если требуется) будет намного выше, поскольку код должен быть изменен в обоих микросервисах

  • При использовании ORM, например JOOQ (любой инструмент, которыйтребует генерации кода), не очень легко понять, куда помещать сгенерированные файлы?В обоих микросервисах?В одном из них?Как поделиться моделью данных

  • Метрики, которые обычно создаются для микросервисов, будут сложными, потому что, если мы измерим доступ к какой-либо таблице в БД, мы не уверены, что другой микросервис выигралДоступ к этой таблице также возможен.

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

...