.NET 微服务体系结构关键结论

提示

此内容摘自电子书《适用于容器化 .NET 应用程序的 .NET 微服务体系结构》,可在 .NET 文档上获取,也可作为免费可下载的 PDF 脱机阅读。

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

下列总结和关键结论是本指南中最重要的结论。

使用容器的好处。 基于容器的解决方案对于节约成本大有裨益,因为它们可以帮助减少由于在生产环境中依赖关系异常而导致的部署问题。 容器显著改善了 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)是任何重要微服务和基于容器的应用程序的关键部分。 这些应用程序具有高复杂性、可伸缩性需求,并且不断发展。 本指南介绍了业务流程协调程序及其在基于微服务和基于容器的解决方案中的角色。 如果应用程序需要转移到复杂的容器化应用,建议查看其他资源以详细了解业务流程协调程序。