Что такое микрослужбы?

Завершено

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

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

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

Что такое архитектура микрослужб?

В архитектуре микрослужб большое приложение разделено на набор небольших служб. Каждая служба выполняется в собственном процессе и взаимодействует с другими процессами с помощью таких протоколов, как HTTP/HTTPS, WebSocket или Расширенный протокол очереди сообщений (AMQP). Каждая микрослужба реализует определенный комплексный домен или бизнес-возможности в пределах определенной границы контекста. Каждая микрослужба должна быть разработана автономно и должна быть независимо развернута. Наконец, каждая микрослужба должна владеть соответствующей моделью данных домена и логикой домена. Микрослужбы могут быть основаны на различных технологиях хранения данных (SQL, NoSQL) и различных языках программирования.

Ниже приведены некоторые ключевые характеристики микрослужб:

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

Зачем разрабатывать с помощью архитектуры микрослужб?

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

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

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

Diagram that shows how microservices can scale across virtual machines.

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

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

Какую роль играют контейнеры?

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

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

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

Diagram that shows multiple containers running on a single host.

Примечание.

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

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

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

Микрослужбы, которые вы создаете в этом модуле, будут выполняться в контейнере Docker, опубликованном с помощью .NET CLI.

Публикация контейнера пакета SDK для .NET

В .NET 7 пакет SDK для .NET получил возможность создавать образы контейнеров с помощью dotnet publish команды. Средства для этого делают кучу выводов на основе свойств проекта и его выходных данных. Затем .NET создает тот же образ, который будет создан Dockerfile. Для создания нового приложения и публикации его в виде образа может потребоваться всего несколько команд:

dotnet new webapi
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release

Предыдущие команды .NET CLI создают новый веб-API и публикуют приложение в качестве контейнера:

  • Назначение Linux в качестве ОС (-os linux).
  • Указание архитектуры x64 (-arch x64).
  • Использование конфигурации выпуска (-c release).

Вы можете управлять многими аспектами созданного контейнера с помощью свойств MSBuild. Как правило, если вы можете использовать команду в Dockerfile для задания какой-то конфигурации, можно сделать то же самое с помощью MSBuild.

Зачем создавать микрослужбы в .NET?

Начиная с .NET Core и продолжая текущие итерации, .NET создается для первого облака. Она выполняет кроссплатформенную платформу, поэтому образ Docker может быть основан на вкусе Linux, и код .NET по-прежнему выполняется. Корпорация Майкрософт уже создала образы .NET для Docker. Кроме того, .NET очень быстро. Веб-сервер Kestrel ASP.NET обычно опережает другие веб-серверы.

Docker

Docker — это платформа с открытым исходным кодом, которую можно использовать для автоматизации развертывания приложений в виде переносимых самодостаток контейнеров, которые могут выполняться в облаке или локальной среде. Docker также является компанией, которая продвигает и развивается эту технологию. Docker как организация работает в сотрудничестве с поставщиками облачных, Linux и Windows, включая Корпорацию Майкрософт.

Контейнеры Docker могут работать в любом месте: локально в центре обработки данных клиента, во внешнем поставщике услуг или в облаке. Контейнеры образов Docker работают в исходном формате в Linux и Windows.

Что такое образ?

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

Образ, когда он выполняется, становится контейнером. Контейнер представляет собой экземпляр образа в памяти.

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

Что такое Dockerfile?

Dockerfile — это текстовый файл, содержащий инструкции по созданию образа Docker. Файлы Dockerfile написаны на минимальном языке сценариев, предназначенном для создания и настройки образов. Dockerfiles также документирует операции, необходимые для создания образа, начиная с базового образа.

Чтобы создать образ Docker, содержащий приложение, обычно сначала определите базовый образ. Затем вы добавите дополнительные файлы и конфигурацию в базовый образ. Процесс определения подходящего базового образа обычно начинается с поиска готового образа в Docker Hub, который уже содержит исполняющую среду и все служебные программы и средства дистрибутива Linux, такого как Ubuntu или Alpine. Например, если у вас есть приложение ASP.NET, которое требуется упаковать в контейнер, корпорация Майкрософт публикует образ с именем mcr.microsoft.com/dotnet/aspnet , который уже содержит среду выполнения ASP.NET.

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

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

1.

Какой из следующих сценариев может стать кандидатом на использование микрослужбы?

2.

Какая цель имеет образ Docker в шаблоне архитектуры микрослужб?

3.

Какова разница между контейнером и изображением?