Рубрики
Uncategorized

Микросервисы — хорошее, плохое, а уродливый

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

Первоначально опубликовано в Deepu.ech Отказ

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

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

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

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

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

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

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

Это Статья подробнее о некоторых из этих шаблонов довольно красиво.

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

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

Слабая связь

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

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

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

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

Из-за такого свободного муфта каждый сервис может выбрать использовать базу данных/хранилище данных, которая более подходит, тогда как в монолите вы можете компромисс с одним типом базы данных. Например, услуга, занимающаяся большим количеством неструктурированных данных, может выбрать базу данных NoSQL во время работы с транзакциями или структурированными данными, могут выбрать базу данных SQL.

Быстрое цикл развития и выпуска

В хорошо реализованной архитектуре Microvice Microubice Gurnaround является быстрее и, следовательно, вы получаете лучшее время на рынок для новых функций и более легкого рефакторирования существующих функций.

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

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

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

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

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

Мелкозернистый масштабирование

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

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

Могут быть установлены более сложные и эффективные модели масштабирования. Критические услуги могут быть более эффективно масштабированы. Инфраструктура используется более эффективно.

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

Хорошо с любыми архитектурами также есть недостатки микросервисовых архитектур.

Сложность

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

  • Общий стек как разные компоненты могут иметь разные технологические стеки, заставляющие команду инвестировать больше времени в том, чтобы держать с ними.
  • Масштабирование более эффективно, но потребуется расширенные функции, такие как открытие услуг, DNS-маршрутизацию и так далее.
  • Связь между компонентами может потребоваться система обмена сообщениями (Queue, Pubsub, Store событий).
  • Бизнес-транзакции на распределенной системе могут включать обновление нескольких баз данных, создающих откаты отката более сложными и подверженными ошибкам.
  • Все приложение более сложно развернуть, как есть сложности с контейнерами, оркесторией и вовлеченными виртуализацией.
  • Требует сложной инфраструктуры. Чаще всего потребуются контейнеры (Docker), оркестров (Kubernetes) и несколько контейнеров JVM или приложений.

Тестирование интеграции

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

Размер команды и опыт

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

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

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

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

Накладные расходы

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

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

Общая стоимость первоначальной инфраструктуры может быть намного выше, чем аналогичный монолит.

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

Вы не должны использовать архитектуру микросервиса, если вы абсолютно не придется, не помните, что каждая приложение имеет одинаковые требования к масштабам, что и Netflix, Google, Amazon или Spotify. Многие из преимуществ, которые микросервисы предоставляют эти виды приложений, связаны с их чистой масштабами, которые могут не применимы к вам. Так вот несколько причин не выбирать микросервисы и, возможно, придерживаются монолитов.

  • Когда объем вашего приложения невелик, и вы знаете, что не собирается расти и превратиться в что-то вроде Facebook. Для четко определенных простых усаживает монолит всегда лучший пригодность. Примеры
    • Приложение CRUD для внутреннего использования в компании.
    • Небольшое приложение с очень нишей пользовательской базой. Как магазин для некоторых специальных предметов.
  • Когда время на рынок имеет решающее значение для нового приложения. Первоначальное время на рынке будет выше для микросервисов.
  • Когда размер вашей команды небольшой или средний опыт команды меньше. Лучше всего начать с монолита, когда вы маленькая или неопытная команда.
  • Когда ваш инфраструктурный бюджет ограничен. Хотя на долгосрочной перспективе Micrevice может помочь сэкономить деньги, в начале, это будет стоить вам больше.

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

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

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

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

Если вам понравилась эта статья, вы можете понравиться, мой книга также. Вы можете получить это от Упак и Amazon Отказ

Если вам нравится эта статья, пожалуйста, оставьте вроде или комментарий.

Если вы решите построить MicroverseCes Checkout Jipster, и мои ниже статьи не забудьте дать ей звезду на Github Отказ

  1. Создайте полный стек Microvice, используя язык домена Jipster до 30 минут
  2. Развертывание Jipster Micreadsies на Azure Kubernetes Service (AKS)
  3. Jipster Microsevices с сервисной сеткой ISTIO на Kubernetes

Вы можете следовать за мной на Twitter и LinkedIn Отказ

Обложка изображения фото Сергей Акулич на Бессмысленно

Оригинал: «https://dev.to/deepu105/microservices-the-good-bad-and-the-ugly-9gp»