云计算基础设施持续集成实践

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
资源编排,不限时长
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 在首届阿里巴巴研发效能嘉年华上,来自阿里的企业服务研发工程师朱波(问樵)带来了题为《云计算基础设施持续集成实践》的分享。在分享中,他详细介绍了如何利用资源编排工具像软件项目开发一样来管理基础设施。

【演讲PDF】: https://yq.aliyun.com/attachment/download/?id=1837

【演讲视频】: https://yq.aliyun.com/edu/lesson/551
研发和传统基础设施交互方式

通常情况下,在开发过程中需要和基础设施打交道,需要在项目中申请开发、测试以及预发生产环境。在IDC时代,我们需要向IT部门申请这些资源,其批准后,我们才能获得这些资源。如果这些资源恰巧不足,我们只能等待购买新的资源或者更换其他资源。

2df124787f3652d105338b8d36904ea4efbbd4ac

当拿到这些资源之后,需要对开发、测试、预发、生产环境进行四次相同的配置;当应用架构做了调整之后,需要对相应的四个环境进行变更以保证一致性。这个过程对于IT和研发人员来讲是比较痛苦的过程;而且,由于应用是一个不断迭代的过程,因此这种痛苦也是比较持续的过程。

DevOps

那究竟有没有一种方式能够让我们快速获取基础设施?能够方便管理基础设施?能够优雅变更基础设置?能够持续集成基础设施呢?

答案是DevOps。DevOps的出现为解决上述问题带来了曙光。

f10a1922b6167dab86b619ac7932e1110f542161

DevOps整合了以前割裂的研发和运维,它要求研发做到开发敏捷化、精益化、流程自动化,并且能够持续集成、持续交付,对于较大的项目要求其能够切割成几个快速交付的小项目。

但是,DevOps只是提供了指导思想,而不是具体的解决方案。那具体应该怎么做呢?答案是云计算。云计算给我们带来了前所未有的便捷性。目前,阿里云提供了七十多种云产品,用户可以根据自己的需求来获取这些资源,随时购买、随时释放。

2ee7103b57530d3a7e298ccdcf910dc0a9fe9730

阿里云提供了两种方式便于用户去获取它们:一是通过WebUI获取配置资源;二是集成各产品openAPI的方式获取配置资源。前者是一种手动的方式,当需要的产品较多时,该方式不可行;而后一种方式要求运维人员具有一定的开发经验才能配置,还需要知道每一个openAPI的细节,增加了项目开发量,并且,当需要集成的产品较多时,所需的openAPI也就随之增加,进而导致代码越发臃肿,对这些代码的运维和持续集成都是不小的挑战;另外,通过openAPI方式获取的配置资源是混合在一起的,没有区分开发、测试环境,有可能会导致一些误操作。


那么有没有一种更好的集成方式呢?

4dc1a3ba55a0cf12f29294842ecd01d76938d98a

答案是肯定的。阿里云提供了资源编排服务,该服务能够让我们把基础设施架构完全模板化,(模板是JSON格式的文本文件,在该文本文件中,可以通过声明的方式定义资源需求、说明资源依赖关系和配置细节);之后将模板提交到编排引擎,编排引擎会根据模板中提供的信息创建资源栈,我们可以通过资源栈这一视角,管理资源,可以做到权限控制、资源升级,以及根据应用的需求进行扩容和缩容的操作。

相较于之前提到的openAPI集成的方式,资源编排这种方式不要求运维人员具有开发经验,它采用声明的方式定义资源以及资源之间的关系,易于编写;由于模板是文本文件,因此可以通过代码的方式对模板进行版本控制;此外,资源编排帮助大家屏蔽了集成openAPI所要考虑的细节问题,可以做到通过模板自动化构建一组资源,无需人工值守,是0部署的过程;最后,由于资源编排所创建的资源全部归属一个资源栈,因此可以根据资源栈进行软件生命周期的管理、监控、报警。

