使用短生命周期容器(Ephemeral Containers)构建微服务化的工作流

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是使用短生命周期容器(Ephemeral Containers)构建微服务化的工作流,【编者的话】本文作者Ross Jimenez来自CenturyLink Labs,他受到了Iron.io一篇介绍容器微服务的相关文章的启发,于是介绍了自己团队在构建Panamax的时候所用到的微服务的理念,此外作者还大致介绍了微服务和容器技术相结合之后的优势,以及他们怎样通过微服务化的容器来构建工作流模型。
本文讲的是使用短生命周期容器(Ephemeral Containers)构建微服务化的工作流 【编者的话】本文作者 Ross Jimenez 来自CenturyLink Labs,他受到了Iron.io一篇介绍容器微服务的相关文章的启发,于是介绍了自己团队在构建Panamax的时候所用到的微服务的理念,此外作者还大致介绍了微服务和容器技术相结合之后的优势,以及他们怎样通过微服务化的容器来构建工作流模型。

通过Docker容器可以构建具有特定功能的工作流,也可以让容器在后台执行一系列的异步任务,我们所开发的 Panamax项目 ,其工作模式正是依据Docker容器的这一特性进行设计的。我偶然在Iron.io看到这篇有趣的文章,“ Docker化的微服务的短暂生命周期 ”,尽管我已经对Iron.io所提供的服务很熟悉,但是通过这篇文章,我更深入地了解他们如何使用容器,特别是使用短生命周期的容器来完成他们的服务,这的确给了我很多启发,于是我写下了这篇博客。

我们在项目中也一直使用短生命周期的容器,并把它们作为工作流中的一系列的功能性的容器,但是具体的使用方式和Iron.io有所不同。在Iron.io中,这些具有特定功能的工作流可以被一个事件触发,或者可以被提前指定好,并且可以按照即时的需求在后台完成对应的工作。在我们的使用环境中,工作流中的最初的几步要求先被完成,整个工作流能否顺利执行要依赖与工作流开始几步所产生的输出结果。

Panamax中工作流的用例:

在Panamax项目中,我们希望其中的一个功能是帮助我们的用户在云服务平台上远程启动一个集群,这样用户就可以轻易地在上面部署Panamax模板。我们目前已经可以实现在远程基础设施上部署模板,但是这需要对基础设施进行相关的设置,并且 安装远程代理/适配器 ,这些都是相互独立的过程。

让我们通过一个例子,来看如何进行端对端的自动化操作。这个例子可能是一个比较简化的例子,假设这里的功能需要三个基本的步骤来完成:
  • 虚拟机创建—在提供集群服务的云服务平台上开启虚拟机
  • 对虚拟机进行管理/编排工作—(Kubernetes、 CoreOs 等等)
  • Panamax远程客户端/适配器的安装以及代理注册服务

让我们来继续讨论,对于上面这几个步骤,由于每一步的相关执行逻辑都被封装在对应的Docker容器中,所以每一个容器仅仅负责执行一些指定的步骤。理论上我们可以通过并行的方式来同时启动这些容器,但是实际上我们会受到一定的限制,当前这一步如果想要正常运行,就必须要从前一步的运行结果中取得某些数据(举例来说,如果我们不知道在step1中所创建的服务器的地址,那么在step2中我们就无法安装对应的编排工具)

工作流的执行

在尝试处理不同例子的过程中,我们逐渐构建起了一个一般性的通用框架,我们可以用这个来进行基于容器的工作流的编排,就像我们在上面所描述的那样。此外,我们的框架还需要完成以下的工作:
  • 接收将要被执行的工作流的描述信息(也就是一个容器的列表)
  • 按照正确的顺序启动容器并且对执行过程进行监控
  • 在工作流的不同执行阶段对数据进行打包和调度
  • 报告当前工作流的执行情况

还有一个需要解决的有趣问题是,如何在容器之间进行数据的迁移。我们通过使用Unix的管道模型(piping model),来解决这个问题。我们会attach到一个运行容器的标准输出,并将输出的内容捕获,之后再将数据写入工作流链中下一个容器的标准输入流中。随着工作流中的后续步骤被不断执行,前面几个步骤的输出结果就变成了接下来几个步骤的输入结果。

