0

微容器完胜大容器?

 1 year ago
source link: https://www.51cto.com/article/718096.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

微容器完胜大容器?

译文
作者: 崔莹峰 2022-09-06 10:18:39
容器正在改变企业部署和使用应用程序的方式。微型容器VS大型容器:执行效率更高?
495f9ca450607cb155e5781d4a8cd9367516ce.jpg

现代开发的最佳实践,尤其是在实现微服务架构时,无不涉及使用Docker、Kubernetes和其他容器技术。

容器正在改变企业部署和使用应用程序的方式。提高开发和交付效率、可移植性是吸引企业使用容器的重要原因。容器技术能够允许开发者运行软件而不用担心操作系统或依赖项。因此,由于已经内置了相关配置和库的正式环境,容器大大简化了软件架构。

容器化两大指标  

乍一看,这似乎很简单——我们将应用程序打包在一个容器中,运行它,然后就完成了。但事情并不会那么理想:应用程序的性能会出现下降,云基础设施的成本也会增加。为了在不扩展云端占用内存的情况下有效地构建应用程序;需要了解与性能表现息息相关的容器的两大重要指标

  • 容器内存消耗;
  • 容器镜像的大小以及它与应用程序性能的关系。

为软件应用程序选择正确的架构是产品开发中最关键的步骤之一。这个并不太容易掌握,尤其是微服务体系盛行的今天,难度更大。比较好的方案就是采用行业中的创新做法,这样应用程序从现在开始几年内都会是安全的,不需要更换。从这个角度来看,对于应用容器化改造选型和部署过程而言,找到可用的最小微型容器是一个不错的选择。

微型容器VS大型容器:执行效率更高?  

随着容器的普及、软件结构向微服务和云的发展,在持续交付的业务环境中,大型容器逐渐暴露出许多缺点。软件行业努力通过优化来减少大型容器的缺陷。从历史上看,在做容器化的过程中,我们会采用原来运行应用程序的操作系统对应的容器。比如应用程序原来是运行在Centos上,那么我们会采用Centos的容器来构建我们的应用程序镜像。这种方法是正确的,因为它提供了安全的逐步迁移。该容器操作系统拥有作为一台服务器运行所需的所有组件,但对于我们的应用程序来说其实已经不再需要了。因此,容器化的下一步工作将是瘦身,将应用程序移植到微型容器。

微型容器是为提高效率而修改的优化容器。它仍然包含为软件应用程序提供更多缩放、隔离和奇偶校验的所有文件。但是,它是一个改进的容器,镜像中保留了优化数量的文件。留在微型容器中的重要文件是shell、包管理器和标准C库。

微容器与无发行的区别​

同时,在容器领域中存在“Distroless(无发行)”的概念,使用Distroless作为基础镜像是一种令人兴奋的保护容器安全的方式。它仅包含应用程序及其运行时依赖项。Distroless镜像会将所有未使用的文件提取出来。值得强调的是microcontainer和Distroless概念的区别。微型容器仍然包含未使用的文件,因为它们是系统保持完整所必需的。微型容器基于与常规容器相同的操作系统并实现了所有相同的功能,唯一的区别是其内部文件已得到增强,并且由于开发人员所做的改进,其尺寸变得更小。微型容器包含优化数量的文件,因此它仍然包含应用程序运行所需的所有文件和依赖项,但格式更轻更小。例如,对于BellSoft Alpaquita,微型容器只承载了启动OpenJDK应用程序所需的所有文件和OpenJDK运行的标准工具。这个微型容器经过了BellSoft团队的巨大改进,它的小尺寸提供了比Alpine Linux更高级别的安全性。总之,微型容器的主要特点体现在:

  • 它的尺寸更小;
  • 更高的分发、下载和扩展速度;
  • 安全性。微容器的安全性相对于那些较大尺寸的容器有了很大提高。从镜像中删除不需要的额外文件有助于降低外部攻击的可能性。

微容器选择  

如今在最小的容器中存在着相当多的基本镜像。一个很好的例子是Debian Slim。Debian Slim是最流行的Linux发行版之一,起源于更大的Debian docker。另一个著名的微型容器是Alpine Linux。这两个通用基础镜像仍然像大型容器一样包含所有内部组件,携带的文件大小也得到了改进,因而性能相对更好些。通用基础镜像尽管尺寸减小,但它们的行为方式与大型容器相同。Distroless镜像则截然不同,它通常只携带应用程序及其运行时依赖项。Distroless镜像被大大减少,并被认为是无包管理器的,另外它们的实际用途和操作也不同。回到微型容器,它们可以更小,指标也可以进一步改进。例如BellSoft (OpenJDK 的主要贡献者)使用 Alpine Linux 做到了这一点,并且发布了一个比Alpine 更小的新镜像——Alpaquita Linux。它更轻更小,完全可以与 OpenJDK 配合使用。作为将 musl 上的端口集成到 OpenJDK 的作者,BellSoft 进一步利用了这一强大的特性并改进了Alpine Linux,在其基础上创建了 Alpaquita Linux。Alpaquita Linux 除了更小的尺寸外,还将获得保证及时更新和完全可用的OpenJDK 标准工具。

综上,微型容器对云原生应用程序有明显优势。而大型容器则不同,价值点在于为市场提供更好的通用基础镜像解决方案。处于不同转型阶段的企业可以适当予以取舍和部署。

原文链接:

https://dzone.com/articles/how-microcontainers-gain-against-large-containers

崔莹峰,51CTO社区编辑,一名70后程序员,拥有10多年工作经验,长期从事 Java 开发,架构设计,容器化等相关工作。精通Java,熟练使用Maven、Jenkins等Devops相关工具链,擅长容器化方案规划、设计和落地。

责任编辑:薛彦泽 来源: 51CTO

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK