Эталонное приложение на базе контейнеров и архитектуры микросервисов
Хабр, привет. Сегодня рассказываем вам об эталонном кроссплатформенном приложении .NET Core от Microsoft, созданном на основе упрощенной архитектуры микросервисов и контейнеров Docker. В статье поделимся большим количеством технических данных, документацией, книгами по теме, а также полезными ссылками. Ну и, конечно, видео, для лучшего понимания. Присоединяйтесь!
Примечание. Требуемая версия Visual Studio 2017: VS 2017 15.5 и выше.
Обновления для «волны» технологий .NET Core 2.0 Wave
Файлы dockerfile в решении также были обновлены, они поддерживают Docker Multi-Stage с середины декабря 2017 г.
Список реализованных функций, относящихся к .NET Core 2.0, приведен в этой публикации.
Не забудьте ознакомиться с нашим руководством по ветвлению, освещающим принципы соответствующей политики.
В этом эталонном приложении в упрощенном виде реализована ориентированная на микросервисы архитектура. Она предназначена для использования таких технологий, как .NET Core с контейнерами Docker, в рамках универсального приложения. Мы выбрали направление «электронные магазины / электронная коммерция» просто потому, что большинство пользователей и разработчиков хорошо знакомы с ним. Однако не следует рассматривать этот образец приложения как «эталонную модель для электронной коммерции». Эта реализация вовсе не оптимальна с точки зрения торговли через Интернет. Мы не пытаемся решить все проблемы в рамках большой, масштабируемой и критически важной распределенной системы. Основная цель — помочь разработчикам быстро и без лишних усилий начать работу с контейнерами Docker, микросервисами и платформой .NET Core.
Например, после того как разработчик запустит решение на локальном компьютере и ознакомится с принципами использования контейнеров Docker и микросервисов в .NET Core, ему нужно будет выбрать кластер/оркестратор микросервисов вроде Kubernetes в Azure или Azure Service Fabric (обе среды были протестированы и поддерживаются этим решением). Дополнительно может потребоваться перенести базы данных в высокодоступные облачные службы (например, базу данных Azure SQL) или реализовать вашу шину событий EventBus с помощью служебной шины Azure или любой другой доступной на рынке.
Ознакомьтесь с планом и ключевыми этапами будущих выпусков eShopOnContainers на вики-страницах. Здесь вы узнаете о планируемых выпусках и сможете оставить отзыв в разделе ISSUES (ВОПРОСЫ), если вам нужно реализовать или улучшить определенный сценарий. Кроме того, вы можете принять участие в обсуждении любого из заданных ранее вопросов.
Обзор архитектуры
Это эталонное приложение является кроссплатформенным как на стороне сервера, так и на стороне и клиента благодаря запуску служб .NET Core в контейнерах Linux или Windows (в зависимости от используемого вами хоста Docker), а также благодаря применению Xamarin для мобильных приложений, выполняемых на платформах Android, iOS или Windows/UWP (в последнем случае для запуска клиентских веб-приложений подходит любой браузер). В нем реализован упрощенный вариант архитектуры с несколькими автономными микросервисами, каждый из которых располагает собственными данными и базой данных и использует свой подход (простые шаблоны CRUD, шаблоны DDD/CQRS).
В качестве протокола связи между клиентскими приложениями и микросервисами служит HTTP. Кроме того, поддерживается асинхронная связь для передачи обновленных данных нескольким службам на основе событий интеграции и шины событий (облегченный брокер передачи сообщений на базе RabbitMQ или служебной шины Azure) и другие функции, определенные в плане развития продукта.
Образец кода в этом репозитории НЕ использует службу управления API Azure, чтобы обеспечить «применение F5» в Visual Studio (или CLI) для образца, не имеющего предварительно созданных зависимостей в Azure. Тем не менее вам следует выбрать подходящий подход к работе с API-шлюзами при подготовке решения к развертыванию в производственной среде.
Микросервисы различаются по типу, то есть реализация внутренней архитектуры может осуществляться по-разному в зависимости от ее назначения, как показано на рисунке ниже.
Что касается текущей конфигурации этого решения для среды разработки, базы данных 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 |
---|---|---|
Скачать 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, если вам нужно решение, содержащее все проекты (все клиентские приложения и службы).
Наконец, эти микросервисы используются несколькими клиентскими веб-приложениями и мобильными приложениями, как описано ниже.
Приложение MVC (ASP.NET Core): содержит интересные сценарии использования микросервисов на основе HTTP из C#, работающих на стороне сервера, поскольку это типичное MVC-приложение ASP.NET Core. Оно работает на стороне сервера, поэтому доступ к другим контейнерам/микросервисам осуществляется во внутренней сети узла Docker с его внутренним разрешением имен.
SPA (Single Page Application — одностраничное приложение): тот же «функционал интернет-магазина», но разработанный на основе Angular, Typescript и немного ASP.NET Core MVC. Это еще один подход к разработке клиентских веб-приложений, позволяющих реализовать более современное поведение клиента, больше напоминающих одностраничное приложение для настольных систем, чем типичное решение для браузера. Клиенты обращаются к микросервисам на основе HTTP посредством TypeScript/JavaScript в клиентском браузере, поэтому вызовы к микросервисам поступают не из внутренней сети узла Docker, а, например, из вашей сети или даже из Интернета.
Мобильное приложение Xamarin (для iOS, Android и Windows/UWP): это клиентское мобильное приложение поддерживает самые распространенные мобильные ОС (iOS, Android и Windows/UWP). В данном случае для обращения к микросервисам используется C#, но на клиентских устройствах: запросы поступают не из внутренней сети узла Docker, а, например, из вашей сети или даже из Интернета.
Настройка среды разработки для 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 (впрочем, их можно использовать и в любом другом облаке или локально).