开始的时候,我们将这个框架集成到了Panamax项目中,但是我们很快就要将这个框架以单独的项目的形式发布出来,这样就可以帮助其他开发者轻松实现类似的工作模式。

用于提供微服务的短生命周期容器

下面让我们讨论一下在具有特定功能的工作流中使用容器的优点:
  • 容器可以运行在任何支持容器工作方式的计算资源上,所以通过容器构建的整个工作流或者是工作流中的某些步骤也可以直接在这些计算资源上运行。
  • 使用容器可以很方便地对所执行的任务进行逻辑单元的划分,并且容器之间的隔离性可以使其在基于微服务的设计模式中很好地进行工作。
  • 只有在容器实际执行的时候,计算资源才会被消耗,也就是说,只有在具体执行任务的时候才需要计算资源。
  • 工作流的模块化性质可以使得工作流中的每个步骤或者每一个逻辑单元,都变得容易进行 修改/扩展/重组/架构解耦。

考虑到在采用上述策略后,我们整个过程中的每一步都是解耦的,这样的话,对某个逻辑单元进行重用,就会变得很容易。这就是微服务架构的一个令人兴奋的优点:即对于工作单元的可组合的能力。工作单元可以被重新排序,容易修改并且易于扩展。虽然,我们用于工作的容器都是用GoLang语言来构建的,但实际上,每一个容器都相当于是一个黑盒,因此,开发者可以用任何他们自己希望的方式来实现。这与Panamax的远程客户端/适配器的概念很相似,它们同样都是被封装在容器中。

特定功能的容器工作流

我希望通过上面的介绍,你已经对这个模式的具体工作方式有了一些了解。虽然我们这里讨论的是一个很具体的例子,对于这种工作模式来说,还存在着更多的可能性。这种模式里构建即时所需的传感器驱动(on-demand sensor driven)和基于事件的架构(event based architectures)的能力使我感到非常兴奋, 此外,对于如何计算资源被消耗的过程方面,也给了我很多启发。如果Docker允许你在亚秒级别启动一个容器,在许多情况下,解决方案可以被完全重新构建,目的是要使得解决方案更加能基于事件驱动(event driven)以及满足实时需求(on-demand)。这意味着资源密集型的解决方案将变得更少。因为计算资源只有在短生命周期容器存在的情况下才会被需要。

还存在一种可能的解决方案:构建基于容器的函数库,这个函数库可以帮助非技术型用户很容易地通过可视化的方式构建他们自己的工作流。比如传感器类型的容器可以查询API、 执行容器可以执行工作单元。最后再说一点,虽然我们目前只开发了最基本的顺序工作流,一旦你在实际工作中需要使用更复杂的工作流,只要遵照一些工作流模式的简单的逻辑规则, 你就完全有可能自己构建出一个独特的解决方案。将上面提到的所有的这些优势结合在一起,再加上容器的“到处运行”的特性,我想以后可能会产生出许多令人称赞产品。

你如何使用微服务?除了最基本的应用,你还使用Docker做过什么其他的事情?我们希望听到你的技术分享,或者直接参与到我们的 开源项目中

原文链接:Using Ephemeral Containers in a Micro-Services Workflow (翻译:王哲 )

===========================
译者介绍
王哲, 浙江大学SEL实验室 硕士研究生,目前在云平台团队从事科研和开发工作。浙大团队对PaaS,Docker,大数据和主流开源云计算技术有深入的研究和二次开发经验,团队现联合社区将部分技术文章贡献出来,希望能对读者有所帮助。