基础设施即代码

94400633cbbed7373f61d72276b89f3b8dcf8eb5

当基础设施可以通过文本文件表述时,那就可以利用研发的经验对基础设施进行开发。将基础设施架构转化为模板的过程就相当于研发中Coding的过程:提交模板之后,再让其他同事Review该模板,然后再将模板提交到SVN、GIT库中进行版本控制。这样一来,相较于以前手动进行资源变更,资源编排实现了将一切纳入版本控制之下,像测试你的程序一样测试模板。

资源编排能在哪些场景下提高研发效率呢?下面来看几个具体的场景。

场景1:快速构建基础设施

355eb44b5139e846987c259d4436a6a00b32feed

在研发过程中通常需要构建开发、测试、生产以及预发环境。这四个环境的基本架构相同,只是各个环境中的网络配置存在差异,因此我们可以将这四个环境转化为一个模板。在模板中,根据不同的生产环境配置不同的网络参数,也就是通过一个模板生成四种不同的环境。例如,要生产开发环境时,在提交模板到编排引擎的同时指定需要生成的是开发环境,编排引擎则会根据模板中的信息生成开发环境,当需要生成生产环境时,只需修改对应的参数即可。总结来说,就是可以通过基础设施模板随时随地地生成各类环境,进而提升研发效能。

场景2:方便管理基础设施

8271e100b7534cebcf38423d183f0fae4325b79e

如上图所示生产环境资源栈、预发环境资源栈、测试环境资源栈、开发环境资源栈架构类似,都是高可用、高安全的环境。尽管这四个环境的用处不同,但其基础架构却保持高度一致。

那么如何保障这四个环境的一致性以及它们的运维管理呢?

如果采用手动的方式配置环境一致性,容易导致环境之间的不一致,进而在测试时出现一些问题,浪费研发人员的精力。通过资源编排可以保证这些环境的一致性,也就是通过相同的模板生成开发、测试、生产、预发环境,进而保证环境的一致性,而且这些环境所生产的资源存放在各自独立的资源栈中,可以通过资源栈进行相应的运维管理、版本控制。

场景3:优雅变更基础设施——灰度发布

c715e87bc191e408763958832d1b6eade0e16d32

产品的灰度发布可以通过资源编排实现,其过程包括:申请相应的虚拟机资源,然后再将新版本的应用部署到虚拟机上,再将虚拟机添加到原来的生产环境中,再配置相应的流量规则到新的虚拟机,进而实现灰度发布。

首先写一个模板,在该模板中声明所需的虚拟机资源;然后再给该虚拟机指定网络;然后再在该模板中配置基于负载均衡的流量规则,把相应的流量导入虚拟机中,再将该模板提交到编排引擎中进行编排,当资源栈创建完成后,灰度发布也随之完成。通过资源编排进行灰度发布有以下几点优势:

·灰度过程不影响正在运行的应用

·新版应用挂入已有的SLB,并自动配置流量,应用发布不停机

·发布失败自动回滚

·验证结束后可整个删除灰度部署

场景4:优雅变更基础设施——蓝绿发布

74c4527dd53a1137394702e7404e8a926e48b1fd

场景4和场景3类似,它是一个蓝绿发布。蓝绿发布意味着用新版的应用彻底替换老版本应用,这一过程也可以通过资源编排实现。通过修改原有的模板,再提交到编排引擎;编排引擎根据新的模板更新或者创建新的资源栈;在更新或创建资源栈时,将负载均衡的流量切换后新的资源栈上,非常优雅地实现蓝绿发布的过程。通过资源编排进行蓝绿发布可以实现更新过程不影响正在运行的应用;通过SLB自动切换网络流量,应用不停机升级;升级失败自动回滚;并且,同一个资源栈可以多次升级迭代。

场景5:云基础设施架构持续集成

a831e1b976176b4842fd15f04b95ec358635e3fa

