使用短生命周期容器(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天前
|
存储 监控 API
构建高效微服务架构:后端开发的现代实践
【5月更文挑战第9天】 在本文中,我们将深入探讨如何在后端开发中构建一个高效的微服务架构。通过分析不同的设计模式和最佳实践,我们将展示如何提升系统的可扩展性、弹性和维护性。我们还将讨论微服务架构在处理复杂业务逻辑和高并发场景下的优势。最后,我们将分享一些实用的工具和技术,以帮助开发者实现这一目标。
|
22小时前
|
负载均衡 JavaScript Java
构建高效微服务架构:后端开发的新视角
【5月更文挑战第13天】在现代软件开发中,微服务架构已经成为一种流行趋势。它通过将应用程序拆分为一组小型、独立的服务来提高可扩展性、弹性和可维护性。本文将探讨如何构建一个高效的微服务架构,包括选择合适的技术栈、设计良好的服务接口、确保数据一致性以及实现有效的服务发现和负载均衡。
|
23小时前
|
监控 Java 开发者
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第13天】随着现代应用的复杂性日益增加,传统的单体应用架构已不足以满足快速迭代和可扩展性的需求。本文将探讨如何通过微服务架构来提升后端开发的效率和系统的可靠性,涵盖微服务设计原则、技术栈选择、部署策略以及维护实践。我们将分析微服务的优势与挑战,并提供一系列实施建议,帮助开发者在构建和维护分布式系统时做出明智决策。
|
23小时前
|
存储 监控 API
构建高效微服务架构:后端开发的新趋势
【5月更文挑战第13天】在现代软件开发中,随着业务需求的多样化和开发流程的复杂化,传统的单体应用架构逐渐显得笨重且难以适应快速变化。微服务架构作为一种新兴的分布式系统设计方式,以其灵活性、可扩展性和技术多样性受到广泛关注。本文旨在探讨微服务架构的核心概念、设计原则以及实施策略,为后端开发人员提供一种提升系统性能和开发效率的有效途径。
|
23小时前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与部署实践
【5月更文挑战第13天】 在现代软件开发周期中,持续集成(CI)和持续部署(CD)已成为提升开发效率、保障产品质量的关键环节。随着云计算和微服务架构的普及,容器技术如Docker和Kubernetes为运维领域带来了革命性的变革。本文旨在探讨如何利用容器技术构建一个高效、可靠的自动化运维体系,实现从代码提交到产品发布的全过程自动化管理。通过深入分析容器化技术的核心原理,结合实际案例,我们将阐述如何优化持续集成流程、确保自动化测试的覆盖率、以及实现无缝的持续部署。
|
1天前
|
监控 持续交付 数据库
构建高效可靠的微服务架构:后端开发的新范式
【5月更文挑战第13天】 在当今软件开发的世界中,微服务架构已经成为了一种流行且有效的设计模式。它通过将大型复杂系统分解为一组独立的、可部署的服务来提高系统的可维护性、可扩展性和敏捷性。本文将探讨如何构建一个高效且可靠的微服务架构,包括关键的设计原则、技术选型以及可能面临的挑战。我们的目标是为后端开发者提供一套实用的指南,以便在构建现代化应用程序时做出明智的决策。
|
1天前
|
Prometheus 监控 Cloud Native
构建高效稳定的Docker容器监控体系
【5月更文挑战第13天】在微服务架构和容器化部署日益普及的背景下,对Docker容器的监控变得尤为重要。本文将探讨一种构建高效稳定Docker容器监控体系的方法,通过集成Prometheus和cAdvisor工具,实现对容器资源使用情况、性能指标和运行状态的实时监控。同时,结合Grafana进行数据可视化,为运维人员提供直观的分析界面,以便及时发现和解决潜在问题,保障系统的高可用性和稳定性。
14 6
|
2天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器技术的结合
【5月更文挑战第12天】 在当今快速发展的信息技术时代,企业需要灵活、快速地响应市场变化并持续交付高质量的软件产品。本文将探讨如何通过结合DevOps文化和容器技术来构建一个高效且稳定的云基础设施。我们将讨论DevOps的核心概念及其如何加速开发周期,以及容器技术如Docker和Kubernetes如何提供一致性、可移植性和扩展性。最后,文章将介绍实际案例,展示这种结合如何在现代运维实践中实现自动化部署、持续集成和微服务架构管理。
|
2天前
|
监控 API 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第12天】 在现代软件开发的浪潮中,微服务架构已经成为了设计复杂系统的首选模式。它通过将大型应用程序拆分成一组小而专注的服务来增强系统的可维护性和可扩展性。本文将探讨微服务架构的关键概念、优势以及如何在后端开发中实现一个高效的微服务系统。我们还将讨论一些常见的挑战和最佳实践,以帮助开发者避免陷入常见的陷阱。
15 6
|
3天前
|
监控 数据库 开发者
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第11天】在当今软件开发的世界中,微服务架构已经成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了设计、部署和维护微服务系统时面临的挑战,并提出了一系列实用的策略和最佳实践。我们将从服务的划分原则出发,讨论如何确保每个微服务的自治性,以及如何通过容器化和编排技术实现服务的高效运行。文章还将涉及监控、日志记录和故障恢复的策略,旨在帮助开发人员构建一个既高效又可靠的微服务环境。