2015-05-15 2 views
4

Что-то я искал, но не может найти прямой ответ на это:Microservice базы данных совместно с другими службами

Для данной услуги, если есть два экземпляра этой службы, развернутая на два машины, они одни и те то же самое постоянное хранилище или у них есть отдельные магазины с некоторым механизмом синхронизации (master/slave, clustering)?

E.g. У меня есть OrderService, поддерживаемый MySQL. Мы получаем много заказов, поэтому мне нужно масштабировать эту услугу, поэтому мы развертываем второй OrderService. Откуда берутся его данные?

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

+0

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

+0

Правильно, все, что имеет смысл.Но в контексте «микросервиса», должна ли БД быть распределена между различными экземплярами службы для масштабирования, независимо от службы, или если БД должна быть сопряжена с сервисом, что делает каждый развертываемый блок действительно независимым? В моей голове я склонялся к последнему, чтобы масштабирование обеих частей происходило автоматически, вместо того, чтобы масштабировать DB независимо для трафика n сервисов. – MikeG

+0

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

ответ

4

Опубликовать это как ответ, потому что слишком долго для комментария.

Микросервисы являются автономными компонентами и как таковые отвечают за свои данные. Если вы хотите получить данные, вы должны поговорить с сервисным API. Это относится главным образом к различным видам услуг (т. Е. Вы не используете базу данных среди служб, которые предлагают различные виды бизнес-функций - это плохая практика, потому что вы выполняете пару сервисов в куче через базу данных, и тогда легко сочетать больше вещей, которые обычно выполняются на уровне API, но удобнее делать их через базу данных => вы рискуете потерять компонентность).

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

Теперь вы должны спросить себя, какое решение вы выбрали:

  • Являются ли эти OrderService s твои действительно способных работать самостоятельно, или вам нужно иметь все заказы в одной и той же базе данных отчетности или доступа других приложений?
  • определите, каково ваше фактическое узкое место. Это база данных? Если нет, то поделитесь базой данных. Это услуги? Если нет, тогда распространяйте свои данные.
  • Необходимо предоставить данные? Каков ваш выбор, каковы ваши потребности? Вам нужно быть последовательным все время или возможная последовательность достаточно хороша? Вам нужно иметь отдельные базы данных и синхронизировать их вручную или ваша установка базы данных обрабатывает репликацию и разметку из коробки?
  • и т.д.

То, что я пытаюсь сказать, что в такого рода ситуациях, ответ таков: это зависит. И то, что мы, техничные разработчики, часто забываем делать, прежде чем приступать к таким поездкам с распределенной/масштабируемостью/архитектурой, - это поговорить с бизнесом. Часто бизнес может обрабатывать определенную степень несогласованности, субоптимальные процессы или поиск данных в большем количестве мест вместо одного (т. Е. То, что вы считаете важным, необязательно для бизнеса). Поэтому поговорите с ними и посмотрите, что они могут терпеть. Возможно, будет дешевле разрешить что-то оперативным способом, чем вкладывать много средств в попытку построить высокораспределяемую систему.

+0

Это много, чтобы рассмотреть. Я предполагаю, что мой вопрос должен быть следующим: как работают самые большие системы с постоянством? Для меня такая БД, как Cassandra, была бы идеальной здесь, потому что каждый экземпляр БД новой службы мог бы присоединиться к кластеру, и результатом этого будет прогнозируемое горизонтальное масштабирование. Но это относится только к одной БД, а как насчет остальных? Для моей личной цели данные не могут быть разделены для случая использования отчетов, о котором вы говорили ранее. – MikeG

+0

'Как работают самые большие системы с постоянством?' Опять же: это зависит! Извините, если это не тот ответ, которого вы ожидали, но нет стандартного способа борьбы с постоянством в больших системах. В старые времена это было просто: реляционная база данных. Какими бы ни были функции (Oracle, MSSQL и т. Д.), Это было то, что вы использовали ... – Bogdan

+0

... Теперь вместо реляционной базы данных общего назначения мы имеем множество специализированных (в основном, NoSQL), которые обрабатывают специализированные проблемы. Большие системы теперь имеют стойкость полиглота, которая имеет [свои собственные проблемы] (http://itknowledgeexchange.techtarget.com/data-world/polyglot-persistence-and-future-integration-costs/) для решения. – Bogdan

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