文档章节

炒了8年的概念,到底该如何理解DevOps这个词?

 普元云计算
发布于 2016/11/14 10:13
字数 4692
阅读 14
收藏 0
点赞 0
评论 0

转载本文需注明出处:EAII企业架构创新研究院,违者必究。如需加入微信群参与微课堂、架构设计与讨论直播请直接回复公众号:“EAII企业架构创新研究院”。(微信号:eaworld)


如何实施DevOps成为众多企业迫切面临的问题,本文作者刘相,有10多年的从业经验,他结合自身企业实施DevOps的经验,梳理出DevOps在企业的组织、技术、流程等方面的最佳实践与价值,以及如何搭建DevOps平台来支撑DevOps的落地工作。


本文内容包括:

1.什么是DevOps及误区

2.DevOps企业实践

3.DevOps架构支撑

4.实施DevOps价值


什么是DevOps及误区


DevOps概念从2009年提出已有8个年头。可是在8年前的那个时候,为什么DevOps没有迅速走红呢?即便是在2006年Amazon发布了ECS,微软在2008年和2010年提出和发布了Azure,DevOps的重要性似乎都没有那么强烈。我分析其原因主要有:


1.第一个很重要的原因是因为那时候云计算还是小众产品,更多的与虚拟化、虚拟机相关,它们还是重量级的IT基础设施。


2.第二个很重要的原因是容器相关技术(Docker为代表)还没有横空出世,直到2013年7月。


3.第三个很重要的原因是,Martin Fowler在2014年3月提出了Micro Service,这为DevOps的推广也打了兴奋剂。


可以看出,当前DevOps概念的深入人心,离不开云计算、容器/Docker、微服务、敏捷等相关概念和实施的成熟发展。


另外,随着互联网对传统企业的冲击,需要更快的业务试错与业务创新,其背后本质是企业IT的精益运营,让软件的生产、交付、获取、升级、遥测变得自动与自助,近两年,DevOps在传统企业也开始备受关注与各种尝试。


对DevOps的理解,可能千人千面。先来看下对DevOps的狭义理解。

维基百科对DevOps的定义比较拗口。其实往简化里讲DevOps是提倡开发和IT运维之间的高度协同,从而在完成高频率部署的同时,提高生产环境的可靠性、稳定性、弹性和安全性。


从另外一个维度,广义上来说,DevOps不仅需要打通开发运维之间的部门墙,我们认为DevOps更多的需要从应用的全生命周期考虑,实现全生命周期的工具全链路打通与自动化、跨团队的线上协作能力。



第一,纵向集成,打通应用全生命周期(需求、设计、开发、编译、构建、测试、打包、发布、配置、监控等)的工具集成。纵向集成中DevOps强调的重点是跨工具链的「自动化」,最终实现全部人员的「自助化」。举个例子,项目组的开发人员可以通过DevOps的平台上,自主申请开通需要的各种服务,比如开通开发环境、代码库等。


第二,横向集成,打通架构、开发、管理、运维等部门墙。横向集成中DevOps强调的重点是跨团队的「线上协作」,也即是通过IT系统,实现信息的「精确传递」。举个例子,传统的系统上线部署方式,可能是一个冗长的说明文档,上百页都有可能,但在DevOps的平台下,就应该是通过标准运行环境的选择、环境配置的设置、部署流程的编排,实现数字化的「部署手册」,并且这样的手册,不仅操作人员可以理解,机器也能够执行,过程可以被追踪和审计。


DevOps是通过工具链与持续集成、交付、反馈与优化进行端到端整合,完成无缝的跨团队、跨系统协作。


在团队使用DevOps时,存在误区是必然的。在我们同大量的客户交流中,大致有这几种误区认知:



