Чтобы перейти на микросервисную архитектуру, разработчику необходимо изучить специальные технологии, которые применимы именно для такой разработки приложений. Ниже опишем базовые технологии, с которыми полезно будет ознакомиться разработчикам — это Docker и Kubernetes, REST API, бессерверные решения, а также облачные вычисления и DevOps.
Контейнеризация приложений (Docker и Kubernetes)
Микросервисы — это компоненты небольшого размера. Необходимо отметить, что размер микросервисов не ограничивается. Микросервисная архитектура подразумевает принцип контейнеризации приложений. Производится это с помощью платформы Docker, которая помогает упаковывать приложения в контейнеры.
Контейнеры представляют собой стандартизированные исполняемые компоненты, в них происходит упаковка исходного кода приложения вместе с библиотеками ОС и зависимостями, необходимыми для исполнения кода в любой среде.
С помощью платформы Docker разработчик получает необходимый инструментарий для создания, развертывания, исполнения, обновления и остановки контейнеров. Docker предполагает использование простых команд и средств автоматизации на основе одного API.
Любой отдельный контейнер гораздо меньше и проще, чем виртуальная машина. Контейнеры хорошо отвечают всем требованиям микросервисной архитектуры.
С помощью контейнера приложение можно упаковать и передать на сервер, на котором оно должно будет работать, причем именно в таком виде, как оно работало на тестовом сервере разработчика. Контейнер служит как бы «упаковкой», которая «защищает» приложение. В контейнеры, как правило, упаковывают и микросервисы. При переносе их из тестовой среды в рабочую — все работает, как и задумано разработчиками, без проблем и ошибок.
Однако, существует следующая проблема: управлять деятельностью больших групп контейнеров достаточно непросто. Чтобы решить эту задачу существует инструмент для оркестрации контейнеров — Kubernetes.
Kubernetes представляет удобные функции по управлению контейнерами, всего лишь с помощью нажатия одной кнопки можно выполнить следующие действия:
обновить часть приложения;
«откатить» обновления назад;
добавить ресурсы там, где их нехватка;
убавить лишние ресурсы, где их избыток.
Ниже рассмотрим, какие преимущества дает Kubernetes для R&D компаний при разработке и внедрении веб-приложений.
1. Микросервисы и Kubernetes хорошо интегрируются в уже существующую ИТ-инфраструктуру компании. ИТ-специалистам не нужно перестраивать полностью работу в компании, чтобы интегрировать Kubernetes и начать быстро создавать новые ИТ-продукты.
2. Ускорение вывода новых продуктов на рынок. Kubernetes служит для централизованного управления контейнерами. Он помогает ускорению и упрощению вывода новых приложений на рынок, а также помогает построить эффективный процесс разработки и тестирования веб-приложения.
3. Использование Kubernetes дает возможность автоматически распределять ресурсы, чтобы без проблем встретить рост трафика и пользователей, когда приложение будет сильно востребовано на рынке. В традиционной ИТ-инфраструктуре для этих целей докупают дорогостоящее оборудование. Однако, при снижении нагрузки на сервера, оно потом может простаивать и не окупаться. При использовании облачных технологий просто происходит выделение дополнительных ресурсов на нужное время. Чем быстрее и проще эти ресурсы можно получить, тем скорее система перестроится под новую нагрузку, а значит снижается риск ошибок и сбоев. Таким образом, с использованием Kubernetes масштабирование ИТ-системы происходит значительно проще, быстрее и эффективнее.
4. Kubernetes облегчает внедрение и использование таких передовых технологий, как облачные сервисы, машинное обучение, большие данные, искусственный интеллект (AI). Например, Kubernetes позволяет легко и просто перенести веб-приложение в облако, а далее можно управлять им как on premises, так и в облачной среде. Это преимущество востребовано компаниями, использующими гибридную инфраструктуру (тестовые среды — в облаке, основная разработка ведется на собственных серверах).
5. В Kubernetes поддерживается специальная функция, которая называется — федерация кластеров (где один кластер — группа серверов в составе Kubernetes). Это дает возможность синхронизации работы кластеров, находящихся в разных облаках и управления ими. К примеру, для машинного обучения необходимы большие вычислительные ресурсы. Kubernetes дает разработчикам огромные возможности по эффективному использованию ресурсов и позволяет проводить вычисления внутри кластера. Назначение Kubernetes — это работа с высокими нагрузками, поэтому он идеально подходит для Data Science, работы с большими данными, хорошо интегрируется с облачными Big Data-решениями.
REST API
REST API (Representational State Transfer, «передача состояния представления») в микросервисных архитектурах позволяет обеспечить связь компонентов и интеграцию приложений.
API (программный интерфейс приложения) — это такой функционал, обеспечивающий доступ одного приложения к ресурсу другого приложения (сервиса). Клиент — это приложение, которое запрашивает доступ, сервер — приложение, которое обладает ресурсом.
В REST API применяются запросы HTTP, для выполнения стандартных функций базы данных (создание, чтение, обновление и удаление записи). Представлением ресурса называется состояние ресурса в любой момент времени («отметка времени»). Данная информация предоставляется клиенту в любом формате, например JavaScript Object Notation (JSON) или же это может быть HTML, XLT, Python, PHP, текстовый формат. Формат JSON не зависим от языка программирования, он читаем как для человека, так и для компьютера.
Бессерверные решения (Serverless)
Микросервисную архитектуру иногда путают с бессерверными решениями, так как принцип функционирования Serverless схожий с микросервисами. В микросервисной архитектуре и в Serverless применяются автономные модули, запускаемые для выполнения задач в контейнерах, они скрыты от конечного пользователя. Принципиальное различие в том, что что микросервисы работают по схеме «запрос-ответ». В бессерверных решениях функции однонаправленные (только запрос или только ответ) и они помещаются в очереди.
В случае с Serverless применяется подход FaaS (функция как услуга), где единица исполнения — это даже не сервис, а функция, состоящая из нескольких строк кода.
Облачные решения и DevOps
Как правило, микросервисы применяют совместно с облачными вычислениями. Делают это не потому, что это новая и модная технология.
Базовый принцип работы микросервисов основывается на увеличении эффективности за счет снижения затрат на развертывание. Веб-приложение создано из независимых друг от друга компонентов, каждый из которых можно масштабировать отдельно. Этих преимуществ можно добиться и при использовании собственной локальной инфраструктуры. Однако, с точки зрения экономической выгоды — лучше применять облачную инфраструктуру с оплатой по факту использования.
С ростом сложности микросервисной архитектуры необходимо внедрять DevOps — методологию активного взаимодействия специалистов по разработке со специалистами по технической поддержке. Делать это нужно с целью обеспечения более высокого качества ИТ-продукта.
Итого
В завершении нашей статьи, дадим краткие рекомендации для разработчиков ПО. На самом раннем этапе — планирования будущего приложения и написания технического задания на разработку приложения, стоит определиться с архитектурой. И выбирать микросервисную архитектуру необходимо не потому, что это модно и современно, а исходя из собственных целей и задач.
Перечислим случаи, когда нужно применять микросервисы:
Немалое количество модулей, которые взаимодействуют друг с другом (характерно для приложений в сфере корпоративного обучения, по управлению проектами, приложений электронной коммерции и т.д.).
Много кода, код может насчитывать миллионы строк, в данном случае приложению не подходит монолитная архитектура.
Для некоторых корпоративных приложений критичен механизм непрерывной доставки, а также своевременности выпуска обновлений и новых релизов.
При планировании разработки высоконагруженного приложения и прогнозировании высокого уровня трафика. Здесь микросервисы и облачные решения — это наиболее подходящий вариант.
В рамках веб-приложения могут быть совершенно разные требования к ресурсам. К примеру, у различных модулей будут разные требования к мощности ЦП, памяти и т.д.
Приложение в монолитной архитектуре долго запускается, а при переходе на микросервисы вынужденные простои снизятся.
Для разработки некоторых приложений требуется большая команда разработчиков. При переходе на микросервисную архитектуру, гораздо эффективнее управлять командой, при разбивке ее на небольшие группы. Также намного проще брать новых специалистов, они быстрее погружаются в работу, без длительного изучения функционала всего приложения.
Комментарии (5)
panzerfaust
23.08.2022 20:20+9Данная информация предоставляется клиенту в любом формате, например
JavaScript Object Notation (JSON) или же это может быть HTML, XLT,
Python, PHPHaskell, Algol, Kafka, клинопись, волк, дед. Я же правильно понял, что здесь просто рандомные слова перечисляются?
Я пожалуй заберу весь абзац "rest api" и буду на собеседованиях предлагать кандидатам найти в нем все ошибки.
MechanicusJr
23.08.2022 20:23согласен. Единственная польза от статьи - это предлагать ее кандидатам еще до интервью, и просить найти в ней как можно больше ошибок во всех частях.
dopusteam
23.08.2022 20:39+4Заходит как–то раз Сеошник в бар, ресторан, купить алкогольные напитки, клубы, лучшие бары в Москве, заказать банкет в ресторане.
kahi4
23.08.2022 21:34+1Front end dev here:
Docker
Все описанные вещи прекрасно делаются .deb пакетом. Да даже .tar.gz на худой конец. Про изоляцию ни слова
kubernetis
Все это делается ansible.
В традиционной ИТ-инфраструктуре для этих целей докупают дорогостоящее оборудование.
а кубернетис, видимо, ресурсы из воздуха берет? И вообще, развертине кубернетис на собственной инфраструктуре, тогда и поговорим.
Kubernetes облегчает внедрение и использование таких передовых технологий, как облачные сервисы, машинное обучение, большие данные, искусственный интеллект (AI).
Чем облегчает? Мне, как программисту, нужно указать new AI.connect({ host: ENV.AI_HOST }) и мне без разницы какой там хост будет. Да и на практике я знаю что обычно это может делаться проще, но если нашим devops сказать «я хочу редис», они уходят на две недели и возвращаются с «не, мы решили не делать редис».
Приложение в монолитной архитектуре долго запускается, а при переходе на микросервисы вынужденные простои снизятся.
«хех» сказал erlang, ну а если серьезно - это не такая уж и большая проблема. Запустить прорву всех микросервисов локально займёт больше времени и ресурсов. Можно для приличия было хотя бы сказать про continues delivery и что у громадного монолита юнит тесты час прогоняться будут, но тут тоже есть пути обхода.
При планировании разработки высоконагруженного приложения и прогнозировании высокого уровня трафика. Здесь микросервисы и облачные решения — это наиболее подходящий вариант.
Именно поэтому на каждой hi-load конференции все со своим Hadoop носятся, а сервисы типа STUN и TURN и особенно медиасерверы делают на Bare metal.
Ладно, гораздо более знающие люди уже высказались, кубернетис и докер - замечательные технологии, микросервисы - отличный подход, но всё это выбирается из других побуждений и продажная статья у вас не удалась.
MechanicusJr
Ни девопс ни рест апи не являются "технологиями".
Ничего подобного. Каждый случай надо считать отдельно
Не всегда. задержка на передачу данных между подами / нодами может потратить начисто любой выигрыш.
Ничего подобного. Необходим расширенный мониторинг сотни подов, и это мы еще про шину не упомянули и балансеры.
Ничего подобного. Разработка приложений от того, как оно в итоге будет выкаено - зависит никак.
Лол кек.
Статья - ядреная смесь булшита из 2015 года, ошибок и частных случаев. Причем ошибки в каждой, буквально каждой строке.