当前位置: 首页 > 科技观察

微容器比大容器好吗?_0

时间:2023-03-19 09:54:44 科技观察

现代开发的最佳实践,尤其是在实现微服务架构时,都涉及到Docker、Kubernetes等容器技术的使用。容器正在改变企业部署和使用应用程序的方式。提高开发交付效率和可移植性是吸引企业使用容器的重要原因。容器技术允许开发人员运行软件而无需担心操作系统或依赖项。因此,容器极大地简化了软件架构,因为正式的环境已经内置了相关的配置和库。容器化的两大指标乍一看,这似乎很容易——我们将应用程序打包到容器中,运行它,我们就完成了。但事情并不那么理想:应用程序的性能会下降,云基础设施的成本会增加。为了在不扩展云内存占用的情况下有效地构建应用程序;关于容器需要了解的两个重要指标与性能密切相关:容器内存消耗;容器镜像大小及其与应用程序性能的关系。为软件应用程序选择正确的架构是产品开发中最关键的步骤之一。这一点并不容易把握,尤其是在微服务系统盛行的今天,更是难上加难。更好的解决方案是采用行业创新实践,这样应用程序就会安全,并且在多年后不需要更换。从这个角度来看,找到可用的最小微型容器是应用程序容器化选择和部署过程的一个很好的选择。微型容器与大型容器:它们的性能更高效吗?随着容器的普及,软件结构向微服务、云化方向发展,大型容器在持续交付的业务环境中逐渐暴露出诸多短板。软件行业努力通过优化来减少大型容器的陷阱。历史上,在容器化的过程中,我们会使用与最初运行应用程序的操作系统对应的容器。例如,如果应用程序最初运行在Centos上,那么我们将使用Centos容器来构建我们的应用程序镜像。这种方法是正确的,因为它提供了安全的渐进迁移。容器操作系统具有作为服务器运行所需的所有组件,但我们的应用程序不再需要它。因此,容器化的下一步将是缩小规模,将应用程序移植到微型容器中。微容器是为提高效率而修改的优化容器。它仍然包含为软件应用程序提供更多缩放、隔离和奇偶校验的所有文件。但是,它是一个改进的容器,在图像中保留了优化数量的文件。留在小容器中的重要文件是shell、包管理器和标准C库。微容器和Distroless的区别另外,在容器空间中有“Distroless(无发行版)”的概念,使用Distroless作为基础镜像是保护容器的一种令人兴奋的方式。它仅包含应用程序及其运行时依赖项。Distroless图像将提取所有未使用的文件。值得强调的是微容器和Distroless概念的区别。微小的容器仍然包含未使用的文件,因为它们是系统保持完整所必需的。微型容器基于与常规容器相同的操作系统并实现所有相同的功能,唯一的区别是它们的内部文件得到了增强,并且由于开发人员的改进而变得更小。微型容器包含优化数量的文件,因此它仍然包含应用程序运行所需的所有文件和依赖项,但格式更轻、更小。例如,对于BellSoftAlpaquita,这个微型容器仅包含启动OpenJDK应用程序所需的所有文件以及运行OpenJDK的标准工具。这个微型容器经过BellSoft团队的极大改进,其小巧的体积提供了比AlpineLinux更高级别的安全性。综上所述,微容器的主要特点是:体积更小;更高的分发、下载和扩展速度;安全。微型容器的安全性相对于较大尺寸的容器大大提高。从图像中删除不需要的额外文件有助于减少外部攻击的可能性。微容器选项如今,最小的容器中有相当多的基础镜像。一个很好的例子是DebianSlim。DebianSlim是最流行的Linux发行版之一,它起源于更大的Debiandocker。另一个著名的微型容器是AlpineLinux。这两个普通的基础镜像仍然像大型容器一样包含所有内部组件,并且携带的文件大小也有所提高,因此性能相对更好。通用基础镜像的行为方式与大型容器相同,尽管它们的尺寸有所减小。Distroless镜像则完全不同,它通常只携带应用程序及其运行时依赖项。Distroless映像大大减少并被认为是无包管理器,它们的实际目的和操作是不同的。回到微容器,它们可以更小并且指标可以进一步改进。例如,BellSoft(OpenJDK的主要贡献者)已经用AlpineLinux做到了这一点,并发布了一个比Alpine更小的新镜像——AlpaquitaLinux。它更轻更小,并且与OpenJDK完美配合。作为集成到OpenJDK中的musl端口的作者,BellSoft进一步利用了这个强大的功能并改进了AlpineLinux,在其之上创建了AlpaquitaLinux。AlpaquitaLinux除了体积更小之外,还将获得OpenJDK标准工具,这些工具保证是最新的且完全可用。综上所述,微容器对于云原生应用具有明显的优势。但是,大型容器不同。价值点在于为市场提供更好的通用基础图像解决方案。处于不同转型阶段的企业可以做出适当的选择和部署。原文链接:https://dzone.com/articles/how-microcontainers-gain-against-large-containers译者介绍崔映峰,社区编辑,70后程序员,10年以上工作经验,一直从事长期从事Java开发,架构设计,容器化等相关工作。精通Java,熟练使用Maven、Jenkins等DevOps相关工具链,擅长容器化方案规划、设计和实施。