Подключение микросервисов и баз данных

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

Если у вас есть две таблицы, которые логически различны (ограниченные контексты, если вы это сделаете), но вы часто выполняете агрегированную обработку на больших томах этих данных, тогда в монолите вы более чем вероятно избегаете ориентации объекта и вместо этого используете ваша стандартная функция базы данных JOIN для обработки данных в базе данных до возвращения агрегированного представления обратно в ваш уровень приложения.

Как вы оправдываете разделение таких данных на микросервисы, где предположительно вам потребуется "присоединить" данные через API, а не в базе данных.

Я прочитал книгу Сэма Ньюмана Microservices и в главе о разделении Монолита он приводит пример "Нарушения внешних ключей", где он признает, что совместное использование API будет медленнее - но он продолжает сказать, если ваше приложение достаточно быстро в любом случае, имеет ли значение, что он медленнее, чем раньше?

Это кажется немного бледным? Что люди переживают? Какие методы вы использовали для обеспечения совместимости API-соединений?

42
задан Martin Bayly 21 апр. '15 в 5:34
источник поделиться
2 ответов
10
ответ дан sap1ens 21 апр. '15 в 5:51
источник поделиться

Это нормально для служб, которые имеют реплицированные копии только для чтения определенных справочных данных из других служб.

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

  • создать db-схему для службы
  • создайте версии * views ** в этой схеме, чтобы вывести данные из этой схемы в другие службы.
  • do присоединяется к этим представлениям readonly

Это позволит вам самостоятельно изменять данные таблицы /strucutre без нарушения других приложений.

Вместо использования представлений я мог бы также рассмотреть возможность использования триггеров для репликации данных из одной схемы в другую.

* виды могут быть расширены. Если требуется изменить разрыв, создайте v2 одного и того же вида и удалите старую версию, когда она больше не требуется. ** или Таблица-Функции или Sprocs.

3
ответ дан mcintyre321 17 июня '15 в 14:18
источник поделиться

Другие вопросы по меткам или Задайте вопрос