行业新闻与博客

容器化微服务的好处和挑战

我们都知道,测试和部署软件是一个复杂且耗时的过程。容器化微服务可以提供帮助吗?也许-这是要知道的……

编者注:这是软件开发人员和技术作家 Nahla Davies 的客座博客投稿。她探讨了什么是容器化微服务,并分享了她对您在使用它们时将面临的一些优势和挑战的专家观点。

使用“微服务”(应用程序或软件的孤立和特定部分或功能)开发或改进应用程序对许多软件开发组织来说是高效且有效的。然而,每家公司都在努力定期开发、测试和部署微服务,并且尽可能少地打嗝。这就是容器化微服务可以提供帮助的地方。

容器化是微服务完美互补的开发实践。根据 2018 年的一项调查,超过 64% 的受访公司正在采用微服务架构。如果利用得当,容器化是一种属性,因为它可以帮助您开发和操作微服务。但另一方面,它也使服务器配置和数据存储更加复杂。

因此,组织只有在充分分析利弊、挑战并制定未来克服挑战的策略后,才能开始使用容器化进行微服务开发。今天,我将详细分解这些元素,并探索贵公司可以用来成功实施容器化微服务开发的潜在策略。

让我们把它算出来。

容器化微服务的优缺点

用户与后端容器化微服务之间关系的图示
图片说明:容器化微服务的图示以及它们如何在后端运行。

使用容器化微服务是一种新的应用程序架构方式,在过去几年中变得越来越流行。简而言之,组织或开发人员可以通过在同一容器环境中应用单个应用程序服务来创建容器化微服务。但是什么是容器和微服务?在我们进一步讨论这个主题之前,让我们快速定义每个术语的含义。 

容器是操作系统中的一个环境,旨在允许多个应用程序(及其依赖项,如它们的配置文件和库)在独立进程中轻松部署和运行。(注意:这与在硬件级别运行的传统虚拟机环境不同。)这允许软件程序在从一个计算环境移动到另一个计算环境时可靠地运行。例如,无论应用程序是在云中运行还是在笔记本电脑上运行,容器都可以缓解操作系统中分布之间存在的任何差异。 


另一方面,微服务是一种将应用程序开发为较小服务集合的方法。这是通过单一界面中的轻量级 API 实现的。使用微服务的优势包括: 

  • 可以独立部署, 
  • 松散耦合,并且
  • 易于测试。  

容器化的许多好处——更快的应用程序测试、更多地使用有限的服务器资源以及显着降低的开销成本等等——同样适用于微服务开发和测试,就像它们对其他应用程序和代码一样。

也就是说,您的组织在开始将容器化微服务实施到您的工作流或操作中之前,应该了解它们的主要优点和潜在缺点。

实施容器化微服务的优势

容器化微服务可能会为您的组织提供许多主要好处,包括:

  • 在开发或测试自动化微服务应用程序或代码块时具有更高的一致性。由于所讨论的微服务被隔离在一个容器中,因此需要预测或处理的变量更少。这意味着您在开发、测试和部署等主要阶段可能会面临更少的潜在问题。
  • 改进了支持增长的可扩展性。与虚拟机开发(已经存在较长时间)相反,容器化允许您将多个容器堆叠在同一服务器硬件上,如果需要持续增长,甚至可以在同一操作系统环境中堆叠。
  • 为微服务或其他开发的应用程序提供更大的隔离。它限制了资源消耗,并帮助您进一步扩展有限的资源和预算,即使在开发多个微服务时也是如此。
  • 容器化微服务组高效运行。因为它们需要更少的资源,所以即使运行微服务组对您的组织来说也不是特别繁重。将此与在虚拟机环境中运行的相同数量的微服务进行比较。

总体而言,与仅使用或完全使用虚拟机开发和测试多个微服务相比,容器化微服务提供更高的效率和成本效益。

使用容器化微服务的缺点

尽管如此,容器化微服务确实有一些潜在的缺点需要考虑,例如:

  • 增加您的劳动力的复杂性。即使在今天,许多开发人员也难以处理容器的抽象性质,尤其是在将微服务实现到更大的应用程序 / 平台时。幸运的是,有几个专有的容器管理或开源工具可以帮助开发人员做到这一点。
  • 开发人员必须熟悉 Kubernetes或类似工具才能确保容器编排。您的服务器还必须适应不同的容器运行时以及每个容器所需的网络和存储资源。
  • 可能不适用于某些旧版应用程序。虽然微服务很有用并且在应用程序开发中占有一席之地,但它们可能并非在所有情况下都有效(取决于您尝试运行的应用程序)。在容器化环境中实施它们时,这可能会带来额外的挑战。

