Микросервисы против монолитной архитектуры [закрыто]



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



когда микросервисы подходят лучше, и куда лучше идти с монолитной архитектурой.

612   3  

3 ответов:

хотя я относительно новичок в мире микросервисов, я постараюсь ответить на ваш вопрос как можно полнее.

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

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

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

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

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

Это очень важный вопрос, потому что несколько человек заманивают весь шум вокруг микросервисов, и есть компромиссы, чтобы рассмотреть. Итак, каковы преимущества и проблемы микросервисов (по сравнению с монолитной моделью)?

преимущества

  • возможность развертывания: больше гибкости для развертывания новых версий службы из-за более коротких циклов сборки+тестирования+развертывания. Кроме того, гибкость в использовании специфичной для службы безопасности, репликации, сохраняемость и конфигурации мониторинга.
  • надежность: неисправность микросервиса влияет только на этот микросервис и его потребителей, тогда как в монолитной модели неисправность службы может привести к разрушению всего монолита.
  • в наличии: развертывание новой версии микросервиса требует небольшого времени простоя, в то время как развертывание новой версии сервиса в монолите требует обычно более медленного перезапуска всего монолит.
  • масштабируемость: каждый микросервис можно масштабировать независимо с помощью пулов, кластеров, сеток. Характеристики развертывания делают микросервисы отличным сочетанием для эластичности облака.
  • Модифицируемости: большая гибкость в использовании новых фреймворков, библиотек, источников данных и других ресурсов. Кроме того, микросервисы слабо связаны, модульные компоненты доступны только через их контракты и, следовательно, менее склонны превращаться в большой комок грязи.
  • управления приложение развитие усилия делятся между командами, которые меньше и работают более независимо.
  • дизайн автономии: команда имеет право использовать различные технологии, базы данных и моделей для разработки и реализации каждого микрослужб, и может изменить и перераспределить каждой конструирование самостоятельно

задачи

  • возможность развертывания: существует гораздо больше единиц развертывания, поэтому есть более сложные задания, сценарии, области передачи и файлы конфигурации для наблюдения за развертыванием. (По этой причине, непрерывной доставки и DevOps весьма желательны для проектов конструирование.)
  • производительность: услуги, скорее всего, придется общаться по сети, в то время как услуги в монолите может принести пользу из местных звонков. (По этой причине дизайн должен избегать "болтливых" микросервисов.)
  • Модифицируемости: изменения в контракте, скорее всего, повлияют на потребителей, развернутых в другом месте, в то время как в монолитной модели потребители, скорее всего, будут находиться в пределах монолита и будут развернуты в ногу со службой. Кроме того, усложняются механизмы повышения автономности, такие как конечная согласованность и асинхронные вызовы Микросервисы.
  • Контролепригодность: интеграционные тесты сложнее настроить и запустить, поскольку они могут охватывать различные микросервисы в разных средах выполнения.
  • управления: попытка управлять операции увеличивается, потому что есть больше компонентов времени выполнения, файлов журнала и взаимодействия точка-точка для наблюдения.
  • использование памяти: несколько классов и библиотек часто реплицируются в каждом комплект конструирование и общий объем памяти увеличивается.
  • во время выполнения автономии: в монолите объединена общая бизнес-логика. С микрослужб логика распространилась по микрослужб. Таким образом, при прочих равных условиях, более вероятно, что микросервис будет взаимодействовать с другими микросервисами по сети-это взаимодействие уменьшает автономию. Если взаимодействие между микрослужб подразумевает изменение данных, необходимость транзакционные границы дальнейшие компромиссы автономии. Хорошей новостью является то, что во избежание проблем автономии времени выполнения мы можем использовать такие методы, как возможная согласованность, событийная архитектура, CQRS, кэш (репликация данных) и выравнивание микросервисов с ограниченными контекстами DDD. Эти методы не присущи микросервисов, но были предложены практически любой автор я читал.

Как только мы поймем эти компромиссы, есть еще одна вещь, мы должны знать, чтобы ответить другой вопрос: что лучше, микросервисы или монолит? нам нужно знать нефункциональные требования (требования к атрибутам качества) приложения. Например, как только вы поймете, насколько важна производительность и масштабируемость, вы можете взвесить компромиссы и принять обоснованное дизайнерское решение.

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

например, в крупных магазинах, таких как Amazon, у вас может быть команда персонализации, электронная коммерция команда, команда инфраструктурных услуг и т. д. Если вы хотите попасть в микрослужб, Амазонки-это очень хороший пример. Джефф Безос сделал это мандатом для команд, чтобы общаться с услугами другой команды, если им нужен доступ к общей функциональности. Смотрите здесь для краткого описания.

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

Comments

    Ничего не найдено.