Читать книгу «Архитектура цифрового мира» онлайн полностью📖 — Андрея Николаевича Трушкина — MyBook.
image







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

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


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

Следует отметить, что компании, осуществлявшие переход к микросервисной архитектуре, столкнулись с рядом сложностей. Компания Uber посредством своих Интернет-ресурсов (https://eng.uber.com/microservice-architecture/, 23.07.2020) достаточно подробно рассматривала проблемы, с которыми ей пришлось столкнуться. По ходу решения выявленных проблем ИТ-ландшафт компании неоднократно претерпевал серьезные изменения, иногда включавшие в себя полный пересмотр достаточно крупных элементов данного ландшафта, а также деталей проектирования. На ряде популярных Интернет-ресурсов профессиональной направленности размещались статьи многих компаний, содержавшие выражения яркого эмоционального характера по адресу микросервисной архитектуры. Основной претензией, высказанной в отношении архитектурной концепции, были резко возросшая сложность ИТ-решений, запутанность интеграций, трудности в организации управления бизнес-процессами, сложности с сопровождением созданного решения, невозможность выработать эффективную релизную модель. Анализируя проблемы, с которыми столкнулись участники рынка при переходе к микросервисной архитектуре, можно отметить следующие основные примеры неудачной реализации новых архитектурных концепций, которые и привели к упомянутым проблемам:

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

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

• Слишком крупная грануляция микросервисов. Является обратной стороной предыдущего пункта и близка к ситуации «распределенного монолита». В качестве микросервисов выделяется несколько подсистем, которые содержат большое количество логики и, по сути, представляют собой полноценные ИТ-системы предыдущего архитектурного поколения, а не микросервисы.

• Большое количество точечных интеграций. При прямом взаимодействии микросервисов между собой возможна избыточная сложность построения интеграционных взаимодействий. В качестве примера можно привести обновление web-интерфейса приложения, требующего для выдачи данных с последующим представлением пользователю последовательного вызова 4—5 микросервисов. Обеспечить высокую производительность (необходимую для использования в удаленных каналах обслуживания) подобным образом спроектированного решения зачастую проблематично.


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

Первым стал продуктовый подход к архитектуре, позволивший эффективнее обеспечить ее применение в сочетании с гибкими методологиями разработки. Традиционно при проектировании архитектурных решений внимание уделялось информационным системам, но в рамках микросервисной архитектуры данное понятие потеряло свое предыдущее значение. Манифест Agile провозгласил ориентацию ИТ на решение проблем заказчиков, максимально быстрое создание минимально жизнеспособных продуктов (MVP), декларируя открытость ИТ миру. Архитектура не могла оставаться в стороне от подобных веяний, а потому также сменила фокус внимания на продукты, имеющие конкретное значение для заказчиков. Концепция продуктов в архитектуре будет рассмотрена в соответствующей главе. Отметим, что в случае микросервисной архитектуры было внесено предложение, получившее популярность благодаря успешной практике применения, проектировать новые ИТ-решения таким образом, чтобы микросервисы (или их группы) отвечали бы за автоматизацию продукта, представляющего ценность для заказчика. Таким образом, соответствующий микросервис (или группа микросервисов) могли бы разрабатываться действительно небольшой командой, сохраняя характеристики трудоемкости, представленные выше. Микросервисы, отвечающие за продукт, могут поддерживать режим сильной связности между собой, при этом их взаимодействие с микросервисами, обеспечивающими автоматизацию логики других продуктов, ограничено и подчиняется принципам слабой связности. Продуктами для финансовой сферы, на примере которой происходит рассмотрение в настоящей главе, могут служить вклады, накопительные счета, кредиты, банковские гарантии. Пример продуктовой микросервисной архитектуры представлен на Рисунке 9.

На Рисунке 9 показаны два банковских продукта (кредит юридическому лицу и банковская гарантия), автоматизация которых осуществляется в соответствии с микросервисной архитектурой. Микросервисы, осуществляющие автоматизацию одного продукта, обладают множеством связей между собой, при этом количество связей между микросервисами, отвечающими за автоматизацию различных продуктов, минимизировано. Таким образом осуществляется движение к атомарности реализации соответствующей продуктовой функциональности.


Рисунок 9. Пример продуктовой микросервисной архитектуры


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

Нельзя не упомянуть, что само понятие событийно-ориентированной архитектуры (event-driven architecture, EDA) и ее концепции старше, нежели микросервисная архитектура. В свое время методики EDA конкурировали с SOA за право считаться наиболее распространенными и применимыми при автоматизации различных областей человеческой деятельности, но не приобрели аналогичной популярности. Более того, зачастую концепция интеграции компонентов информационных систем и систем между собой посредством событий (основополагающая методика EDA) подменялась на практике обычным асинхронным обменом, представлявшим собой отложенные команды на исполнение. Можно сказать, что массовый переход к микросервисной архитектуре стал «вторым дыханием» для EDA. Решение таких задач как слабая связность компонентов между собой, снижение числа прямых интеграций, масштабируемость и надежность программных комплексов, независимость исполнения бизнес-функций, не терявших своей актуальности при переходе к микросервисной архитектуре обеспечивалось практиками EDA. Рассмотрим более подробно применение EDA в микросервисной архитектуре.

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

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

• Фиксация событий. События отражают уже случившиеся изменения в микросервисах или системах, а не являются отложенными командами на исполнение.

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

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

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

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

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

• Возможность самопотребления. Микросервисы могут сами реагировать на опубликованные ими события. Такая возможность должна обеспечиваться при реализации.


Пример решения, выстроенного в соответствии с концепциями микросервисной архитектуры, продуктового подхода и EDA, представлен на Рисунке 10.


Рисунок 10. Пример продуктовой микросервисной архитектуры в сочетании с EDA


На Рисунке 10 показаны два банковских продукта, автоматизируемых в соответствии с принципами микросервисной архитектуры и EDA. Основной интеграционный поток осуществляется посредством публикации событий, управление которыми осуществляет платформа событийного обмена, представляющая собой внешний по отношению к микросервисам технический компонент. Отличие указанной платформы от ESB-решений эпохи SOA заключается в строго техническом характере решения и «пассивном» положении платформы в ИТ-ландшафте – она не оказывает непосредственного концептуального влияния на интегрируемые микросервисы. При этом прямые интеграционные взаимодействия между микросервисами также присутствуют, но минимизированы.

Сочетание микросервисной архитектуры, продуктового подхода и EDA позволило многих компаниям провести кардинальную трансформацию своего ИТ-ландшафта, осуществив новый революционный переход, и значительно повысить качество предлагаемых услуг, обеспечить высокую скорость внесения изменений и вывода продуктов на рынок. При этом на новый качественный уровень вышли производительность и надежность их решений. Соответствующие архитектурные подходы используются в LinkedIn, Uber, Netflix, Monzo Bank и других технологических лидерах современности.

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

Но следует обратить внимание и на другой важный аспект революционного перехода – на mindset. По ходу настоящей главы было проиллюстрировано развитие подходов к архитектуре, показано, какой скачок произошел за двадцать лет. На фоне многих других отраслей человеческой деятельности, также осуществлявших свои революционные и эволюционные переходы, ИТ развивается очень быстро. И mindset людей, задействованных в ИТ, далеко не всегда успевает за изменениями. Вопросы развития архитектуры являются наглядным показателем данного явления.

Многие компании, активно развивающиеся в различных направлениях человеческой деятельности, имеют давнюю по меркам ИТ историю, что непосредственно сказывается на уровне их автоматизации. В России крупнейшие корпорации осуществляют автоматизацию своей деятельности 25—30 лет, в США и Западной Европе этот процесс даже более длителен. По ходу развития возникает ситуация сосуществования ИТ-решений различных поколений: рядом сосуществуют монолитные решения, многие из которых разработаны с использованием устаревших технологических стеков, сервис-ориентированные решения, есть наработки с использованием микросервисной архитектуры. Нередко в профессиональном экспертном сообществе поднимается вопрос, зачастую инициируемый и заказчиками решений по автоматизации, который заключается в том, какой путь выбрать в части архитектурных преобразований: эволюционный или революционный. В случае перехода организации, обладающей большим объемом унаследованного (legacy) ИТ-ландшафта вопрос можно конкретизировать следующим образом: стоит ли дробить системы предыдущего поколения на микросервисы, либо стоит создавать новый ИТ-ландшафт фактически с нуля.

Первый из представленных способов видится более простым, управляемым и (ключевое заблуждение) дешевым. К сожалению, большая часть комментариев негативного характера в адрес микросервисной архитектуры, о которых говорилось выше, обусловлена именно приоритетом данному варианту развития (эволюционному). На первый взгляд, ситуация кажется простой: провести анализ созданных ранее решений, выделить в них те элементы, которые могут представлять собой микросервисы, а далее провести реализацию очерченного функционала в соответствии с намеченным планом и на новом технологическом уровне. При этом зачастую к новым решениям применяется mindset прошлого – типовым вариантом разбиения информационных систем на микросервисы стала реализация функциональных подсистем в формате отдельных микросервисов. При этом подсистемы зачастую были сильно связаны между собой, содержали большое количество перекрестных вызовов, так называемые «божественные» объекты и функции (содержащие избыточное количество данных и функционала соответственно). Результатом обычно был рассмотренный по ходу настоящего раздела «распределенный монолит». Снижалась производительность систем, их надежность и управляемость ИТ-ландшафта организаций в целом. Релизные модели и циклы предыдущих поколений не позволяли эффективно управлять жизненным циклом изменений, объемы регрессионного тестирования существенно возрастали. Для устранения возникавших проблем приходилось расширять штат специалистов, решать возникшие проблемы механическим увеличением трудозатрат; альтернативой становился революционный переход (при этом существенные временные, трудовые и финансовые ресурсы уже были вложены в попытку перехода эволюционного).

Революционный переход предполагал создание нового ИТ-ландшафта параллельно существующему. С целью исключения нарушения стабильности функционирования производственных и бизнес-процессов текущие информационные системы продолжали выполнять задачи, в то время как по мере создания и развития нового ИТ-ландшафта в парадигме микросервисной архитектуры новый функционал создавался (переводился) в рамках него. Перевод осуществлялся по бизнес-функциям, а не по структурам предыдущих архитектурных поколений. По итогам замещения функционала, выполняемого унаследованным ИТ-ландшафтом, последний выводился из эксплуатации. Потенциальные проблемы mindset наблюдались и в случаях революционного перехода: соблазн следовать шаблонам прошлого, идти проторенным путем часто превалировал над новыми концепциями. Но при создании нового ИТ-ландшафта «с нуля» выявление проникновения практик предыдущих поколений производилось на более ранней стадии, нежели в случае эволюционного перехода, в связи с чем могло оперативно устраняться. Именно таким путем шли лидеры технологического рынка.

Таким образом, варианты революционного и эволюционного развития архитектуры можно уподобить Сцилле и Харибде из «Одиссеи»: проход рядом со скалой Сциллы грозил Одиссею и его спутникам гибелью части экипажа, Харибда же – общей гибелью всех мореходов. Именно поэтому главным аспектом архитектурного перехода, развития архитектуры являлся и является mindset, который должен быть направлен строго на революционное развитие.

1
...
...
9