当基础设施可以用文本文件来表述时,则可以利用研发的经验对基础设施进行运维管理。首先可以同需求管理工具对基础设施的需求进行管理;其次再根据需求进行相应的模板开发;再将模板提交到代码仓库中,让同事帮忙Review模板后再通过Jekins之类的持续集成工具进行模板提交的验证工作,然后新模板会被传送到资源编排服务,资源编排服务会新模板创建资源栈进行验证,进一步验证根据新模板创建的环境是否符合预期。

实现了根据需求来修改模板、丰富模板,最终彻底满足需求。后期,如果再需要创建此类环境,只需从代码仓库中下载相应的模板,再提交到编排引擎创建环境即可,也就是基础环境运维彻底变成了项目开发的过程,进而大大提升了研发的效率。

资源编排工作流程

874b7c2b9f0429fd92401fa270e5587b72cff429

通过上述场景,可知资源编排在基础设施的构建、管理、变更、集成方面对研发效能有着很好的提升。下面来具体看下资源编排的工作流程。

资源编排的工作流程可分为四个阶段:架构设计、模板开发、创建资源栈、资源栈维护。架构设计阶段是根据需求来设计基础设施的架构;模板开发阶段是将设计的基础设施架构转化为对应的模板;再将该模板提交到编排引擎,编排引擎会根据这一模板创建资源栈;基于资源栈,运维人员可以进行相应的维护操作;在维护过程中发现的问题再反馈到架构设计阶段,更新需求,从而实现完整的闭环。

模板结构

ab3df09a44673b5288f5f84b8f7f6a0436672285

模板是资源编排的基础,其具体结构如上图所示。模板是一个包含JSON字符串的文本文件,这个JSON字符串由以下部分组成:(1)资源编排的版本;(2)用于对模板/架构描述的Description字段;(3)参数可用于在资源栈创建时覆盖模板中的某些值,用来提高模板的灵活性和可复用性;(4)Resources字段是用来定义架构所依赖的云计算资源,配置应用环境和部署细节;(5)Outputs字段用于资源栈创建完成后,返回必要的架构部署信息,如ECS的IP地址、SLB的访问地址等。

下面来重点看一下资源是如何模板中声明的。

ed34e6ddc7cdac8f6ac39bc69eb43a185d14b387

资源的声明主要是在Resources字段完成的,如上图代码所示。在该字段中,声明了WebServer资源,其类型是ALIYUN::ECS::InstanceGroup,每一个资源的类型是唯一确定的,用于告知编排引擎在创建时所需的资源;Properties字段用于确定Type所标识资源的具体属性。

管理资源依赖关系

资源声明后的操作是定义资源之间的配置细节和依赖管理。

450423e687f30aed5c8d89839f44082d2ce3bd25

资源编排模板提供了两种方式用于管理资源的配置细节和依赖关系:第一种是隐含式,资源编排提供了很多函数,通过函数隐式地指定资源之间的关系。如第一个红框内容所示,ECS资源组的SecurityGroupID是由Ref函数指定的;第二种方式是由DependsOn关键字显式指定资源之间的依赖关系,在该例中,WebServer资源依赖了MySQL_Server资源。

使用参数提高模板灵活性和复用性

在上文所提到的模板中,WebServer资源的属性完全呈现写死的状态,也就是通过这些模板所创建的资源都具有相同的规格,这种情况是无法满足我们正常的需求。我们需要根据场景的不同,创建不同规格网络配置、操作系统的资源栈。

255f09aaef5d65f7d1ef8d6fe48787582b3ad7a5

编排模板中可以通过在Parameter字段定义一个变量,然后在Resources中引用该变量,当将模板提交到编排引擎时,通过动态地指定该变量的值,创建不同规格的资源。如上图Paeameters参数中定义的ImageId变量,通过指定不同的ImageId,大大提高了模板的灵活性和复用性。

