我正在对一系列具有以下结构的应用程序进行高层容器化:
让这3个步骤分别命名为s1,s2和s3。
在代码重用和使解决方案过于复杂之间取得平衡的最佳方法是什么?换句话说,实现行业认可的这种解决方案的最佳设计模式/实践是什么?
我几乎不愿提出的建议如下:
要求建议其他合适的替代方法。
最佳答案
如果您的应用程序是整体式的,最明显的方法是将每个应用程序作为一个进程打包到容器镜像中,然后将容器作为Pod(每个Pod一个容器)部署到Kubernetes(由Deployment资源管理)(允许您复制Pod)并进行滚动更新)。这对应于列表的方法1 。
如果您的应用程序组件之间已经松散耦合,则可以选择微服务类型的体系结构。例如,您可以将所有应用程序的s1,s2和s3的通用逻辑提取到单独的微服务中,将每个应用程序打包为容器镜像,然后将它们作为Pod在Kubernetes上运行(每个Pod一个容器,由Deployment管理) 。每个应用程序的核心将是其自己的“微服务”,打包为容器镜像,并作为由Deployment管理的Pod部署到Kubernetes。然后,这些“核心”容器将使用s1,s2和s3容器提供的服务作为客户端。这将对应于列表中的方法3 。
关于方法2 ,这不是最佳实践。在大多数情况下, pods 仅包含一个容器。在某些情况下,一个 pods 中有多个容器,但是其中一个是主要容器,是主要任务,另一个是紧密相连的侧车容器,它们可以完成辅助任务。
摘要
如果您的应用程序之间有很多共同的逻辑,那么方法3是有道理的,以避免代码重复。它还为缩放提供了最好的粒度。 Pod组由Deployment资源管理,即使您将每个应用程序部署为一个Pod,您也将一直使用它们。因此,这没有任何开销。
如果通用逻辑不是那么大,则方法1是最简单的解决方案。
关于docker - 容器化应用程序-设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58065266/