2017-01-19 9 views
1

Вот мои текущие выводы по этому вопросу, являются ли они правильными или нет недостатка?В чем причина разграничения баз данных на микросервисах?

Существуют две основные принципы microservices:

  • сильное сцепление -> связанные код gouped вместе, например, класс делает на хорошо определенную работу, это сильное/hingh-сцепление.
  • развязывающая муфта -> соединительные элементы в системе, так что эти компоненты зависят друг от друга как можно меньше. Связывание относится к степени прямого знания того, что один элемент имеет другой. Поэтому изменение одной службы не должно требовать изменения к другому.

С общей базой данных (как в неразделенной архитектуре) эти принципы не охватываются. Это обусловлено следующими фактами:

  • Существует фиксированная связь между пользователями и конкретного выбора технологии , а также фактической реализации базы данных.
  • Логика Businiess/application может распространяться среди нескольких пользователей.
  • Общая информация, которая должна быть отредактирована, может привести к изменению поведения в разных местах: .
  • Из-за более монолитной архитектуры, которая идет с общими базами , сбой может повлиять на многие серверы, так как все они связаны вместе, даже сбой в системе может произойти из-за кулачества .

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

ОБНОВЛЕНИЕ: Другим преимуществом микросервисов было бы то, что он может улучшить гибкость и скорость разработки. Поскольку правильно разложенные микросервисы могут разрабатываться и развертываться отдельно и параллельно с другими службами.

+0

Вы в целом правы, хотя я бы не согласился (или не понял) ваши первые два утверждения. С моими двумя последними утверждениями я согласен. –

+0

@Tom Redfern: Я имел в виду, что вы не можете использовать разные базы данных, если у вас есть одна общая монолитная архитектура. Я думал об этом, так как видел службы, которые получают данные от MonoDB, который, в свою очередь, был синхронизирован с SoR (System of Record), поэтому MongoDB обеспечивал только высокоскоростной кеш, и опасность dataloss была очень низкой, поскольку она могла легко перестроить. Это была только одна услуга, другая служба, связанная с кластерами баз данных, где infact критически важна для dataloss. Это было бы невозможно с фиксированной связью между БД и потребителем – MBushveld

+0

@MBushveld Я думаю, что ваше наблюдение верное. Важно сосредоточиться на базовой проблеме - связи на уровне данных и владении данными в качестве основных драйверов, чтобы убедиться, что право собственности DATA не используется, если в вашем развертывании имеет смысл разместить все данные на одном сервере базы данных это совершенно верно, так что вы не нарушаете изоляцию владения данными ... –

ответ

1

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

Другое дело - сцепление. Вы не можете полностью изолировать микросервисы, что означает, что они все равно будут зависеть друг от друга в определенной степени. Просто возьмите простой пример услуг Product, Order, Shipment. Эти услуги должны быть осведомлены друг о друге, есть , чтобы не сделать их полностью отдельными.Но вы можете сделать их временно развязанным с помощью certain design strategies. Когда сервисы развязаны таким образом, каждый из них может быть недоступен в течение некоторого времени (например, перераспределение), не влияя на других.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^