? 没有使用云相关产品(IaaS、PaaS),组织很难开展DevOps;
? 微服务架构开发的应用适合DevOps,传统SOA应用不适合;实施DevOps和应用架构无关,无论是微服务架构,还是SOA类型应用,都可以开展DevOps工作;
? 认为将一组自动化工具的运用等同于DevOps的成功,那就太小瞧DevOps了。采用自动化工具本身不是DevOps,只有将这些工具与持续集成、持续交付、持续的反馈与优化进行端到端的整合时,这些工具才成为DevOps的一部分;
? 设立独立的DevOps团队是很多组织开启DevOps之旅的另外一个误区。事实上,如果这么做,将会导致更多的竖井。在责任没有清晰定义的情况下,成立这些团队,会创造更多的混乱,不要试图把。
? DevOps不仅仅是自动化。毫无疑问,自动化是DevOps非常重要的一部分,但不是唯一的部分,一定程度的部署自动化往往会与DevOps混为一谈,实施DevOps需要从敏捷、持续、协作、系统性、自动化五个维度进行建设与改进。


在DevOps实施过程中,团队经过总结积累,制定了团队的DevOps宣言,支撑团队从敏捷型组织转向DevOps(企业敏捷)。



DevOps企业实践


实施DevOps的核心目标是加速团队、企业的IT精益运行,从根本上提升IT的生产效率,加速部门、企业的业务创新能力。让团队从IT支撑部门,转向为IT创新部门。

实施DevOps过程中,需要从组织技术流程三个维度进行持续的优化与改进。




实施DevOps,可以参考总结的“DevOps实践模型”,从组织、技术、流程三个维度中选择关键的活动项进行最佳实践活动。


可以梳理出目前团队中欠缺但又容易改进的点,逐步将更多的实践活动纳入团队当中。团队实施DevOps的目的在于,将重复、价值低的事情交由DevOps平台实现,让团队成员做更有创新、更有价值的事情。


根据我们的实施经验,在传统企业中,技术方面的实践最容易在团队中实现、流程次之、组织的优化与变革最为艰难;大家尝试的时候,可以由易入难。



组织方面

如何实施DevOps成为众多企业迫切面临的问题,本文作者刘相,有10多年的从业经验,他结合自身企业实施DevOps的经验,梳理出DevOps在企业的组织、技术、流程等方面的最佳实践与价值,以及如何搭建DevOps平台来支撑DevOps的落地工作。


技术方面

集成工具链:打通应用应用开发工具链:需求、项目、代码、构建、测试、打包、发布、配置、监控;

基础设施即编码:将基础环境服务化、可编程化,基础设施让项目团队可以自助获取;让基础设施从物理机、虚拟机、走向容器;


一键编译、测试、部署:开发人员可以从代码开始,一键获得可访问的环境,根据需要可以推送开发、测试、预发、生产环境;


ChatOps :开发以及运营人员在内的团队成员将沟通、工具和过程整合在一起的协作模型。基于对话驱动开发,将工具植入对话中,保障团队能够自动执行任务与协作。最近比较流行的hubot可以认为是ChatOps的探路者。


流程方面

看板:在DevOps中不能仅仅把看板当做任务协调沟通的机制;把看板作为在制品管制平台,量化组织生产能力的工具;


MVP:采用MVP(最小可行产品)原则,快速拥抱变化。最短时间内快速交付产品原型,然后通过测试并收集用户的反馈,快速迭代,不断修正产品,最终适应市场的需求。


发布:建立持续发布机制,形成自动化、自助化两种能力,支持常见的灰度发布、金丝雀、蓝绿、回滚、A/B测试等;


软件度量:通过软件度量(包括过程度量、质量度量、用户度量、成本度量),推算出组织的各种有效指标;一则掌控组织的生产力水平,二则通过度量数据,反向优化组织瓶颈点;


一切皆代码 :文档(用户故事、用户场景、功能特性等)、配置(应用配置、环境配置、脚本等)、环境(基础设施、中间件环境等)、发布包(二方库、三方库、部署包)需要统一看待成代码,纳入版本管理,同时建立5者间的关系,提供全视角的链路追踪。举个例子,每个发布的版本,可以追溯其对应的配置,代码、文档,发布的功能点。


组织技术流程三个维度中,技术、流程可以通过平台或者工具进行最佳实践的固化。

基于此,我们规划了DevOps平台,支持广义的DevOps,帮助客户快速实现DevOps建设。



平台建设第一步,梳理出DevOps的整体概念模型。从角色规划设计开发交付运营反馈四个维度进行梳理。


以产品为核心,将代码、配置、环境进行严格分离,同时覆盖产品全生命周期。


这里面概念看似简单,其实很多:比如:部署包=介质包+配置,这和传统的CI和CD体系就有点不一样;


