文档章节

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

_夜枫
 _夜枫
发布于 2017/07/07 15:56
字数 3787
阅读 15
收藏 0
点赞 0
评论 0

了解更多知识热点请点击原文链接

研发和传统基础设施交互方式

通常情况下,在开发过程中需要和基础设施打交道,需要在项目中申请开发、测试以及预发生产环境。在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脚本配置应用。

总结

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

 

 

 

了解更多知识热点请点击原文链接

 

本文转载自:http://click.aliyun.com/m/25390/

共有 人打赏支持
_夜枫
粉丝 10
博文 506
码字总数 0
作品 0
朝阳
后端工程师
你所不了解的DevOps

本文摘自人民邮电出版社异步社区《DevOps开发运维训练营》一书,点击查看http://www.epubit.com.cn/book/details/7709 关注微信公众号【异步社区】每周送书 DevOps开发运维训练营 一旦建立了...

异步社区
01/12
0
0
加速企业敏捷的DEVOPS平台的开发与建设

大家好,本次内容我在我司上个月的PWorld大会上分享过,线下会议参与人数有限,这次应邀在微信上向更广泛的人群分享。希望对大家能有帮助,谢谢! 今天分享的主题是加速企业敏捷的DevOps平台...

English0523
2017/09/07
0
0
360°透视:云原生架构及设计原则

本文由 网易云 发布 云原生(Cloud Native)的概念,由来自Pivotal的MattStine于2013年首次提出,被一直延续使用至今。这个概念是Matt Stine根据其多年的架构和咨询经验总结出来的一个思想集...

wangyiyungw
05/09
0
0
基础设施即服务与云技术

自互联网出现以来[1],云计算的概念已经提出了有50年。1957年,John McCarthy将计算机中的分时共享概念设计成了一种工具。从此以后,这个概念的名字经历过数次变化:从“服务中心(service b...

苏宁公有云
2015/09/22
77
0
灵活性的云计算技术Wise2C睿云智合

云解决方案几乎不考虑其技术组合,它附带了大量基础设施,包括一系列数据库、队列、缓存和搜索服务器。

光辉岁月op
2017/12/15
0
0
从DevOps到Cloud Native,应用上云姿势全解锁

本文由 网易云 发布 作者:林帆 序文 伴随着IaaS、PaaS等云端基础设施技术的成熟,“应用上云”成为许多企业软件部门的心头大事。通过把传统软件系统搬到云上,一方面可以让业务方获得更多的...

wangyiyungw
05/09
0
0
开放基础架构新浪潮:互联网巨头背后的OpenStack

2018年5月21-24日,第十七届OpenStack峰会在温哥华盛大开幕,今年峰会的主题为“Open Infrastructure”。凸显出OpenStack基金会积极拥抱变化,主动求变的态度更加清晰,也是OpenStack基金会开...

云科技时代
05/25
0
0
IBM、BMC、HP集体缺席的云管理服务,是数字化转型新思维

2017年,Gartner首次发布了公共云基础设施托管服务提供商年度魔力象限(简称:云管理服务商,MSP)。所谓云管理服务商,是指为一家或多家超大规模的公共云服务商,包括亚马逊AWS、微软Azure...

云科技时代
06/11
0
0
坐标深圳 | Kubernetes!我要用这样的姿势拥抱你

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 从去年至今,容器、Kubernetes话题的热度就持续不减,有人说基于容器 +Kubernetes 的新型 PaaS 将会成为云计算的主流;有人说201...

腾讯云+社区
06/26
0
0
Kubernetes峰会首日直击 | 软件基础设施支撑云原生应用

导读 奥斯汀时间12月6日9点,北京时间12月6日23点,KubeCon+CloudNativeCon在美国奥斯汀会展中心隆重召开。本次盛会吸引了4000余位技术从业者到场关注,国内外主流厂商包括阿里云、AWS、Azu...

lq1ns259ej3okyvk4jf
2017/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Elasitcsearch High Level Rest Client学习笔记(三)批量api

Bulk Request BulkRequest可以在一起从请求执行批量添加、更新和删除,至少需要添加一个操作 BulkRequest request = new BulkRequest(); //创建BulkRequestrequest.add(new IndexRequest("...

木子SMZ
6分钟前
0
0
mybatis-dynamic sql

OGNL expressions if 判断是否存在值 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{tit......

writeademo
14分钟前
0
0
社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
17分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
18分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
20分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
23分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
24分钟前
0
0
Nginx配置error_page 404 500等自定义的错误页面

Nginx 做web server时, 开发中发现有时候的网站代码有错误,我们需要跳转到一个指定内容的错误页面: 1. 在nginx.conf配置文件上加上一句: fastcgi_intercept_errors on; 2. 服务中加上: er...

MichaelShu
26分钟前
1
0
微服务架构下的监控系统设计(一)——指标数据的采集展示

前言 微服务是一种架构风格,一个大型复杂软件应用通常由多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。...

UCloudTech
31分钟前
0
0
极客时间《趣谈网络协议》之开篇词学习笔记

出于个人兴趣,本人在极客时间购买了网易研究院云计算技术部的首席架构师刘超老师关于计算机网络的专栏之《趣谈网络协议》,由于知识版权原因,不能直接分享刘超老师的原文,所以,我会在每次...

aibinxiao
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部