Kubernetes 模式:云原生之路 - bibryam


微服务是用于创建云原生应用程序的最流行的架构风格之一。他们通过业务功能的模块化和以开发复杂性换取操作复杂性来解决软件复杂性。这就是为什么在微服务方面取得成功的一个关键先决条件是创建可以通过Kubernetes大规模运行的应用程序。

作为微服务运动的一部分,有大量的理论、技术和补充工具可用于从头创建微服务或将单体拆分为微服务。这些实践中的大多数都基于Eric Evans (Addison-Wesley) 的领域驱动设计以及限界上下文和聚合的概念。有界上下文通过将大型模型划分为不同的组件来处理大型模型,聚合有助于将有界上下文进一步分组为具有定义的事务边界的模块。然而,除了这些业务领域的考虑之外,对于每个分布式系统——无论它是否基于微服务——还存在关于其外部结构和运行时耦合的技术问题。集装箱容器编排器(如 Kubernetes)引入了新的原语和抽象来解决分布式应用程序的问题,在这里我们讨论将分布式系统放入 Kubernetes 时要考虑的各种选项。

在本书中,我们通过将容器视为黑盒来看待容器和平台的交互。但是,我们创建此部分是为了强调将内容放入容器的重要性。容器和云原生平台为你的分布式应用程序带来了巨大的好处,但如果你放入容器中的都是垃圾,你将得到大规模的分布式垃圾。图 1-1 显示了创建良好的云原生应用程序所需的技能组合以及 Kubernetes 模式适用的地方。


(图 1:通往云原生之路。经 Bilgin Ibryam 和 Roland Huß (O'Reilly) 的 Kubernetes Patterns 第二版许可使用。版权所有 2023 Bilgin Ibryam 和 Roland Huß)

在高层次上,创建良好的云原生应用程序需要熟悉多种设计技术:

  • 在最低的代码级别,您定义的每个变量、创建的每个方法以及您决定实例化的每个类都在应用程序的长期维护中发挥作用。无论您使用什么容器技术和编排平台,开发团队和他们创建的工件都会产生最大的影响。重要的是要培养努力编写干净代码、进行适当数量的自动化测试、不断重构以提高代码质量并以软件工艺原则为核心的开发人员。
  • 领域驱动设计是从业务角度进行软件设计,目的是使架构尽可能接近现实世界。这种方法最适合面向对象的编程语言,但也有其他好的方法来为现实世界的问题建模和设计软件。具有正确的业务和事务边界、易于使用的接口和丰富的 API 的模型是以后成功进行容器化和自动化的基础。
  • 六边形架构及其变体,例如 Onion 和 Clean 架构,通过将应用程序组件解耦并提供与它们交互的标准化接口来提高应用程序的灵活性和可维护性。通过将系统的核心业务逻辑与周围的基础设施解耦,六边形架构使得系统更容易移植到不同的环境或平台。这些架构补充了领域驱动设计,并帮助安排具有不同边界和外部化基础设施依赖性的应用程序代码。
  • 微服务架构风格和十二要素应用程序方法论迅速发展成为创建分布式应用程序的规范,它们为设计不断变化的分布式应用程序提供了有价值的原则和实践。应用这些原则可以让您创建针对规模、弹性和变化速度进行优化的实施,这些都是当今任何现代软件的常见要求。
  • 容器很快被用作打包和运行分布式应用程序的标准方式,无论这些应用程序是微服务还是功能。创建模块化、可重用的容器,成为优秀的云原生公民是另一个基本先决条件。云原生是一个术语,用于描述大规模自动化容器化应用程序的原则、模式和工具。我们将云原生与 Kubernetes 互换使用,后者是当今最流行的开源云原生平台。

在本书中,我们不涉及干净代码、领域驱动设计、六边形架构或微服务。我们只关注解决容器编排问题的模式和实践。但要使这些模式有效,您的应用程序需要通过使用干净的代码实践、领域驱动设计、类似六边形架构的外部依赖性隔离、微服务原则和其他相关设计技术从内部进行良好设计。

详细点击标题