再比如:环境分开发、测试、预发、生产,我们觉得即使公有云上,也应该给客户将这些做物理或逻辑隔离,因为大家的配额需求不一样,容器replication需求也可能不一样;


再比如:运营反馈,既然要做DevOps,那整个过程导出都应该可以有检查点插入,为运营提供有效数据,我们把检查点至少分成了四类,包括过程的、安全的、性能的、业务的。


DevOps架构支撑



基于领域模型梳理DevOps平台业务架构,目前共建设18个领域系统来支撑,比如:软件产品的管理、软件各阶段环境的管理、质量的管理、部署包、二进制包的管理、资源管理、监控中心、认证中心等。


每个领域系统严格按照AKF扩展立方体的Y轴进行拆分,采用微服务架构模式进行平台建设。


“DevOps业务架构”,是我们基于对企业IT管理的理解,所进行的平台化设想。从图里还可以看到,红色字部分,是我们对现有DevOps的落地实现。


? Portal(DevOps门户),自研,提供给用户使用的统一操作门户,包括用户管理、产品看板、产品全生命周期(设计、开发、测试、预发、生产、监控、故障处理)管理等;
IAM(身份识别与访问管理),自研,提供用户身份识别和访问控制的能力,包括用户管理、Token管理和用户授权等功能;
SPM(软件产品管理),自研,提供产品、组件的基准定义和管理能力,包括产品类型、产品管理、组件管理、依赖产品管理及产品投放市场等功能;
SCM(软件配置管理),自研,提供产品、组件配置管理能力,包括配置项的定义和在各个不同环境下的配置信息的管理维护能力;
SRM(软件资源管理),自研,提供产品和组件自动编译、打包和部署的能力,提供部署模板管理,支持编译和部署流程编排,编译和部署进度跟踪以及日志查看;
SEM(软件环境管理),自研,提供租户和产品环境资源配额、负载均衡,以及运行容器的管理能力,包括租户可用资源的配额,以及基于租户资源的产品和组件在各种环境下的资源配额(如开发环境、测试环境、生产环境等等)和负载均衡;同时,还提供运行容器的创建、销毁、调度、复制以及持久化卷管理等能力;
QAF(质量保证反馈),自研,提供产品的质量管理和监控能力,包括测试用例管理、缺陷管理、质量监控等;
UMC(统一运维中心),开源集成、借鉴自研相结合,提供统一的监控、预警、故障处理等能力,包括系统日志和业务日志的监控,产品的资源使用情况和运行情况监控,故障定位等。
VCS(版本控制系统),开源集成 ,主要以GitLab为核心,不直接提供GitLab的原生界面,所有功能在统一的DevOps上提供;提供源代码库管理的能力,包括代码库的创建、维护,分支的管理和用户权限控制等;
CI(持续集成),主要以Jenkins为核心,使之成为以API为主要使用方式的服务,提供持续集成任务调度和执行的能力,包括集成任务管理、编译、打包等;
? BPR(二进制介质仓库),开源集成,主要以nexus为核心;提供二进制包仓库的管理能力,包括二进制包、文档等编译产物的上传、下载和存储访问等;
DPR(可部署介质仓库),自研,主要存储可部署的介质,其主要区别是注入了与环境相关的配置(这种部署模型是很适合没有上Docker或者容器,以虚机为主的IT基础设施或者物理机);
PM(项目管理),自研,可以与常见的PM管理工具对接与集成,提供产品的开发过程的管理和协作的能力,主要包括:任务计划、人员分工和过程跟踪、看板等;
MOC(API模拟),开源集成,为REST API调用提供模拟能力,以便产品或组件在开发调试期间可以脱离依赖、减少阻塞、单独运行,支持根据Swagger和Mock数据发布Mock Rest Service,支持用户私有的MOCK数据;
DOC(API文档),开源集成,提供REST API/SPI文档的自动生成能力;
TM(租户管理),自研,提供租户管理的能力,包括租户管理、邀请码管理和租户配额等功能;
? IM(即时沟通),开源集成,提供产品设计、开发、测试、运维等相关人员间的协作沟通能力,支持群组聊天、离线消息推送、聊天记录查询和导出;


