Сопоставление eShopOnContainers со службами Azure

Совет

Это содержимое является фрагментом из электронной книги, архитектора облачных собственных приложений .NET для Azure, доступных в .NET Docs или в виде бесплатного скачиваемого PDF-файла, который можно прочитать в автономном режиме.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Хотя и не требуется, Azure хорошо подходит для поддержки eShopOnContainers, так как проект был построен для облачного приложения. Приложение создано с помощью .NET, поэтому оно может работать в контейнерах Linux или Windows в зависимости от узла Docker. Приложение состоит из нескольких автономных микрослужб, каждый из которых содержит собственные данные. Различные микрослужбы демонстрируют различные подходы, начиная от простых операций CRUD и более сложных шаблонов DDD и CQRS. Микрослужбы взаимодействуют с клиентами по протоколу HTTP и друг с другом через обмен сообщениями. Приложение также поддерживает несколько платформ для клиентов, так как он принимает HTTP в качестве стандартного протокола связи и включает в себя ASP.NET мобильных приложений Core и Xamarin, работающих на платформах Android, iOS и Windows.

Архитектура приложения показана на рис. 2-5. Слева клиентские приложения, разделенные на мобильные, традиционные веб-приложения и веб-одностраничные приложения (SPA). Справа находятся серверные компоненты, составляющие систему, каждая из которых может размещаться в контейнерах Docker и кластерах Kubernetes. Традиционное веб-приложение работает с помощью приложения ASP.NET Core MVC, показанного желтым цветом. Это приложение и мобильные и веб-SPA-приложения взаимодействуют с отдельными микрослужбами через один или несколько шлюзов API. Шлюзы API следуют шаблону "серверные серверы для внешних интерфейсов" (BFF), то есть каждый шлюз предназначен для поддержки данного внешнего клиента. Отдельные микрослужбы перечислены справа от шлюзов API и включают как бизнес-логику, так и некоторое хранилище сохраняемости. Различные службы используют базы данных SQL Server, экземпляры кэша Redis и хранилища MongoDB/CosmosDB. В правом углу находится шина событий системы, которая используется для обмена данными между микрослужбами.

eShopOnContainers ArchitectureРис. 2-5. Архитектура eShopOnContainers.

Серверные компоненты этой архитектуры легко сопоставляют службы Azure.

Оркестрация контейнеров и кластеризация

Службы, размещенные в контейнере, от приложений ASP.NET Core MVC до отдельных микрослужб каталога и заказов, могут размещаться и управляться в Служба Azure Kubernetes (AKS). Приложение может выполняться локально в Docker и Kubernetes, а затем те же контейнеры можно развернуть в промежуточных и рабочих средах, размещенных в AKS. Этот процесс можно автоматизировать, как мы увидим в следующем разделе.

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

API Gateway

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

Azure Управление API (APIM) помогает организациям публиковать API в согласованной управляемой форме. APIM состоит из трех компонентов: шлюза API и портала администрирования (портал Azure) и портала разработчика.

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

В портал Azure вы определяете схему API и упаковывая различные API в продукты. Вы также настраиваете доступ пользователей, просматриваете отчеты и настраиваете политики для квот или преобразований.

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

С помощью APIM приложения могут предоставлять несколько разных групп служб, каждый из которых предоставляет серверную часть для конкретного внешнего клиента. APIM рекомендуется использовать для сложных сценариев. Для более простых потребностей можно использовать упрощенный шлюз API Ocelot. Приложение eShopOnContainers использует Ocelot из-за простоты и потому, что оно может быть развернуто в той же среде приложения, что и само приложение. Узнайте больше об eShopOnContainers, APIM и Ocelot.

Другой вариант, если приложение использует AKS, — развернуть контроллер входящего трафика шлюза Azure в качестве модуля pod в кластере AKS. Этот подход позволяет кластеру интегрироваться с Шлюз приложений Azure, что позволяет шлюзу балансировать трафик к модулям pod AKS. Дополнительные сведения об контроллере входящего трафика шлюза Azure для AKS.

Data

Различные внутренние службы, используемые eShopOnContainers, имеют разные требования к хранилищу. Несколько микрослужб используют базы данных SQL Server. Микрослужба Корзины использует кэш Redis для сохранения. Микрослужба Location ожидает API MongoDB для своих данных. поддержка Azure каждый из этих форматов данных.

Для поддержки базы данных SQL Server Azure имеет продукты для всех баз данных от отдельных баз данных до высокомасштабируемых База данных SQL эластичных пулов. Отдельные микрослужбы можно настроить для взаимодействия с собственными отдельными базами данных SQL Server быстро и легко. Эти базы данных можно масштабировать по мере необходимости для поддержки каждой отдельной микрослужбы в соответствии с потребностями.

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

Микрослужба "Расположения" использует базу данных NoSQL MongoDB для сохранения. Во время разработки база данных может быть развернута в собственном контейнере, а в рабочей среде служба может использовать API Azure Cosmos DB для MongoDB. Одним из преимуществ Azure Cosmos DB является возможность использовать несколько различных протоколов связи, включая API SQL и распространенные API NoSQL, включая MongoDB, Cassandra, Gremlin и Таблицу Azure служба хранилища. Azure Cosmos DB предлагает полностью управляемую и глобально распределенную базу данных в качестве службы, которая может масштабироваться в соответствии с потребностями служб, использующих ее.

Распределенные данные в облачных приложениях подробно рассматриваются в главе 5.

Шина событий

Приложение использует события для обмена данными об изменениях между различными службами. Эту функцию можно реализовать с различными реализациями, а приложение eShopOnContainers использует RabbitMQ. При размещении в Azure приложение будет использовать Служебная шина Azure для обмена сообщениями. Служебная шина Azure — это полностью управляемый брокер сообщений интеграции, позволяющий приложениям и службам взаимодействовать друг с другом в разложенном, надежном, асинхронном режиме. Служебная шина Azure поддерживает отдельные очереди, а также отдельные разделы для поддержки сценариев издателя-подписчика. Приложение eShopOnContainers будет использовать разделы с Служебная шина Azure для поддержки распространения сообщений из одной микрослужбы в любую другую микрослужбу, необходимую для реагирования на данное сообщение.

Устойчивость

После развертывания в рабочей среде приложение eShopOnContainers сможет воспользоваться несколькими службами Azure, доступными для повышения устойчивости. Приложение публикует проверка работоспособности, которые можно интегрировать с приложением Аналитика для предоставления отчетов и оповещений на основе доступности приложения. Ресурсы Azure также предоставляют журналы диагностики, которые можно использовать для выявления и исправления ошибок и проблем с производительностью. Журналы ресурсов содержат подробные сведения о том, когда и как разные ресурсы Azure используются приложением. Дополнительные сведения о функциях устойчивости на основе облака см. в главе 6.