Эталонное приложение на базе контейнеров и архитектуры микросервисов

Хабр, привет. Сегодня рассказываем вам об эталонном кроссплатформенном приложении .NET Core от Microsoft, созданном на основе упрощенной архитектуры микросервисов и контейнеров Docker. В статье поделимся большим количеством технических данных, документацией, книгами по теме, а также полезными ссылками. Ну и, конечно, видео, для лучшего понимания. Присоединяйтесь!

Новости
Хотите одними из первых получать актуальные рекомендации по архитектуре .NET и эталонные приложения вроде eShopOnContainers? --> Нажмите Подписаться (Watch) в этом новом репозитории GitHub.


Примечание. Требуемая версия Visual Studio 2017: VS 2017 15.5 и выше.

Обновления для «волны» технологий .NET Core 2.0 Wave


Примечание
Мы полностью перенесли на .NET Core 2.0 Wave решение на стороне сервера: не только компиляцию, но и новый рекомендуемый код в EF Core 2.0, ASP.NET Core 2.0 и других связанных новых версиях.

Файлы dockerfile в решении также были обновлены, они поддерживают Docker Multi-Stage с середины декабря 2017 г.

Список реализованных функций, относящихся к .NET Core 2.0, приведен в этой публикации.


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

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

В этом эталонном приложении в упрощенном виде реализована ориентированная на микросервисы архитектура. Она предназначена для использования таких технологий, как .NET Core с контейнерами Docker, в рамках универсального приложения. Мы выбрали направление «электронные магазины / электронная коммерция» просто потому, что большинство пользователей и разработчиков хорошо знакомы с ним. Однако не следует рассматривать этот образец приложения как «эталонную модель для электронной коммерции». Эта реализация вовсе не оптимальна с точки зрения торговли через Интернет. Мы не пытаемся решить все проблемы в рамках большой, масштабируемой и критически важной распределенной системы. Основная цель — помочь разработчикам быстро и без лишних усилий начать работу с контейнерами Docker, микросервисами и платформой .NET Core.

Например, после того как разработчик запустит решение на локальном компьютере и ознакомится с принципами использования контейнеров Docker и микросервисов в .NET Core, ему нужно будет выбрать кластер/оркестратор микросервисов вроде Kubernetes в Azure или Azure Service Fabric (обе среды были протестированы и поддерживаются этим решением). Дополнительно может потребоваться перенести базы данных в высокодоступные облачные службы (например, базу данных Azure SQL) или реализовать вашу шину событий EventBus с помощью служебной шины Azure или любой другой доступной на рынке.

tu1lw2gjc3ba_rjtrqzuf0ff0o4.png

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


Обзор архитектуры


Это эталонное приложение является кроссплатформенным как на стороне сервера, так и на стороне и клиента благодаря запуску служб .NET Core в контейнерах Linux или Windows (в зависимости от используемого вами хоста Docker), а также благодаря применению Xamarin для мобильных приложений, выполняемых на платформах Android, iOS или Windows/UWP (в последнем случае для запуска клиентских веб-приложений подходит любой браузер). В нем реализован упрощенный вариант архитектуры с несколькими автономными микросервисами, каждый из которых располагает собственными данными и базой данных и использует свой подход (простые шаблоны CRUD, шаблоны DDD/CQRS).

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

cxfkge3bqncworvdbhgvufsc23q.png
zciixyt8e2ufhcras0vk6rrmh9s.png

Важное замечание о шлюзах API и опубликованных API
Обратите внимание, что на диаграмме архитектуры выше показано, как осуществляется развертывание eShopOnContainers на локальной машине разработчика Docker. Для архитектуры, готовой к развертыванию в производственной среде, мы рекомендуем по-прежнему расширять вашу архитектуру дополнительными функциями, например API-шлюзами на основе службы управления API Azure или любого другого подхода к работе со шлюзами API, описанного в соответствующей документации / электронной книге. Это позволит фильтровать API и используемые средства обеспечения безопасности на одном уровне, а также скрывать/защищать внутренние микросервисы от клиентских приложений и внешних пользователей.

5lyljsjg-bfb0qgiov-2k6-8-ki.png

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


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

yu2xazjobbfupz50s_xbblwebb8.png

Что касается текущей конфигурации этого решения для среды разработки, базы данных SQL с образцами данных развертываются автоматически в один контейнер SQL Server для Linux (один общий контейнер Docker для баз данных SQL), поэтому все решение можно запустить независимо от облака или конкретного сервера. Каждую базу данных также можно развернуть в виде отдельного контейнера Docker, но тогда понадобится свыше 8 ГБ оперативной памяти для Docker на машине разработчика, чтобы запускать три контейнера Docker для SQL Server на используемом узле Docker Linux в среде разработки «Docker для Windows» или «Docker для Mac».

Это же относится к кэшу Redis, запускаемому в виде контейнера для среды разработки, а также к работающей в режиме контейнера базе данных NoSQL (MongoDB).