啰啰嗦嗦,罗列了18个核心的领域系统。



逻辑架构整个DevOps平台分为三层:


基础设施层:包括IaaS,CaaS,我们分别是基于OpenStack和Kubernetes、Docker的,上层有一层不同环境的适配;


基础服务层:包括服务管理与调度的基础能力,如注册中心,编排,伸缩漂移;还有一堆具体的企业级或互联网式的云服务;


DevOps层:更多的是工作流程(需求、设计、开发、测试、发布等)的串接,看板等文化的体现;



在整个平台研发过程中,采用了是自己开发自己的模式,即使用上一个发布的平台作为生产线,支撑下一个版本的产品研发工作。自己交付自己可以带来两点好处:


1. 平台交付客户前,自己先把可能的坑趟掉;


2. 当前生产线所有不能满足的功能,视作下一版本的需求(实际操作过程中,我们仅允许使用wiki作为辅助工具来支撑生产线未满足的需求);


所以可以拿一些数字估算一下当前的规模。在研发过程中,把DevOps视为一套业务平台,目前规划的领域有18个,如果每个领域中再有多个以微服务架构落地的系统进行支撑,预计总共支撑DevOps的系统,就会超过50个。同时提供Mock、开发、测试、预发、生产5类环境(每类环境中可能还会有多套,比如集成测试、性能测试、全链路测试)。


当前版本的DevOps,整体的部署规模将超过200个集群,部署的进程实例总数也会轻松超过500个。需要注意的是,500这个数字,还没包含技术平台中的一些分布式中间件,比如缓存、消息队列等等集群。


不过,500映射到企业内IT人员自己用的平台,这个数字,对于不同的企业,可能是个天文数字,也可能只是九牛一毛。


实施DevOps价值



在部门实施DevOps之后,我们团队有显著改变:


? 在团队组织上,每个团队小而自治且是全栈团队,沟通、技能互补,每个团队负责独立的领域系统,目标感非常明确,团队在走向使命型组织;


? 项目的从原先线下协作、沟通,统一到统一的DevOps平台上协作、沟通;团队成员可以随时了解项目进展全貌,利用平台可以做到各种过程数据的实时收集(举例,比如需求变更、任务延期等);


? 资源管理由原来专职人员,过渡到开发人员实现自助化服务,可以按需实现各类环境申请与开通,基础设施即服务提供来技术的支撑;


? 从原来的邮件文化,到DevOps平台统一沟通,同时DevOps打通多个工具链路端,任务分发、沟通、提醒可以实时推送;


最后给大家奉上DevOps成熟度评判指标,在践行DevOps时,可以从运营效率、IT服务水平、组织效能、客户价值、经营业绩五个维度进行评判,持续优化与改进。





本文转载自:http://blog.csdn.net/bruceblue/article/details/52250977

共有 人打赏支持
粉丝 1
博文 23
码字总数 18356
作品 0
海淀
DevOps,你真的了解吗?

与大数据和PRISM(NSA的监控项目之一),DevOps(开发运维)如今是科技人士挂在嘴边的热词,但遗憾的是,类似圣经,每个人都引用DevOps的只言片语,但真正理解并能执行的人极少。根据CA的一项...

oschina ⋅ 2013/10/02 ⋅ 8

DevOps对于企业IT的价值

其实从敏捷延展开的 DevOps 概念很早就已经被提出,不过由于配套的技术成熟度水平层次不齐, DevOps 的价值一直没有有效地发挥出来。现如今,随着容器技术的发展, DevOps 在企业中的实践难度...

数通畅联 ⋅ 2016/08/08 ⋅ 0

如何理解 Site Reliability ?

作为谷厂出品的神书《SRE Google运维解密》, 笔者早有耳闻并断断续续阅读过部分内容,最近终于静心品阅了一遍(作为拖延症患者, 写完此文与阅读完原书已间隔约半年),里面的很多理念确实值得细...

曲高和寡_健 ⋅ 2017/10/25 ⋅ 0

区块链技术到底是什么鬼,为何被疯炒?

区块链,这是当下的热词。麦肯锡的研究表明,区块链技术,是继蒸汽机、电力、信息和互联网科技之后,目前最有潜力触发第五轮颠覆性革命浪潮的核心技术。 过去两年,位于硅谷和纽约的区块链技术公...

