.NET 微服务体系结构关键要点

小窍门

此内容摘自电子书《适用于容器化 .NET 应用程序的 .NET 微服务体系结构》,可以在 .NET Docs 上获取,也可以下载免费的 PDF 以供离线阅读。

适用于容器化 .NET 应用程序的 .NET 微服务体系结构电子书封面缩略图。

作为摘要和关键要点,本指南中最重要的结论如下。

使用容器的好处。 基于容器的解决方案提供了重要的成本节省,因为它们有助于减少因生产环境中依赖项失败而导致的部署问题。 容器显著改善了 DevOps 和生产操作。

容器将无处不在。 基于 Docker 的容器正成为行业中事实上的标准,受 Windows 和 Linux 生态系统中的关键供应商(如 Microsoft、Amazon AWS、Google 和 IBM)的支持。 Docker 可能很快就会在云和本地数据中心无处不在。

容器作为部署单元。 Docker 容器正在成为任何基于服务器的应用程序或服务的标准部署单元。

微服务。 微服务体系结构正成为分布式和大型或复杂的任务关键型应用程序的首选方法,基于许多独立子系统,采用自治服务的形式。 在基于微服务的体系结构中,应用程序构建为一组服务,这些服务由独立开发、测试、版本控制、部署和缩放。 每个服务都可以包括任何相关的自治数据库。

域驱动设计和 SOA。 微服务体系结构模式派生自面向服务的体系结构(SOA)和域驱动设计(DDD)。 为具有不断发展的业务需求和规则的环境设计和开发微服务时,请务必考虑 DDD 方法和模式。

微服务挑战。 微服务提供了许多强大的功能,例如独立部署、强大的子系统边界和技术多样性。 但是,它们还提出了许多与分布式应用程序开发相关的新挑战,例如分片和独立的数据模型、微服务之间的弹性通信、最终一致性和作复杂性,这些复杂性源于聚合来自多个微服务的日志记录和监视信息。 这些方面引入了比传统整体应用程序更高的复杂性级别。 因此,只有特定方案适合基于微服务的应用程序。 其中包括具有多个不断发展的子系统的大型复杂应用程序。 在这些情况下,它值得投资更复杂的软件体系结构,因为它将提供更好的长期敏捷性和应用程序维护。

任何应用程序的容器。 容器对于微服务来说很方便,但在使用 Windows 容器时,对于基于传统 .NET Framework 的单体应用程序也很有用。 使用 Docker 的好处(例如解决许多部署到生产的问题并提供最先进的开发和测试环境)适用于许多不同类型的应用程序。

CLI 与 IDE。 借助Microsoft工具,可以使用首选方法开发容器化 .NET 应用程序。 使用 Docker CLI 和 Visual Studio Code,可通过 CLI 和基于编辑器的环境进行开发。 或者,您可以采用以 IDE 为中心的方法,结合使用 Visual Studio 及其用于 Docker 的独特功能,例如多容器调试。

可复原的云应用程序。 在基于云的系统和分布式系统中,通常存在部分故障的风险。 由于客户端和服务是单独的进程(容器),因此服务可能无法及时响应客户端的请求。 例如,由于部分故障或维护,服务可能已关闭;服务可能会过载并缓慢响应请求;或者,由于网络问题,它可能暂时无法访问。 因此,基于云的应用程序必须接受这些故障,并制定策略来应对这些故障。 这些策略可能包括重试策略(重新发送消息或重试请求),以及实现断路器模式,以避免重复请求的指数负载。 基本上,基于云的应用程序必须具备复原机制,无论是基于云基础设施还是自定义机制,或者像由编排器或服务总线提供的高级机制一样。

安全性。 容器和微服务的现代世界可能会暴露新的漏洞。 有多种方法可以根据身份验证和授权实现基本应用程序安全性。 但是,容器安全性必须考虑导致本质上更安全的应用程序的其他关键组件。 构建更安全应用的关键要素是有一种安全的方式与其他应用和系统通信,这通常需要凭据、令牌、密码等,通常称为应用程序机密。 任何安全解决方案都必须遵循安全最佳做法,例如在传输中和静态时加密机密,并防止最终应用程序使用机密时泄漏。 这些机密需要像使用 Azure Key Vault 一样安全地存储和保存。

业务流程协调程序。 基于容器的业务流程协调程序(例如 Azure Kubernetes 服务和 Azure Service Fabric)是任何重要的微服务和基于容器的应用程序的关键部分。 这些应用程序具有较高的复杂性、可伸缩性需求,并不断演变。 本指南介绍了业务流程协调程序及其在基于微服务的解决方案和基于容器的解决方案中的角色。 如果应用程序的需求让你倾向于使用复杂的容器化应用,那么,寻求额外资源以深入了解容器编排器将会很有帮助。