Восстановите эти старые монолитные приложения, используя архитектуру микросервисов.
Разработка приложений долгое время подразумевала монолитную архитектуру. Разрабатывать и развертывать приложение в одном месте имело смысл, и оно прекрасно работало, пока не сломалось. Цифровые преобразования и ускорение темпов развития рынка сделали монолитные приложения несколько устаревшими. Монолитные приложения основаны на унифицированной архитектуре. Код обычно пишется на одном конкретном языке, и все возможности очень тесно связаны. Каждая функция в монолитном приложении сильно зависит от другой, что делает приложения чрезвычайно уязвимыми к сбоям в случае возникновения ошибки. Любая ошибка может вывести из строя все приложение, а отслеживание и исправление означает, что приложение останется недоступным, пока ошибка не будет устранена. Это требует времени, поскольку в монолитных приложениях отсутствует изоляция сбоев.
Монолитные приложения требуют больше времени для разработки и развертывания, поскольку все команды должны работать над одним и тем же кодом, а параллельная работа в этой архитектуре, мягко говоря, сложна. В эпоху непрерывной интеграции и непрерывного развертывания (CI/CD) время, необходимое для разработки монолитных приложений, делает архитектуру похожей на древний артефакт. Клиенты хотят более быстрой разработки и развертывания новых обновлений, и для этого разработчикам необходимо учитывать платформу микросервисов.
Микросервисы: большие перспективы
В последние годы популярность архитектуры микросервисов стремительно растет. Этот новый способ разработки приложений и управления ими стал следующим большим прорывом. Разработчики очарованы микросервисами, потому что это решение любой проблемы, которую представляют монолитные приложения. Приложения на основе микрослужб состоят из различных слабо связанных компонентов, называемых службами. Эти сервисы представляют собой отдельные блоки функциональности, имеющие отдельные среды, полностью отгороженные друг от друга стеной. Каждая услуга имеет определенную задачу и разрабатывается специальной командой. Сервисы могут создаваться с использованием различных технологических стеков и взаимодействовать друг с другом с помощью API. Это означает, что несколько команд могут работать над разными сервисами параллельно, что ускоряет доставку.
Поскольку приложения слабо связаны, ошибка в одной службе не влияет на другие и, в конечном счете, не приводит к сбою всего приложения. Кроме того, ошибку можно легко отследить до ее службы, которую команда, ответственная за эту конкретную службу, может немедленно исправить, чтобы повысить доступность приложения. Есть также преимущество совместного использования кода и возможности повторного использования, что означает, что конкретный сервис может использоваться в другом проекте, который требует той же функциональности.
Большой переход к микросервисам
Архитектура микросервисов привлекательна для предприятий, стремящихся увеличить скорость доставки в геометрической прогрессии. Однако переход от монолита к микросервисам — непростая задача. Для этого требуется время. Велик риск провала. И большинству организаций это не понравится.
Итак, как сделать переход без перезаписи?
Ответ — рефакторинг приложения. Вам нужно взять ваши традиционные приложения, разделить их на отдельные компоненты (сервисы), а затем связать их вместе. Внешний интерфейс приложения останется или, по крайней мере, останется прежним, но серверная часть будет полностью переработана.
Путь к высокой доступности
Модернизация приложений — не быстрый процесс. Команды доставки должны стремиться к декомпозиции приложения по одной функции за раз при переносе этой функции в службу, которая обеспечивает плавный переход и снижает риск сбоя. Давайте рассмотрим семь шагов по переносу вашего монолита на микросервисы, избегая при этом сбоев.
1. Начните с малого
Команды доставки должны начать с небольших функциональных возможностей приложения. Эти функции могут быть относительно слабо связаны с остальной частью приложения. Разработчики могут использовать эти функции в качестве полигона для создания конвейера непрерывной интеграции. Команды эксплуатации могут сделать то же самое, создав базовую инфраструктуру для этих и будущих сервисов. Такой подход снижает риск и влияние сбоев.
2. Удалите зависимости
Цель состоит в том, чтобы перейти от монолита к микросервисам. Это требует устранения любых зависимостей сервисов от монолита. Сервисы должны быть построены таким образом, чтобы сделать их независимыми. Монолиты медленны и дороги, тогда как микросервисы предлагают преимущество более быстрой доставки. Это связано с тем, что различные независимые сервисы могут быть разработаны и выпущены быстро. Однако, если эти службы не являются полностью независимыми, это может вернуть весь процесс на круги своя, поскольку этим службам приходится ждать монолита.
Хотя наличие независимых сервисов не всегда возможно. Иногда из-за отсутствия четких концепций предметной области службы могут в какой-то степени зависеть от монолита. В этом случае разработчики должны убедиться, что эти сервисы содержат уровень защиты от коррупции, чтобы концепции монолита не просачивались в указанные сервисы.
3. Запачкайте руки
После разделения первоначальных и простых функций разработчики столкнутся с более сложными функциями, распределенными по всему приложению. Разработчики не могут просто перенести их. Вместо этого им придется деконструировать эти функции и переопределять их должным образом и постепенно.
В таком случае разработчикам не следует случайным образом переносить эти функциональные возможности, поскольку они могут привести к чему-то худшему, чем то, с чего они начали. Разработчики должны оценить эти функции и реорганизовать их таким образом, чтобы они не зависели от монолита, а наоборот.
4. Учитывайте свои данные
Разработчики в конечном итоге будут искать легкую добычу. Функциональные возможности, такие как пользовательский интерфейс, могут иметь приоритет в процессе миграции, но наиболее важной возможностью, которую необходимо отделить или отделить от монолита, являются данные. Централизованно хранящиеся данные являются препятствием при миграции и действуют как препятствие, препятствующее реальной миграции монолита, поскольку распределение данных является ключевым принципом микросервисов. Следовательно, перенос данных должен быть приоритетным. Должны быть реализованы стратегии, помогающие в переносе данных без прерывания работы критически важных систем.
5. Сначала отделите быстро меняющиеся функции
Разработчики должны оценивать различные функции и отдавать предпочтение тем, которые меняются больше всего. Это потому, что именно эти функционеры больше всего замедляют работу монолита. Если они разделены, изменения можно легко вносить без ущерба для производительности приложения. С помощью бизнес-менеджеров разработчики должны выбрать функциональные возможности, которые наиболее подвержены изменениям в будущем, и работать над их миграцией, чтобы получить максимальную выгоду.
6. Подумайте о переписывании функций
Все функции должны быть пересмотрены. Разработчики должны убедиться, что они не пытаются перенести устаревший код в новую систему. Устаревшему коду могут быть годы, что означает, что он построен на устаревших стандартах, что делает его непригодным для повторного использования. Кроме того, этот код может содержать тонны шаблонных кодовых блоков. Этот код может не иметь четких концепций и границ предметной области. Переписывание различных частей приложения с нуля поможет разработчикам следовать современным рекомендациям, применимым к микросервисам. Теперь у разработчиков будет возможность выбрать язык программирования или стек технологий, которые лучше всего подходят для конкретной службы.
7. Не стремитесь к небольшим услугам с самого начала
Нелегко установить и поддерживать границы в монолитном приложении, поскольку все очень тесно связано. Это затрудняет принятие решения о том, насколько детализированным должен быть каждый новый микросервис. Разработчики могут совершить ошибку, разделив свои микросервисы на очень маленькие сервисы. Это может привести к чрезмерно сложной сети услуг, которая имеет высокие трения и в конечном итоге приведет к большому налогу на управление. Разработчикам может быть трудно отслеживать ошибки в этом сложном лабиринте сервисов. По этим причинам имеет смысл начать с сервисов, которые не слишком детализированы и просты в управлении. После миграции службы могут быть далее разбиты на более мелкие службы. Это поможет избежать ненужной сложности и беспорядка.
Переход на микросервисы: используйте постепенный подход
Процесс миграции монолитов в микросервисы непрост. Группы доставки должны быть готовы взять на себя задачу постепенного переноса приложений, чтобы переход был плавным. Этот итеративный подход гарантирует, что каждое новое приращение будет на шаг приближать организации к их цели — гибким распределенным приложениям, созданным в соответствии с архитектурой микросервисов.