编排服务优势

除了上述的优点以外,资源编排还具有如下优势:

(1)它提供了多种执行方式,一是通过WEB UI的方式使用资源编排服务;二是用户可以使用OpenAPI的方式将资源编排集成到应用中;

(2)由于资源编排是创建一组资源,有可能在编排的过程中某个资源创建失败。目前我们提供了两种回滚策略:ALL-or-Nothing和Best-Effort。前者是要么成功要么失败,后者是保存创建成功的资源;

(3)资源编排的模板支持一次编写,任意多次重复部署;

(4)支持以资源栈为单位的更新和删除;

(5)支持用户在模板中定义Shell脚本配置应用。

总结

资源编排服务实现了基础设施即代码的理念,可以像项目开发一样对基础设施进行版本控制、自动部署,以及通过测试驱动基础设施的开发;通过使用资源编排服务,用户不仅可以快读构建基础设施、以栈的方式管理多套资源、通过模板保证一致性,还可以优雅地变更基础设施,如灰度发布和蓝绿发布;此外,还利用开发的经验进行基础设施的持续集成。

相关文章
|
1月前
|
存储 缓存 NoSQL
深入理解Django与Redis的集成实践
深入理解Django与Redis的集成实践
54 0
|
9天前
|
存储 算法 调度
云计算环境下的性能优化实践
云计算环境下的性能优化实践
|
4天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
16天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
39 2
|
28天前
|
Kubernetes Cloud Native 持续交付
云计算的转型之路:云原生技术的崛起与实践####
【10月更文挑战第16天】 本文深入探讨了云原生技术在现代IT架构变革中的核心作用,不同于传统概述,本摘要将聚焦于云原生如何促进企业实现敏捷开发、弹性伸缩及高效运维,通过具体案例分析展现其在实际业务场景中的创新应用,揭示这一技术趋势对企业数字化转型的深远影响。 ####
44 2
|
17天前
|
云安全 存储 监控
云计算安全:AWS与Azure的安全策略与实践比较
【10月更文挑战第26天】本文详细比较了AWS和Azure在安全性方面的策略和实践,涵盖身份与访问管理、数据加密与保护以及安全监控与响应。通过代码示例展示了两家云服务提供商在实际应用中的具体操作,帮助企业在选择云服务时做出明智决策。
29 0
|
6天前
|
人工智能 边缘计算 云计算
2024.11|云计算行业的商业模式创新方法及实践
截至2024年,全球云计算行业迈入全新阶段,从IaaS到大规模AI模型平台,技术与商业模式不断创新。本文分析全球最新技术进展,探讨云计算商业模式创新策略与实践,解析云服务厂商如何通过技术革新实现价值最大化,推动企业数字化与智能化转型。重点讨论AI与云计算的深度融合、边缘计算与去中心化发展、平台化与生态系统建设,以及数据安全与绿色云计算等关键议题。
54 30
|
1月前
|
运维 监控 Devops
DevOps实践:自动化部署与持续集成的融合之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为一种文化和实践,它倡导开发(Dev)与运维(Ops)之间的协作与整合。本文将引导读者了解如何通过自动化部署和持续集成(CI)的实践来提升软件交付的速度和质量。我们将探讨一些实用的工具和技术,以及它们是如何帮助团队高效地管理代码变更、测试和部署的。文章将不包含代码示例,但会详细解释概念和流程,确保内容的通俗易懂和条理性。
131 62
|
8天前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
16天前
|
云安全 存储 监控
云计算安全:AWS与Azure的安全策略与实践比较
【10月更文挑战第27天】本文对比分析了AWS和Azure在云计算安全领域的策略与实践,涵盖技术、定价、混合云工具等方面。通过代码示例展示了如何在两个平台上实施安全措施,如监控告警、数据加密和身份管理。总结了两者的优缺点,帮助读者根据具体需求选择合适的云服务提供商。
32 4