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 网关提供多项优势,例如,将后端服务与单个前端客户端分离,以及提供更好的安全性。 应用程序还使用称为“服务于前端的后端”(BFF) 的相关模式,该模式建议为每个前端客户端创建单独的 API 网关。 参考体系结构演示了根据请求是来自 Web 还是移动客户端来拆分 API 网关。
应用程序的功能分为多项不同的微服务。 有一些服务负责身份验证和标识、列出产品目录中的商品、管理用户的购物篮以及下单。 其中每项单独的服务都有自己的永久性存储。 并没有单一的主数据存储可以与所有服务交互。 服务之间的协调和通信而是根据需要使用消息总线完成的。
各项微服务都根据各自的要求采取了不同的设计。 这就意味着它们的技术堆栈可能会有所不同,尽管它们都使用 .NET 构建并专为云而设计。 更简单的服务可提供对底层数据存储的基本 CRUD(创建、读取、更新、删除)访问权限,而更高级的服务使用域驱动设计方法和模式来管理业务复杂性。
图 2-3。 不同类型的微服务。
代码概述
由于 eShopOnContainers 应用使用微服务,因此在其 GitHub 存储库中包含了许多单独的项目和解决方案。 除了提供单独的解决方案和可执行文件外,各种服务还可用于在本地开发期间以及在生产环境中运行时在其自己的容器中运行。 图 2-4 显示了完整的 Visual Studio 解决方案,其中组织了各种不同的项目。
图 2-4。 Visual Studio 解决方案中的项目。
代码经过组织可支持不同的微服务,在每项微服务中,代码分为域逻辑、基础结构关注点、用户界面或服务终结点。 在许多情况下,每项服务的依赖项均可由生产环境中的 Azure 服务以及用于本地开发的替代选项实现。 让我们看看应用程序的要求与 Azure 服务的对应关系。
了解微服务
本书重点介绍使用 Azure 技术生成的云原生应用程序。 要详细了解微服务最佳做法以及如何构建基于微服务的应用程序,请阅读配套书籍《.NET 微服务:适用于容器化 .NET 应用程序的体系结构》。