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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 本文讲的是使用短生命周期容器(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)构建微服务化的工作流
目录
相关文章
|
7天前
|
运维 持续交付 API
从零构建微服务架构:一次深度技术探索之旅####
【10月更文挑战第28天】 本文记录了作者在从零开始构建微服务架构过程中的深刻技术感悟,通过实战案例详细剖析了微服务设计、开发、部署及运维中的关键要点与挑战。文章首先概述了微服务架构的核心理念及其对企业IT架构转型的重要性,随后深入探讨了服务拆分策略、API网关选型、服务间通信协议选择、容器化部署(Docker+Kubernetes)、以及持续集成/持续部署(CI/CD)流程的设计与优化。最后,分享了在高并发场景下的性能调优经验与故障排查心得,旨在为读者提供一套可借鉴的微服务架构实施路径。 ####
41 3
|
15天前
|
Kubernetes 负载均衡 Docker
构建高效后端服务:微服务架构的探索与实践
【10月更文挑战第20天】 在数字化时代,后端服务的构建对于任何在线业务的成功至关重要。本文将深入探讨微服务架构的概念、优势以及如何在实际项目中有效实施。我们将从微服务的基本理念出发,逐步解析其在提高系统可维护性、扩展性和敏捷性方面的作用。通过实际案例分析,揭示微服务架构在不同场景下的应用策略和最佳实践。无论你是后端开发新手还是经验丰富的工程师,本文都将为你提供宝贵的见解和实用的指导。
|
7天前
|
Kubernetes Cloud Native 微服务
云原生之旅:从容器到微服务
【10月更文挑战第29天】在这篇文章中,我们将一起探索云原生的奥秘。云原生不仅仅是一种技术,更是一种文化和方法论。我们将从容器技术开始,逐步深入到微服务架构,最后探讨如何在云平台上实现高效的服务部署和管理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的技能。让我们一起踏上这段激动人心的云原生之旅吧!
|
7天前
|
运维 Kubernetes Cloud Native
云原生之旅:容器化与微服务的融合
【10月更文挑战第28天】 在数字化转型的浪潮中,云原生技术如星辰般璀璨,引领着企业IT架构的未来。本文将带你穿梭于云原生的世界,探索容器化技术和微服务架构如何携手共舞,打造灵活、高效的应用部署和运维模式。我们将通过实际代码示例,揭示这股力量背后的奥秘,并展现它们是如何为现代软件开发带来革新。准备好了吗?让我们启航,驶向云原生技术的深海。
|
7天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
36 1
|
7天前
|
Cloud Native 持续交付 云计算
云原生入门指南:从容器到微服务
【10月更文挑战第28天】在数字化转型的浪潮中,云原生技术成为推动现代软件开发的关键力量。本篇文章将带你了解云原生的基本概念,探索它如何通过容器化、微服务架构以及持续集成和持续部署(CI/CD)的实践来提升应用的可伸缩性、灵活性和可靠性。你将学习到如何利用这些技术构建和部署在云端高效运行的应用,并理解它们对DevOps文化的贡献。
25 2
|
14天前
|
监控 API 持续交付
构建高效后端服务:微服务架构的深度探索
【10月更文挑战第20天】 在数字化时代,后端服务的构建对于支撑复杂的业务逻辑和海量数据处理至关重要。本文深入探讨了微服务架构的核心理念、实施策略以及面临的挑战,旨在为开发者提供一套构建高效、可扩展后端服务的方法论。通过案例分析,揭示微服务如何帮助企业应对快速变化的业务需求,同时保持系统的稳定性和灵活性。
44 9
|
15天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
62 7
|
14天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
51 6
|
14天前
|
Kubernetes 监控 数据中心
容器化与微服务:构建高效开发环境的双剑合璧
【10月更文挑战第20天】本文探讨了容器化技术(如Docker和Kubernetes)与微服务架构的结合,如何共同构建高效、灵活的开发环境。容器化解决了环境一致性、快速部署和资源隔离的问题,而微服务架构则提升了系统的可维护性和可扩展性。通过容器编排工具、CI/CD流程和服务网格,两者的结合进一步优化了开发和运维效率。文章还分享了实施这两项技术的最佳实践和职业心得。
下一篇
无影云桌面