原文发布时间为:2015-02-10 
本文作者:hessen 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:使用短生命周期容器(Ephemeral Containers)构建微服务化的工作流
目录
相关文章
|
4天前
|
消息中间件 Kubernetes Java
构建高性能微服务架构:从理论到实践
【2月更文挑战第24天】 在当今快速发展的数字化时代,微服务架构已成为软件开发领域的关键趋势。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、技术选型和性能优化策略。我们将通过实际案例分析,揭示微服务架构在提高可伸缩性、容错性和维护性方面的优势,并讨论在实施过程中可能遇到的挑战及其解决方案。
|
6天前
|
Kubernetes 开发者 Docker
基于容器技术的微服务架构
基于容器技术的微服务架构
10 0
|
5天前
|
消息中间件 缓存 持续交付
构建高效微服务架构:从理论到实践
【2月更文挑战第23天】 随着现代软件系统向着复杂且动态的环境演进,传统的单体应用架构已不足以应对快速变化的市场需求。微服务架构作为一种新兴的架构模式,以其灵活性、可扩展性和技术多样性受到广泛关注。本文将深入探讨微服务架构的设计原则和实施策略,通过具体案例分析如何构建一个既满足业务需求又保证系统稳定性的微服务系统。我们将讨论微服务拆分的策略、服务间通信的最佳实践、数据一致性的挑战以及持续集成与部署的重要性。文章的目的是为开发者、架构师和技术决策者提供一份实操指南,帮助他们在构建和维护微服务系统时做出明智的选择。
|
5天前
|
存储 Kubernetes 持续交付
构建高效微服务架构:后端开发的新趋势
【2月更文挑战第23天】在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为众多企业后端开发的首选。本文将深入探讨微服务的核心概念,剖析其设计原则,并通过具体案例展示如何在现代后端开发实践中实现微服务的高效构建与管理。
|
3天前
|
监控 持续交付 开发者
构建高效微服务架构:从理论到实践
【2月更文挑战第25天】本文旨在深入剖析微服务架构的核心概念、设计原则以及实践中的关键技术挑战。通过探讨微服务的独立性、分布式特性和弹性机制,文章为读者提供了一套系统化的方法论,以指导如何构建和维护一个高效、可扩展且容错性强的微服务系统。文中将结合案例分析,展示微服务架构在真实业务场景中的应用,并提供性能优化和故障恢复的策略建议。
54 3
|
1天前
|
安全 数据管理 API
构建高效微服务架构:从理论到实践
【2月更文挑战第27天】 在数字化转型的浪潮中,微服务架构已成为企业追求敏捷、灵活与可扩展性的关键解决方案。本文将深入探讨微服务的设计原则、开发流程以及如何在实际项目中实现一个高性能的微服务系统。我们将通过分析微服务的核心优势,揭示其背后的技术挑战,并提供一系列切实可行的策略来优化微服务的性能和稳定性。文中不仅包含了丰富的理论依据,还结合了实际案例分析,为开发者和企业决策者提供了一套全面的微服务实施指南。
|
1天前
|
消息中间件 敏捷开发 运维
构建高性能微服务架构:策略与实践
【2月更文挑战第27天】 在当今快速迭代和持续部署的软件发展背景下,微服务架构因其灵活性、可扩展性和技术异构性的优势而成为众多企业的首选架构模式。然而,随之而来的复杂性管理和性能优化问题也不容忽视。本文深入探讨了构建高性能微服务架构的策略与实践,包括服务拆分原则、通信机制、数据一致性保障以及监控和故障处理等方面。通过分析具体案例和最佳实践,旨在为开发者提供一个清晰、高效的微服务性能优化路径。
|
2天前
|
监控 Kubernetes Docker
构建高效可扩展的微服务架构
本文将详细介绍如何构建高效可扩展的微服务架构,包括设计原则、技术选型和实施步骤。通过采用微服务架构,企业可以实现系统的解耦、灵活性和可伸缩性,提升开发效率和系统性能。
|
2天前
|
存储 Java 持续交付
构建高效微服务架构:从理论到实践
【2月更文挑战第26天】在现代软件开发的浪潮中,微服务架构已成为企业追求敏捷、可扩展和易于维护系统的重要解决方案。本文将深入探讨微服务的核心概念、设计原则以及如何在实际项目中实施微服务架构。我们将通过一个示例来揭示拆分传统单体应用的步骤,并讨论微服务架构在提高开发效率、支持快速迭代和优化资源使用方面的优势。同时,我们也将指出微服务实施过程中可能遇到的挑战,如服务发现、配置管理和分布式事务处理,并提出相应的解决策略。
|
3天前
|
消息中间件 负载均衡 API
构建高效微服务架构:策略与实践
【2月更文挑战第25天】在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性成为企业技术升级的关键选择。本文深入探讨了构建高效微服务架构的策略和实践方法,旨在为开发者提供一套系统的设计与实施指南。文中不仅阐述了微服务的核心概念和优势,还详细分析了在设计、部署和维护微服务过程中可能遇到的挑战及解决方案,同时结合案例分析,展示了如何在实际项目中落实这些策略。

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版