Однако в реальной производственной среде рекомендуется развертывать базы данных (в нашем случае — SQL Server, Redis и NoSQL) в службах высокой доступности, таких как база данных Azure SQL, Redis как услуга и Azure CosmosDB, а не в контейнере MongoDB (поскольку обе системы используют один и тот же протокол доступа). При переходе на производственную конфигурацию вам просто нужно будет изменить строки подключения после настройки серверов в высокодоступном облаке или локально.

Связанная документация и рекомендации


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

Вы можете также ознакомиться с другими электронными изданиями, посвященными жизненному циклу контейнеров/Docker (DevOps, CI/CD и т. д.) и средствам Microsoft, а также с электронной книгой о шаблонах корпоративных приложений на основе Xamarin.Forms. Скачать и ознакомиться со справочными руководствами / электронными книгами:

Проектирование архитектуры и разработка Жизненный цикл контейнеров и CI/CD Шаблоны приложений на основе Xamarin.Forms
txdduqcrwi-qft4fwke_mw5rqbk.png n5j0u4csczhx6obaheycsi57yic.png gdifasczut99pnvi3stzjuorn5a.png
Скачать PDF (издание второе) Скачать Скачать

Эти книги в других форматах (например, MOBI и EPUB) и прочие электронные издания доступны в центре архитектуры .NET.

Адрес для отзывов: dotnet-architecture-ebooks-feedback@service.microsoft.com

Мы рекомендуем скачать и прочитать электронную книгу «Проектирование архитектуры и разработка микросервисов» (Architecting and Developing Microservices). При описании архитектурных стилей, шаблонов и технологий ее авторы обращаются к данному эталонному приложению, чтобы разъяснять подходы к реализации многих шаблонов, поэтому вы лучше поймете контекст, дизайн и решения, принятые в текущей архитектуре и внутренних проектах.

Обзор кода приложения


В этом репозитории хранится образец эталонного приложения, который поможет вам понять, как создавать приложение на основе архитектуры микросервисов, используя .NET Core и Docker.

Пример направления бизнеса или сценария — интернет-магазин или сервис электронной коммерции — реализован с помощью многоконтейнерного приложения. Каждый контейнер представляет собой развернутый микросервис (например, микросервис корзины, микросервис каталога, микросервис оформления заказа и микросервис идентификации), который разрабатывается с помощью ASP.NET Core на базе .NET Core и поэтому может запускаться в службах контейнеров Linux или Windows. На снимке экрана ниже показана структура решения VS для этих микросервисов/контейнеров и клиентских приложений.

  • (рекомендовано для начинающих) Откройте eShopOnContainers-ServicesAndWebApps.sln, если вам нужно решение, содержащее только серверные проекты для микросервисов и веб-приложений.
  • Откройте eShopOnContainers-MobileApps.sln, если вам нужно решение, содержащее только проекты для клиентских мобильных приложений (только для мобильных приложений Xamarin). Оно также работает независимо на базе макетов.
  • Откройте eShopOnContainers.sln, если вам нужно решение, содержащее все проекты (все клиентские приложения и службы).


3myvffhxyta9zk3lradsg-04mq4.png

Наконец, эти микросервисы используются несколькими клиентскими веб-приложениями и мобильными приложениями, как описано ниже.

Приложение MVC (ASP.NET Core): содержит интересные сценарии использования микросервисов на основе HTTP из C#, работающих на стороне сервера, поскольку это типичное MVC-приложение ASP.NET Core. Оно работает на стороне сервера, поэтому доступ к другим контейнерам/микросервисам осуществляется во внутренней сети узла Docker с его внутренним разрешением имен.

kvu3nx0k4-hxdhd04kne8naosh0.png

SPA (Single Page Application — одностраничное приложение): тот же «функционал интернет-магазина», но разработанный на основе Angular, Typescript и немного ASP.NET Core MVC. Это еще один подход к разработке клиентских веб-приложений, позволяющих реализовать более современное поведение клиента, больше напоминающих одностраничное приложение для настольных систем, чем типичное решение для браузера. Клиенты обращаются к микросервисам на основе HTTP посредством TypeScript/JavaScript в клиентском браузере, поэтому вызовы к микросервисам поступают не из внутренней сети узла Docker, а, например, из вашей сети или даже из Интернета.

wnwcrbc1uoqlqt-vqikoi-je2io.png

Мобильное приложение Xamarin (для iOS, Android и Windows/UWP): это клиентское мобильное приложение поддерживает самые распространенные мобильные ОС (iOS, Android и Windows/UWP). В данном случае для обращения к микросервисам используется C#, но на клиентских устройствах: запросы поступают не из внутренней сети узла Docker, а, например, из вашей сети или даже из Интернета.

tqrpvjnf_idw2kc4bwtgdbupex4.png

Настройка среды разработки для eShopOnContainers


Для Visual Studio 2017 и Windows


Именно с этого целесообразно начать.

Для CLI и Windows


Для тех, кто предпочитает CLI в Windows, dotnet CLI, docker CLI и VS Code для Windows: тык.

Для CLI и Mac


Для тех, кто предпочитает CLI на Mac, dotnet CLI, docker CLI и VS Code для Mac: тык.

Оркестраторы: Kubernetes и Service Fabric


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

© Habrahabr.ru