Рубрики
Uncategorized

Использование Gateways API для облегчения вашего перехода от монолита до микросервисов

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

В моем консультировании я удаюсь во многие инженерные команды, которые мигрируют из монолитной приложения к приложению на основе микроэвиксов. «И что?» Вы можете сказать: «И небо голубое», и да, хотя я понимаю, что этот шаблон миграции почти становится клише, часто бывают аспекты миграции забыты. Я стремиюсь говорить о одной из этих тем сегодня — роль краевого шлюза или шлюза API.

Мигрировать на микросервисы

Как правило, в начале миграции очевидные темы дают много внимания: доменное моделирование через определение Дизайн, управляемый доменом вдохновил » ограниченные контексты «Создание Непрерывная доставка Трубопроводы, автоматизированные Предоставление инфраструктуры , Усиление Мониторинг и регистрация и посыпная в некоторых блестящих новых технологиях ( Docker , Kubernetes , И, возможно, в настоящее время Сервисная сетка или Два ?). Однако менее очевидные аспекты могут вызвать большую боль, если они игнорируются. Дело в точке — о том, как организовать эволюцию системы и миграцию существующего пользовательского трафика. Хотя вы хотите реформировать существующую архитектуру приложений и потенциально принести некоторые новые технологии, вы не хотите нарушать ваши конечные пользователи.

Как я писал в предыдущей статье « непрерывная доставка: как может помочь шлюз API (или помешать) «Узоры, такие как« танцующий скелет », могут значительно помочь в доказывать концевую жизнеспособность новых приложений и инфраструктуру. Тем не менее, подавляющее большинство базового взаимодействия клиента направляется через единую точку в вашей системе — входной или кромковой шлюзе — и, следовательно, для включения экспериментов и эволюции существующих систем вам нужно будет сосредоточиться на значительном времени и усилиях.

Каждое (пользовательское) путешествие начинается на краю

Я, очевидно, не первый человек, с которым нужно говорить о необходимости эффективного краевого решения при движении к приложению на основе микросервисов. На самом деле, в предложенном Phil Calcado, предложенном расширении оригинала Мартина Фаулера Минервисты Предварительные условия Статья — Миндервисты Кальдодо Предварительные условия — Его пятое обязательное условие — « легкий доступ к краю ». Фил разговоры, основываясь на его опыте, что многие организации первые навесы в развертывании нового микросервиса наряду с их монолитом состоят из простого воздействия на обслуживание непосредственно в Интернет. Это может хорошо работать для одной (простой) обслуживания, но подход имеет тенденцию не масштабировать, а также может заставить вызов клиентам прыгать через обручи в отношении авторизации или агрегации данных.

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

Вы можете уже использовать краевые шлюз или обратный прокси-сервер — например, nginx или haproxy — поскольку они могут обеспечить много преимуществ при работе с любым типом бэкэндской архитектуры. Особенности ОСОБЕННОСТИ, как правило, включают прозрачную маршрутизацию для нескольких компонентов бэкэнда, перезаписи заголовка, завершение TLS и т. Д., И скрещивание проблем, независимо от того, как в конечном итоге требуются запросы. Вопрос, который нужно задать в этом сценарии, заключается в том, хотите ли вы продолжать использовать этот шлюз для реализации ваших микросервисов, и если вы сделаете, следует ли использовать таким же образом?

От VMS к контейнерам (через оркестровку)

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

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

  • Используйте существующее монолитное приложение для выступления в качестве краевого шлюза, который направляет трафик к монолиту или новым сервисам. Здесь можно реализовать любой вид логики маршрутизации (потому что все запросы путешествуют через монолит), а вызовы AUTHN/AUTHZ могут быть сделаны в процессе
  • Разверните и эксплуатируйте пограничный шлюз в существующей инфраструктуре, которая направляет трафик на основе URI и заголовков к монолиту или новым услугам. AUTHN и AUTHZ, как правило, делаются путем вызова монолита или по рефрактивной службе безопасности.
  • Разверните и эксплуатируйте и эксплуатацию пограничных шлюзов в новых инфраструктуре Kubernetes, которая направляет трафик на основе УРИС и заголовков в монолит или новые услуги. AUTHN и AUTHZ, как правило, делают вызов на повторную службу безопасности в Kubernetes.

Выбор откуда развертывать и управлять вашим краевым шлюзом включает компромиссы:

После того, как вы сделали свой выбор на том, как реализовать Edge Gateway, следующее решение, которое вы сделаете, — это то, как развивать вашу систему. В целом вы говорят, вы можете либо попробовать, и «задушить» монолит как есть, или вы помещаете «монолит-в ябр» и начните отснуть здесь.

Душит монолит

Мартин Фаулер написал отличную статью о принципах Узор для приложения Brancler И хотя написание превышает десять лет, применяются те же руководящие принципы при попытке мигрировать функциональность из монолита на меньшие услуги. Шаблон в его ядре описывает, что функциональные возможности должны быть извлечены из монолита в виде услуг, которые взаимодействуют с монолитом через RPC или подобные отдыхам « швы » или через Обмен сообщениями и событиями Отказ Со временем функциональные возможности (и связанный код) в монолите выходят на пенсию, что приводит к новым микросервисам «задушенным» существующей кодовой базой. Основной недостаткой с этой картины заключается в том, что вам все равно придется поддерживать свою существующую инфраструктуру наряду с любой новой платформой, которую вы развертываете свои микросервисы, чтобы до тех пор, пока монолит по-прежнему в обслуживании.

Одной из первых компаний, которые будут похожи по глубине использования этой картины с микросервисами, было Groupon, обратно в 2013 году, с « I-Tier: демонтаж монолит ». Из их работы много уроков, но нам определенно не нужно писать пользовательский модуль Nginx в 2018 году, как первоначально Груссон сделал с «затиркой». Теперь современные шлюзы API с открытым исходным кодом, как Посол и Трафик Существуют, что обеспечивает эту функциональность, используя простую декларативную конфигурацию.

Monolith-In-A-Box: упрощая непрерывную доставку

Все более распространенный шаблон, который я вижу с командами, мигрирующими на микросервисы и развертывание на Кубернану, это то, что я называю «монолитным в ящике». Я говорил об этом рядом с Ник Джексон Когда мы поделились историей миграции монолитного монолита NOTONTHEHIGHSHSTREET.com ruby на приложении Rails — ласково называют Mononoth — к архитектуре, основанную на микросервизе, еще в 2015 году на конференции контейнера.

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

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

Расставание мысли

При переезде с виртуальной машины (VM) инфраструктуру в облачную нативную платформу, такую как Kubernetes, она стоит вложить время в реализации эффективного решения Edge/Inhents, чтобы помочь с миграцией. У вас есть несколько вариантов для реализации этого: использование существующего монолитного приложения в качестве шлюза; развертывание или использование пограничного шлюза в существующей инфраструктуре для маршрутизации трафика между текущими и новыми услугами; Или развертывание краевых шлюзов на новой платформе Kubernetes.

Развертывание краевых шлюзов в Kubernetes может обеспечить больше гибкости при реализации миграционных шаблонов, таких как «монолит-в-коробке», и может сделать переход к полноценному приложению на основе микроэнергии намного быстрее.

Этот пост был первоначально опубликован на Посол блог к Даниэль Брайант

Оригинал: «https://dev.to/datawireio/using-api-gateways-to-facilitate-your-transition-from-monolith-to-microservices-4n4g»