小窍门
Azure 平台的云原生 .NET 应用电子书封面缩略图。
Microsoft与领先的社区专家合作,生成了功能齐全的云原生微服务参考应用程序 eShopOnContainers。 此应用程序旨在展示如何使用 .NET 和 Docker 构建联机店面,并可选择加入 Azure、Kubernetes 和 Visual Studio 作为可选项。
图 2-1. eShopOnContainers 示例应用屏幕截图。
在开始本章之前,建议下载 eShopOnContainers 参考应用程序。 如果这样做,理解所提供的信息会变得更容易。
功能和要求
让我们从查看应用程序的功能和要求开始。 eShopOnContainers 应用程序代表一家在线商店,它销售各种物理产品,如T恤和咖啡杯。 如果你以前在网上买过任何东西,那么使用商店的体验应该相对熟悉。 以下是应用商店实现的一些基本功能:
- 列出目录项
- 按类型筛选项目
- 按品牌筛选项目
- 将商品添加到购物篮
- 编辑或删除购物篮中的项目
- 签出
- 注册帐户
- 登录
- 注销
- 查看订单
该应用程序还具有以下非功能性要求:
- 它需要实现高度可用,并且必须能够自动调整规模以应对增加的流量(在流量减少后自动缩小规模)。
- 它应提供简便易用的监控功能,对其运行状况和诊断日志进行监视,以帮助排除所遇到的任何问题。
- 它应支持敏捷开发过程,包括持续集成和部署的支持(CI/CD)。
- 除了两个 Web 前端(传统和单页应用程序),应用程序还必须支持运行不同类型的作系统的移动客户端应用。
- 它应支持跨平台托管和跨平台开发。
图 2-2。 eShopOnContainers 参考应用程序开发体系结构。
eShopOnContainers 应用程序可通过 Web 或移动客户端进行访问,即通过面向 ASP.NET Core MVC 服务器应用程序或相应 API 网关的 HTTPS 访问应用程序。 API 网关提供多种优势,例如将后端服务与单个前端客户端分离,并提供更好的安全性。 该应用程序还使用称为 Backends-for-Frontends(BFF)的相关模式,该模式建议为每个前端客户端创建单独的 API 网关。 参考体系结构演示了如何根据请求来自 Web 还是移动客户端对 API 网关进行划分。
应用程序的功能分为许多不同的微服务。 有一些服务负责身份验证和标识、列出产品目录中的项目、管理用户的购物篮和下单。 每个单独的服务都有自己的持久性存储。 没有与所有服务交互的单个主数据存储。 相反,服务之间的协调和通信是按需完成的,并使用消息总线。
每个不同的微服务都根据各自的要求以不同的方式设计。 这一方面意味着他们的技术堆栈可能会有所不同,尽管它们都是使用 .NET 构建的,并且专为云设计。 更简单的服务提供对基础数据存储的基本 Create-Read-Update-Delete(CRUD)访问权限,而更高级的服务则使用 Domain-Driven 设计方法和模式来管理业务复杂性。
图 2-3。 不同类型的微服务。
代码概述
由于它使用微服务,eShopOnContainers 应用在其 GitHub 存储库中包含相当多单独的项目和解决方案。 除了单独的解决方案和可执行文件外,各种服务还设计为在本地开发和生产环境中运行时在其自己的容器中运行。 图 2-4 显示了完整的 Visual Studio 解决方案,其中组织了各种不同的项目。
图 2-4. Visual Studio 解决方案中的项目。
该代码组织为支持不同的微服务,并且在每个微服务中,代码分为域逻辑、基础结构问题和服务终结点。 在许多情况下,每个服务的依赖项都可以由生产中的 Azure 服务实现,以及用于本地开发的替代选项。 让我们来看看应用程序的要求如何映射到 Azure 服务。
了解微服务
本书重点介绍使用 Azure 技术生成的云原生应用程序。 若要了解有关微服务最佳做法以及如何构建基于微服务的应用程序的详细信息,请阅读配套书籍 .NET 微服务:容器化 .NET 应用程序的体系结构。