docker、k8s领域驱动设计分析

docker、k8s领域驱动设计分析

createBy lln
createTime 2023-04-10
createInfo 以下问答均来自与ChatGpt,基于docker和k8s的相关设计,快速了解领域驱动设计的实际运用。

关键词:领域驱动设计 DDD docker Kubernetes

领域驱动设计和普通设计有什么区别

  • 领域驱动设计 (Domain-Driven Design,简称 DDD) 是一种软件开发方法论,它强调将软件系统划分为不同的领域 (Domain),并通过领域模型来描述和解决领域问题。DDD 强调将领域问题作为软件开发的起点,而不是传统的功能驱动设计 (Functional Programming,简称 FP) 或者面向对象设计 (Object-Oriented Programming,简称 OOP)。
  • 与普通设计相比,领域驱动设计有以下区别:
  • 重视领域模型:领域驱动设计强调将领域问题转化为领域模型,并通过领域模型来描述和解决领域问题。领域模型是软件系统的核心,而不是传统的功能或者数据结构。
  • 强调领域特异性:领域驱动设计将领域问题划分为不同的领域,并强调领域特异性。这意味着在软件开发中,应该以领域模型为基础,而不是传统的通用设计。
  • 重视领域故事:领域驱动设计强调将领域问题转化为领域模型,并通过领域模型来描述和解决领域问题。领域模型需要转化为领域故事,以便开发人员和领域专家能够理解和沟通。
  • 强调领域一致性:领域驱动设计强调领域模型需要保持领域一致性。这意味着在软件开发中,应该通过领域模型来协调不同领域模型之间的差异,而不是传统的界面或者数据转换。
    总之,领域驱动设计将领域问题作为软件开发的起点,强调将领域模型作为软件系统的核心,重视领域特异性和领域故事,并强调领域一致性。这些特点使得领域驱动设计比普通设计更加关注软件系统的领域问题,并且能够更好地满足领域专家的需求。

快速梳理