浮躁的码农 ⋅ 2015/09/15 ⋅ 0

网站运营,先分清web1.0与web2.0「社区运营入门系列①」

大概在八年前,和朋友聊天时提及Web2.0,这是我第一次听到这个名词。当时不记得他是怎么解释这个名词的,只留下了一个印象:这将是今后互联网的大趋势。回去后我立即就百度了一下,一看不要紧...

小废物 ⋅ 2011/02/15 ⋅ 0

七个DevOps时代的领导力规则

DevOps是关于持续变化和改进的:请准备好改变你所珍视的领导原则。 如果说DevOps最终更多的是关于文化而不是任何特定的技术或平台,那么请记住这一点:没有终点线,它是关于持续变化和改进的...

云技术之家 ⋅ 02/02 ⋅ 0

运维杂谈老王:详谈运维可视化、DevOps和运维危机

本文分为三个部分,第一部分从服务交付和服务度量两方面介绍运维可视化;第二部分介绍什么是DevOps以及它给运维带来的改变和影响;第三部分结合最新的数据资料和趋势聊一聊运维人可能面临的危...

王津银 ⋅ 2016/02/17 ⋅ 0

DevCloud如何实现敏捷和Devops开发?

  【IT168 评论】“人类生存于一个虚拟的、数字化的生存活动空间,在这个空间里人们应用数字技术从事信息传播、交流、学习、工作等活动,这便是数字化生存。”--尼葛洛庞帝!   21年前,尼...

it168网站 ⋅ 2017/03/30 ⋅ 0

CIO 真正需要 DevOps 团队做什么?

DevOps 团队需要 IT 领导者关注三件事:沟通、技术债务和信任。 IT 领导者可以从大量的 DevOps 材料和 向 DevOps 转变 所要求的文化挑战中学习。但是,你在一个 DevOps 团队面对长期或短期的...

作者: John Allessio ⋅ 04/16 ⋅ 0

给 DevOps 初学者的入门指南

当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念。那么,到底什么是"DevOps"呢? 什么是DevOps 随着软件发布迭代的频率越来越高,传统的...

风起云飞fir_im ⋅ 2016/09/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如...

honeymose ⋅ 昨天 ⋅ 0

myeclipse10 快速搭建spring boot开发环境(入门)

1.创建一个maven的web项目 注意上面标红的部分记得选上 2.创建的maven目录结构,有缺失的目录可以自己建立目录补充 补充后 这时候一个maven的web项目创建完成 3.配置pom.xml配置文件 <proje...

小海bug ⋅ 昨天 ⋅ 0

nginx.conf

=========================================================================== nginx.conf =========================================================================== user nobody; #......

A__17 ⋅ 昨天 ⋅ 0

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 昨天 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 昨天 ⋅ 0

压缩打包介绍、gzip压缩工具、bzip2压缩工具、xz压缩工具

压缩打包介绍 压缩的好处不仅能节省磁盘空间而且在传输的时候节省传输时间和网络带宽 windows系统下文件带有 .rar .zip .7z 后缀的就是压缩文件 linux系统下则是 .zip, .gz, .bz2, .xz, ...

黄昏残影 ⋅ 昨天 ⋅ 0

观察者模式

1.利用java原生类进行操作 package observer;import java.util.Observable;import java.util.Observer;/** * @author shadow * @Date 2016年8月12日下午7:29:31 * @Fun 观察目标 **/......

Cobbage ⋅ 昨天 ⋅ 0

Ubuntu打印服务器配置

参考:https://blog.csdn.net/gsls200808/article/details/50950586 https://blog.csdn.net/jiay2/article/details/80252369 https://wiki.gentoo.org/wiki/HPLIP 由于媳妇儿要大量打印资料,......

大熊猫 ⋅ 昨天 ⋅ 0

面试的角度诠释Java工程师(二)

原文出处: locality 续言: 相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的。为什么我会...

颖伙虫 ⋅ 昨天 ⋅ 0

github中SSH的Key

https://help.github.com/articles/connecting-to-github-with-ssh/ https://help.github.com/articles/testing-your-ssh-connection/ https://help.github.com/articles/adding-a-new-ssh-k......

whoisliang ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部