Netflix 作为流媒体领域的首家公司,生动地诠释了企业如何整合最新技术以保持竞争优势。
在将部分服务迁移到容器时,Netflix 遇到了一些挑战,这促使其开发了容器管理平台Titus 。
现在,Netflix 在容器内运行视频流、内容编码、推荐、机器学习、工作室技术、大数据和内部工具等服务,总计 200,000 个集群和每天 50 万个容器。
组织正在采用容器化来开发新应用程序并改进现有应用程序,以跟上不断变化的数字市场的步伐。根据IBM® 的一项调查,约 61% 的容器用户表示,他们在过去两年中至少有一半的新应用程序使用了容器,而 64% 的用户计划在未来两年内将超过一半的现有应用程序容器化。企业应用程序现代化解决方案在这一转变中至关重要,可帮助企业保持竞争力和敏捷性。
本博客将讨论应用程序容器化的挑战、优势和用例。在深入讨论之前,让我们先定义一下容器化。
应用程序容器化是指在称为容器的单独包中执行软件应用程序。应用程序容器存储运行应用程序所需的所有内容,包括文件、库和环境变量。因此,无论使用哪种操作系统,应用程序都可以顺利运行,而不会出现兼容性问题。
通过将应用程序与硬件和其他软件依赖项分离,容器化可加快开发速度、提高效率并增强安全性。容器可以在任何主机操作系统上运行,同时保持隔离。容器为 Google 搜索、YouTube 和 Gmail 等主要服务提供支持。Google 还开发了 Kubernetes 和 Knative,这两个流行的开源平台用于管理容器和应用程序。
容器生成在一个系统上编写的代码的表示以及其相应的配置、依赖项、库等。这些表示充当与各种平台兼容的容器引擎。
容器的主要目的是将编程软件与不同的计算环境隔离开来。这样可以实现跨平台的一致代码执行,而不受开发环境和实践差异的影响。
此外,容器化技术充当主机操作系统。然而,如前所述,它们与父操作系统不同。
在当代商业环境中,容器经常被用来托管程序,并且在以下用例中效果特别好:
微服务
基于微服务的应用程序由许多独立的部分组成,大多数部署在容器内。各种容器共同构成一个有组织的应用程序。这种应用程序设计技术有利于有效的扩展和升级。在处理增加的负载时,必须扩展负载最高的容器,而不是整个应用程序。同样,可以修改单个容器,而不是整个程序。
CI/CD 管道
容器化应用使团队能够并行测试应用程序并加速其持续集成/持续交付 (CI/CD) 管道。此外,在测试环境中测试容器化应用程序可以密切体现其在生产中的性能,因为容器可以在主机系统之间移植。
重复性工作
批量作业和数据库作业是周期性的后台任务,非常适合与容器配合使用。每个操作都可以借助容器进行,而不会干扰其他并发作业。
DevOps
使用容器化应用可以快速创建应用程序一致且轻量级的运行时环境。这有助于DevOps团队根据需要构建、测试、启动甚至迭代应用程序。
尽管容器非常有益,但它也有一些局限性:
命名空间使主机上的每个容器能够从主机操作系统获取分配的资源,并将容器内部运行的进程与外部运行的进程分开。主机操作系统中的任何漏洞都可能对其所有容器构成威胁,因为它们运行在同一个操作系统上。此外,如果网络设置被破坏,获得一个容器访问权限的攻击者可以轻松访问其他容器或主机。
正在运行的容器一旦停止,其中的数据就会消失。需要持久文件系统来保存数据。大多数编排工具都支持持久存储,而供应商的产品在质量和执行方面有所不同。
虽然快速生成容器是有益的,但它也可能导致不受管理的容器蔓延并增加管理复杂性。
团队经常难以跟踪正在运行的容器,因为它们快速启动和停止。手动跟踪容器很不方便,因为它们的更新速度比常规主机快 12 倍。
应用程序容器化通过将各种功能与硬件依赖项和其他软件组件隔离开来,提高了速度、效率和安全性。容器化应用程序具有许多优势,包括:
由于容器化应用程序位于远离其他应用程序和系统组件的隔离环境中,因此一个应用程序中发生的任何问题都不会影响其他应用程序或底层系统组件。这种遏制有效地限制了潜在错误事件的范围。
由于独立于操作系统,容器化应用程序可在不同的环境(例如服务器、虚拟机、开发人员的计算机和云)之间移植。
容器比虚拟机更高效,因为它们不承载整个操作系统,因此更轻量。
容器化应用程序通过共享计算能力和应用层有效地利用机器的资源,允许多个容器在同一台机器或虚拟环境中同时运行。
增加容器实例以满足不断增长的应用程序需求是应用程序容器化中的一个平稳的过程。
虽然虚拟机和容器都以“虚拟化”特定计算资源为中心,但容器通常比虚拟机更受青睐。这是因为与容器化技术相比,虚拟机需要更多的开销。
无论操作系统如何,虚拟机 (VM) 支持的另一个优势是,它允许公司从一个或多个系统虚拟地运行多台服务器。容器则管理应用程序,并且可以在几秒钟内启动和关闭实例,因为它们是轻量级的。
让我们看一些例子来了解集装箱化如何帮助公司削减成本。
挑战:当平台活跃用户数量激增,每月订阅用户超过 2 亿时,Spotify 面临着管理增加的工作量的挑战。
解决方案:为了解决这个问题,Spotify-
将其微服务容器化,这些微服务之前在虚拟机(VM)上运行。
开发了一个容器编排平台,后来被命名为 Helios。这些变化旨在提高开发速度并降低成本。
结果:在实施方面,公司 -
通过容器化管理工作负载、集群和实例。
建立了基于 Docker 的编排平台,用于管理所有 Spotify 容器和服务器。Helios 具有 HTTP API,用于与托管容器的服务器进行交互。
将 Kubernetes 与 Docker 集成,以加快开发和运营任务。
挑战:报业巨头《金融时报》在其平台上处理大量内容。团队的目标是尽量减少与 AWS 服务器运行相关的成本。
解决方案:他们通过升级框架并转向容器来实现这一目标,从而将云服务器管理成本降低了 80%。以下是他们在使用 Docker 作为容器时采用的一些策略 -
结果:开发团队专注于支持技术集群的健康并尽量减少服务器成本。因此,他们-
创建基于Kubernetes的私有容器编排平台。
将技术栈容器化,包含 150 个微服务。
挑战:Pinterest 必须处理网站上发布的大量图片的额外工作和托管成本。为了进行适当的投资,它寻找新技术。
解决方案:团队的目标是 -
结果:以下是帮助 Pinterest 从长远来看避免巨额开支的容器化流程 -
所有服务特定的依赖项都集成到所谓的服务容器中。此方法可确保在所有开发系统之间仅传输一个 AMI。
开发了一个名为 Telefig 的工具,用于根据需要启动和停止容器。该工具有助于管理所有影响容器的依赖关系。
实现了容器编排方法,建立了一个用于整合批处理任务的多租户集群系统。
以上案例表明,容器化可以降低成本、提高生产力。Spotify、金融时报、Pinterest 等主流公司已经使用容器来应对处理额外工作负载和运营成本以及提高开发和交付流程效率的挑战。容器化不仅是一种高效的资源管理方式,而且可以促进复杂环境中的变革和增长。
一些流行的容器化应用程序平台包括:
Docker
Docker 是一个开源软件平台,用于在共享操作系统(OS)以及相关工具网络上生成、部署和监督虚拟化应用程序容器。
龙芯
LXC 是一个 Linux 容器运行时,由工具、模板、库和语言连接组成。它非常基础,适应性强,并且包含上游内核支持的几乎所有容器功能。
韋克
rkt,也称为 Rocket,是一个容器引擎,可让您管理单个容器或使用 Docker 容器,同时为您提供更多灵活性和对容器化应用程序的控制。
克里欧
容器管理平台的容器运行时接口 (CRI) 支持与 OCI 兼容的运行时。它经常与 Kubernetes 一起使用来代替 Docker 容器。
标准容器化应用程序设置的核心组件由三个主要元素组成:
容器引擎
Docker 容器、CRI-O、Containerd 和 Windows Containers 等工具减少了管理应用程序所需的管理费用,并使其易于启动和在环境之间转移。
容器编排器
Kubernetes 和 OpenShift 等平台可以管理大量容器、实现自动化部署并保证平稳运行。
托管 Kubernetes 服务
Amazon EKS 和 Google GKE 等平台让 Kubernetes 管理变得简单。它们甚至简化了经验不足的组织的设置和操作。
容器化在顺利和成功地实施 DevOps 中起着至关重要的作用,促进了原本难以在系统上构建的应用程序的开发。无论是初创公司还是大型企业,容器化都能提供敏捷性、可移植性、灵活性和速度。容器使开发、测试和生产等各种环境变得相同。因此,您无需依赖运营团队来确保不同的服务器运行相同的软件。
Docker 是一种广泛接受的容器化形式,允许软件开发人员将其应用程序捆绑到标准化隔离容器中。Docker 简化了任何系统上的应用程序执行,无论其底层基础架构如何。
理论上,大多数应用程序都可以容器化,但该策略是否成功取决于应用程序的设计、依赖关系和资源需求等因素。因此,应检查每个应用程序以确定是否可以实施容器化及其好处。Web 应用程序、微服务、无状态应用程序、开发和测试环境以及 CI/CD 管道是可以容器化的应用程序的一些示例。
容器化技术正在蓬勃发展,并迅速扩展。在 DevOps 领域,Kubernetes 和 Docker 正在吸引开发人员的关注,因为它们不断更新以满足市场需求。随着微服务架构的发展,这些工具使团队可以更轻松地管理容器和基础架构。换句话说,新功能可以更快地推出,顺利融入正在进行的开发和交付流程。