通过docker、k8s,等软件架构的设计来举例

  • 应用程序领域

    • Docker 和 Kubernetes 都是用于容器化的应用程序部署和管理系统,它们都属于应用程序领域。Docker 和 Kubernetes 的设计都是基于对应用程序领域的建模,从而使得应用程序的部署和管理更加简单和高效。

      • 相同点

        • 应用程序打包:Docker 和 Kubernetes 都支持应用程序打包,即将应用程序及其依赖项打包到一个镜像中。这种设计可以确保应用程序在不同环境中的一致性和可移植性,从而提高了应用程序的可靠性和稳定性。
        • 容器编排:Docker 和 Kubernetes 都支持容器编排,即可以轻松地管理和部署多个容器。容器编排工具可以自动化容器的部署、扩展和管理,从而提高了容器应用的效率和可靠性。
        • 镜像设计:Docker 和 Kubernetes 都支持镜像设计,即可以将应用程序及其依赖项打包到一个镜像中。镜像的设计可以确保应用程序在不同环境中的一致性和可移植性,从而提高了应用程序的可靠性和稳定性。
        • 网络设计:Docker 和 Kubernetes 都支持网络设计,即可以配置容器之间的网络连接。网络设计可以使得容器之间可以相互通信,从而提高了容器应用的灵活性和可扩展性。
        • 应用程序监控:Docker 和 Kubernetes 都支持应用程序监控,即可以监控容器的健康状况和性能指标。应用程序监控可以帮助开发人员和运维人员更好地了解应用程序的性能和稳定性,从而及时采取措施解决问题。
      • 不同点

        • 编排方式:Docker 是基于容器编排的,它支持容器的自动化部署、扩展和管理。而 Kubernetes 则是基于集群管理的,它支持容器的自动化部署、扩展和管理,并且可以管理多个容器编排工具。
        • 管理模型:Docker 的管理模型是基于镜像的,它支持对镜像的定制和管理。而 Kubernetes 的管理模型是基于集群的,它支持对集群的定制和管理。
        • 网络设计:Docker 支持容器间默认网络连接,可以使用 Cgroups、NetworkMode 和 Docker Network 等功能来实现容器间通信。而 Kubernetes 支持容器间使用默认网络连接,同时也支持使用 Kubernetes 网络插件来实现容器间通信。
        • 部署方式:Docker 的部署方式可以是私有仓库、公共仓库或本地目录。而 Kubernetes 的部署方式可以是私有容器编排工具、公共容器编排工具或本地目录。
        • 应用场景:Docker 适用于单容器应用,它可以用于开发、测试、部署和运维等场景。而 Kubernetes 适用于大规模容器应用,它可以用于生产环境、云平台和 DevOps 等场景。
  • 容器领域:

    • Docker 和 Kubernetes 都是用于容器化的技术,它们都属于容器领域。Docker 和 Kubernetes 的设计都是基于对容器领域的建模,从而使得容器的部署、管理和扩展更加简单和高效。

      • 相同点

        • 都是基于容器技术的:Docker 和 Kubernetes 都是基于容器技术的,它们都是用于容器化的应用程序部署和管理系统。
        • 都支持容器编排:Docker 和 Kubernetes 都支持容器编排,即可以自动化容器的部署、扩展和管理。
        • 都支持容器间通信:Docker 和 Kubernetes 都支持容器间通信,即可以使得容器之间可以相互通信。
        • 都支持网络设计:Docker 和 Kubernetes 都支持网络设计,即可以配置容器之间的网络连接。
        • 都支持资源管理:Docker 和 Kubernetes 都支持资源管理,即可以管理容器化应用程序的资源使用情况。
        • 都支持多租户设计:Docker 和 Kubernetes 都支持多租户设计,即可以支持多个租户同时使用同一份资源。
        • 都支持自动化部署:Docker 和 Kubernetes 都支持自动化部署,即可以通过自动化工具来自动部署容器化应用程序。
      • 不同点

        • 管理模型:Docker 的管理模型是基于镜像的,它支持对镜像的定制和管理。而 Kubernetes 的管理模型是基于集群的,它支持对集群的定制和管理。
        • 部署方式:Docker 的部署方式可以是私有仓库、公共仓库或本地目录。而 Kubernetes 的部署方式可以是私有容器编排工具、公共容器编排工具或本地目录。
        • 网络设计:Docker 支持容器间默认网络连接,可以使用 Cgroups、NetworkMode 和 Docker Network 等功能来实现容器间通信。而 Kubernetes 支持容器间使用默认网络连接,同时也支持使用 Kubernetes 网络插件来实现容器间通信。
        • 应用场景:Docker 适用于单容器应用,它可以用于开发、测试、部署和运维等场景。而 Kubernetes 适用于大规模容器应用,它可以用于生产环境、云平台和 DevOps 等场景。
        • 组件设计:Docker 主要包括 Docker Engine、Docker Client 和 Docker Store 三个组件。而 Kubernetes 主要包括 Kubernetes Controller、Kubernetes Deployment、Kubernetes Service、Kubernetes Ingress 和 Kubernetes ConfigMap 六个组件。
        • 安全性设计:Docker 和 Kubernetes 都支持安全性设计,但它们的设计思路有所不同。Docker 主要通过容器的隔离性和默认的安全性设置来实现安全性。而 Kubernetes 通过多租户、权限控制和容器编排等功能来实现安全性。
  • 网络领域:

    • Docker 和 Kubernetes 都支持网络设计,它们都属于网络领域。Docker 和 Kubernetes 的设计都是基于对网络领域的建模,从而使得容器之间通信更加简单和高效。

      • 相同点

        • 支持容器网络:Docker 和 Kubernetes 都支持容器网络,它们允许容器之间相互通信。Docker 使用默认容器网络,而 Kubernetes 提供了多种网络插件,如 Calico、Flannel 和 Weave Net 等,可以支持容器网络。
        • 支持网络隔离:Docker 和 Kubernetes 都支持网络隔离,它们允许容器在网络层面上进行隔离。Docker 使用主机命名空间和网络隔离技术,而 Kubernetes 使用 Pod 隔离和 namespace 技术。
        • 支持负载均衡:Docker 和 Kubernetes 都支持负载均衡,它们允许容器之间进行负载均衡。Docker 使用 Compose 配置文件和 Service 实现负载均衡,而 Kubernetes 提供了 Ingress 和 Load Balancer 插件来实现负载均衡。
        • 支持网络流量控制:Docker 和 Kubernetes 都支持网络流量控制,它们允许容器之间进行流量控制。Docker 使用 Cgroups 和 NetworkMode 实现流量控制,而 Kubernetes 使用 QoS 和 Resource Quota 实现流量控制。
      • 不同点

        • 网络模型不同:Docker 使用默认容器网络,它是一个基于 Linux 网络栈的简单网络模型,而 Kubernetes 提供了多种网络插件,如 Calico、Flannel 和 Weave Net 等,可以支持更复杂的网络模型。
        • 网络连接方式不同:Docker 容器之间默认是直接相互连接的,而 Kubernetes 容器之间需要通过默认容器网络或网络插件来连接。
        • 网络流量控制不同:Docker 使用 Cgroups 和 NetworkMode 实现流量控制,而 Kubernetes 使用 QoS 和 Resource Quota 实现流量控制。
        • 容器网络隔离不同:Docker 使用主机命名空间和网络隔离技术实现容器网络隔离,而 Kubernetes 使用 Pod 隔离和 namespace 技术实现容器网络隔离。
        • 容器网络插件不同:Docker 默认使用默认容器网络,而 Kubernetes 提供了多种网络插件,如 Calico、Flannel 和 Weave Net 等,可以支持容器网络。
  • 容器编排领域:

    • Docker 和 Kubernetes 都是用于容器编排的工具,它们都属于容器编排领域。Docker 和 Kubernetes 的设计都是基于对容器编排领域的建模,从而使得容器编排更加简单、高效和可靠。

      • 相同点

        • 容器化应用程序:Docker 和 Kubernetes 都是用于容器化应用程序的工具。它们能够帮助用户将应用程序打包成容器,以便在分布式环境中进行部署和管理。
        • 分布式架构:Docker 和 Kubernetes 都是基于分布式架构的设计,它们都支持容器在多个节点上的部署和扩展。
        • 自动化部署:Docker 和 Kubernetes 都提供了自动化部署的功能,它们能够帮助用户自动进行应用程序的部署和管理。
        • 容器编排:Docker 和 Kubernetes 都是用于容器编排的工具,它们都能够让用户方便地管理和部署容器化应用程序。
        • 资源管理:Docker 和 Kubernetes 都提供了对容器资源的管理功能,包括容器的创建、销毁、配置和管理等功能。
        • 自动化扩展:Docker 和 Kubernetes 都能够自动进行应用程序的扩展和管理,包括负载均衡、容错处理和容量扩展等功能。
        • 管理控制平面:Docker 和 Kubernetes 都提供了管理控制平面的功能,它们能够帮助用户方便地管理容器化应用程序的生命周期和配置。
        • 可视化监控:Docker 和 Kubernetes 都提供了可视化监控的功能,它们能够帮助用户方便地监控容器化应用程序的状态和性能。
      • 不同点

        • 理念不同:Docker 的设计目标是让用户能够方便地管理和部署容器化应用程序,而 Kubernetes 的设计目标是提供一个高度可扩展、可靠和高效的容器编排系统,用于构建和管理容器化应用程序。
        • 容器编排方式:Docker 和 Kubernetes 对容器编排的方式有所不同。Docker 主要是基于镜像和容器的单向依赖关系,即应用程序的所有依赖项和库都被打包到一个镜像中,然后通过容器来运行这个镜像。而 Kubernetes 则是一个基于 Kubernetes rnetes 的分布式容器编排系统,它能够管理和部署多个容器,并提供了一些扩展和容错机制,以便更好地支持容器化的应用程序。
        • 容器编排层次:Docker 和 Kubernetes 在容器编排的层次方面有所不同。Docker 主要关注于容器的编排,即如何管理和部署容器化应用程序。而 Kubernetes 则更加关注于容器集群的管理,即如何管理和部署多个容器,并提供了一些扩展和容错机制,以便更好地支持容器化的应用程序。
        • 管理控制平面:Docker 和 Kubernetes 在管理控制平面方面有所不同。Docker 主要是通过 Docker 镜像来管理容器的控制平面,即如何管理容器的生命周期和配置。而 Kubernetes 则是通过 Kubernetes 控制平面来管理容器集群的控制平面,包括容器的生命周期、配置和管理等功能。
        • 容器通信方式:Docker 和 Kubernetes 在容器通信方式方面有所不同。Docker 主要是基于stdin/stdout 和 Docker 网络接口来进行容器之间的通信,而 Kubernetes 则是通过 Kubernetes API 和 Kubernetes 资源对象来进行容器之间的通信。

实际运用

  • (1)按业务边界将业务域划分为多个业务子域(对应多个微服务);
  • (2)将业务子域分解为多个领域对象 (对应某个微服务下的多个Service) :
  • (3)识别出领域对象的多个领域活动,覆盖到该领域对象所涉及的业务活动(一个领域活动对应Service下的一个方法:
  • (4)识别出领域活动所涉及的聚合、实体和值对象(对应微服务的实体对象和数据对象)。
  • (5)比较不同子域。分析类似的领域对象,领域活动,聚合、实体和值对象,根据一定相似度闽值,合并去重。
  • (6)分析同一个子域,如果不同Service之间没有任何交互,可进一步拆分成不同微服务。
  • (7)组织业务和技术专家,迭代执行1-6步骤,持续提高拆分合理度。

举例:

  • (1)在微服务纵向拆分的成果基础上,做进一步的横向划分
  • (2)人机交互的,属于业务应用
  • (3)多变的、交易类的逻辑处理和数据存储,属于业务应用
  • (4)稳定的、基础的逻辑处理和数据存储,属于业务支撑

猜你喜欢

转载自blog.csdn.net/weixin_42559985/article/details/130086413