由于这些可能的缺点,许多开发人员在大多数情况下都使用容器化微服务,除非他们必须处理非常少量的微服务。如果他们正在处理功能有限的简单应用程序,他们也可能会选择虚拟机环境。

制定基于容器的微服务策略

如果您选择使用容器化微服务,您将需要一个出色的策略来确保在整个组织中正确实施。

强调网络安全

首先,您需要确保您的网络安全不会因采用基于容器的微服务而受到影响。请记住,容器化环境中的微服务如果以特权模式运行,则可以访问主机服务器的根功能。这允许他们直接访问主机的根功能。对这种可能性掉以轻心是不值得的,尤其是在网络犯罪和安全漏洞增加了约 11% 的情况下。(查看这篇网络犯罪统计文章,了解其他当前的网络犯罪统计数据。)

使用基于容器的微服务还强调了良好的网络策略和安全上下文定义的重要性。您的组织或网络安全团队需要确保未经授权的人员无法访问容器。可能需要频繁的审核或容器映像扫描。

考虑容器运行时

容器化微服务的另一个关键考虑因素与容器运行时有关(软件中的一个组件,旨在在主机操作系统上运行容器)。为获得最佳结果,您的团队应利用一整套配置管理工具(如 JuJu、Rudder 或 SysAid)。您拥有的管理工具越多,您就可以更好地根据您的需求和限制来定制或调整您的容器化开发流程。


同样,尽量避免在执行阶段之后单独或单独部署容器运行时。您的运行时提供商可能会影响容器化微服务开发的整体成本效益。Open Container Initiative 是一个协作项目,目前正在尝试建立通用容器平台标准——使用它来确保您的容器运行时尽可能地运行。

实施编排工具

确保让每个人都熟悉 Kubernetes 等编排工具。此工具可以帮助您跨服务器自动执行重要的自动化任务。或者,您可以使用除 Kubernetes 之外的其他服务器编排器,如果您不需要高规模或分布式架构,这可能会过度杀伤或过于复杂。

一些替代方案包括: 

  • 谷歌云运行, 
  • 牧场主, 
  • Docker Swarm 和 
  • 游牧民族。
谷歌云运行平台的截图。 原始图像来自 gregramblings.com。
图片来源:Gregsramblings.com

优先考虑网络和通信

您的组织还应考虑可能出现的网络和通信问题。您开发的微服务需要相互通信或与中央主机服务器和操作系统 (OS) 通信。服务机可能能够使用抽象的代理组件处理微服务之间的请求,从而解决这一挑战。

或者,如果您的容器化微服务通过外部端点进行通信,您将需要一个专用的通信门户。该门户将验证和中继外部组件之间的请求,并防止意外的安全漏洞。请记住,聘请专门的开发人员来开发独特的门户可能会很昂贵——您可以期望为开发人员完成这样的任务 支付至少 45 美元一小时的费用。

最后,如果您预计容器之间的流量很高,您可能希望投资负载均衡器(一种旨在跨多个服务器分配流量的网络解决方案)。

外部存储规划

不要忘记容器之间的外部存储计划。就其本质而言,容器化要求数据在每个实例被设置时消失。因此,您需要一个外部数据存储机制来保持有价值的数据或进度完好无损。

幸运的是,上面提到的许多编排工具都将附带数据存储解决方案。在比较数据存储解决方案时,请查看每个工具的特性和属性,以选择最适合您组织需求的编排工具。

关于容器化微服务的最终想法

归根结底,容器仍然是部署功能性微服务的一种流行方式,即使它们给开发表带来了一点额外的复杂性。它使您的软件的测试和部署更加可预测。这是因为您可以使用相同的容器(或环境)来托管您正在为即将进行的部署测试或构建的软件,同时使用比其他选项更少的资源。  

您组织的开发人员应该研究可以帮助容器化微服务开发的商业和开源工具,以充分利用这种新颖但必要的策略。

需要帮助吗?联系我们的支持团队 在线客服