DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。[1] 它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。

以下几方面因素可能促使一个组织引入DevOps:

  1. 使用敏捷或其他软件开发过程与方法
  2. 业务负责人要求加快产品交付的速率
  3. 虚拟化和云计算基础设施(可能来自内部或外部供应商)日益普遍
  4. 数据中心自动化技术和配置管理工具的普及
  5. 有一种观点认为,目前占主导地位的“传统”美国式管理风格(“斯隆模型 vs 丰田模型”)会导致“烟囱式自动化”,从而造成开发与运营之间的鸿沟,因此需要DevOps能力来克服由此引发的问题。

DevOps,是一种提倡将开发机构的文化、流程和工具整合到一起的集成软件交付方式,跨越从业务规划、创建、交付到反馈的整个软件开发生命周期。DevOps既不仅是一个工具、平台或技术,也不是简单的定义开发和运营,而是对软件开发及交付的一门哲学。DevOps里面包括四个维度:(1)计划和监控;(2)开发和测试;(3)发布和部署;(4)版本管理、反馈和分析。

在软件行业进入云计算时代后,在整个市场用户对软件产品以及服务的要求也跟着提高,这不仅需要开发和运维人员快速实现,而且要快速部署发布上线,并且必须保证业务可靠、高效运行。正如虚拟化改变了数据中心的运营一样,云计算的兴起也预示着IT应用运维将发生重大变革。目前,IT运维团队还一直处于以服务器为中心来驱动的运维模式,而具体的应用则扮演着次要作用。另一方面,云计算则是以应用为中心的运维模式。

运行在云环境下的应用程序也需要具有高可用性、高可靠性和高灵活性,以应对更多更复杂的工作负载和监测。过去由IT运维基础架构提供的这些功能现在将成为应用程序本身的一部分,这些运维能力需要融入到开发环境中。而在这些以应用为中心的新环境,运维团队将需要与开发者协同创建这些应用程序,也就是刚才我们所介绍的“DevOps”。DevOps团队是“一群采用新的方式实现更快、更好、更具效益和乐趣来推进开发和系统管理的人群。”

传统模型带来的是开发及测试的部门壁垒。随着我们通过像敏捷,像Scrum这样的敏捷方法,在加强开发团队和测试团队之间的沟通协作之后,其实我们不可避免地会面临到开发部门和我们的运维,以及发布运营这样的一个瓶颈。它会取代我们之前开发团队里面所遇到的障碍和瓶颈,我们新的要解决这样的问题。DevOps从它的思想和实践上来看,也是随着敏捷的实践项目继续集成、自动化部署这样的一些实践成熟。

传统的意义上讲,我们开发团队,开发完了之后往往是打包扔给发布团队,或者说是运维团队,随着我们对于发布的要求越来越高。我们其实是要求,就是说生产环境的运维部门和发布团队,跟开发部门坐到一起,双方角色互补,开发人员去学习运维的知识和工具。运维去提供我生产环境部署的约束和要求,双方融合形成一个比较一体化的DevOps这样的团队。

在虚拟化和云计算出来之前,往往我们的部署和生产运维,而且都是在实体机上面,实体机上面的成本基数很高的。在虚拟化技术出来之后,我一个普通的运维人员,输入命令就可以得到几台这样的虚拟机。当这样的工具出来之后,我可以再输入命令就会拿到一个完全一样的环境出来。所以我们来讲,随着虚拟化和云计算技术,以及周边的管理,像自动化创建工具这样的成熟后,DevOps就传统的运维技能会变得越来越大众化,可以被我们开发人员所接受、所拥抱,再用到环境里面去。

开发和运维是分开的两个团队,项目之间通过一个发布包,做出一个FTP这样的去沟通。其他团队把包放在FTP上面,然后运维从FTP上取下包去部署。这个导致的问题就是,很多生产环境下面的环境配置,这样的一些软件要求,跟开发的时候不一样。DevOps成员是作为团队的一分子参与到开发团队的日常工作里面去,它的几个主要工作职责会包括,第一,它会帮助团队把他们团队对环境的配置、对环境的要求,用一些工具把它变成代码,变成自动化的。另外一个就是说,在生产环境下面会考虑到可用性、考虑到安全、考虑到运维的要求。它会把这样的约束条件灌输给团队,团队在设计系统的时候就考量这一块的约束情况,这样的时候实施就会更好一些。

开发和运维其实是两种不同的技能,开发的头脑里面就是我赶紧把代码写完,扔给运维就好了。运维的头脑就想着,我这块要是出了问题,那我就可能睡不着觉,每天晚上接到电话起来维护。其实来讲,两边对对方存在一些这样的误解,很大的原因就是,大家对于各自工作是不了解的,他不知道运维需要做什么事情,我只看到运维可能有这样的一些报表,有这样的投影,投在那里说系统实际是怎么样,有没有出现问题。运维看到开发团队在那边写代码,也不知道在做什么事情。要想在团队里面实施这样的运维,DevOps的话,其实我们觉得它从文化和技术,或者是技能两方面都要提供相应的辅导。从文化层面上面来讲,就要鼓励我们的运维和开发人员坐在一起,互相地分享。因为团队的目标还是一致的,我把系统更快的部署到环境上去,让它能够稳定安全地运行。从文化上面来讲,首先要让大家理解这样的一个,大家是共同的目标,不是说势如水火。

其次的话,要营造出双方相互协作的一个情况、一个场景。就是文化上面,然后从场景和技巧上面来讲,除了双方对于各自技能的掌握和培训之外,我们发现还是有一些前提条件是比较满足的,比如说我们来讲企业集成。我们需要自动化测试,只要我们能够在团队内部把企业集成和自动化测试先做到一定程度的话,比如说我们可以有信心地拍胸脯说,我们这个软件没有太大的问题。在这样的情况下面,我们再引入DevOps做这个,从软件交付的角度来讲,会是比较好的一种方式。否则的话团队整天在修复缺陷,这时候我们的运维和开发坐在一起可能没有太多的意义,这是第一。

第二就是说,如果我们不是这么全局来看,我们是从局部优化来看,我们可以看到运维团队在系统配置、系统创建这一块的技能。它也是非常必要的,因为我们发现开发团队,不管是开发还是测试,它其实有一个很严重的问题,他们要想做调试、做测试的时候,环境是不够的。可能这个环境做完一套测试之后,环境就被污染了、数据被污染、我的应用包被污染。在追求环境的准备和提供方面,其实我们的运维是可以进来,或者是我们的DevOps团队是可以形成的,然后去做一些相对来讲没有那么广的事情,还是跟在这一块上面。而这个前提条件就可能是我们这样的一个架构也好、技术也好,能够比较好的支持我们DevOps去做基础设施代码的工作。

DevOps类似于我们敏捷方法,它其实也是跟思想原则和具体的实现,DevOps它的本身的这样一个思想和价值观就是说,让我们的开发和我们的运维也好,或者说我们的实施也好,让他们能够更好地,双方能够消除各自领域的浪费。从原则上来讲,就会有一些像基础设施代码、配置自动化等等这样的一些原则。

相关图书

相关文章:

DevOps是云计算时代的开发与运营的更多相关文章

  1. 云计算时代,你所不了解的 DevOps

    在本文中,我们讨论如何快速地从更高的层面理解DevOps,介绍准备改变文化的最佳实践.我们将讨论DevOps的目标以及从组织管理层得到支持的方法,为DevOps的概念打下基础.我们将试着从根本上介绍使 ...

  2. 云计算时代,传统企业 IT 从业者如何做好转型?

    本文来源于国外社区 DZone,作者 Dennis O'Reilly 撰写过多篇关于云计算.混合云等内容的文章,本文内容围绕云计算时代,企业纷纷上云,传统 IT 从业者如何做好转型. 本文由“数梦工场 ...

  3. ZeroMQ:云计算时代最好的通讯库

    还在学socket编程吗?还在研究为什么epoll比select更好吗? 噢,不必了! 在复杂的云计算环境中,我们面临的难题远比这个复杂得多. 庞大的服务器集群作为计算云,对来来看或许只是一个简单的搜 ...

  4. TXSQL:云计算时代数据库核弹头——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海内外业 ...

  5. 高手问答精选:Go 语言 —— 云计算时代的 C 语言(类似于一个FAQ)

    Go 语言被称为云计算时代的 C 语言,它在软件开发效率和运行效率之间做出了绝佳的权衡.这使得它既适应于互联网应用的极速开发,又能在高并发.高性能的开发场景中如鱼得水.正因如此,许多互联网公司,尤其是 ...

  6. Server SAN:弄潮儿云计算时代

    最初发表于<程序猿>2014年7每月一次. 4月30日本.Redhat公布1.71十亿收购Ceph开发商Inktank公司,加上之前2011年10月1.36十亿收购Gluster,Redh ...

  7. 云计算时代告别phpMyAdmin

    云计算时代告别phpMyAdmin phpMyAdmin是一款很经典的MySQL数据库管理工具,在云计算快速发展的今天,phpMyAdmin交互老旧.已经不能适应时代步伐.因此有很多人開始选择一些更高 ...

  8. 云计算+SaaS+业务开发平台=JSAAS云平台

    我关注Google的代码托管.Open API,我也关注Oracle会把MYSQL怎么样云数据库化,我也虚拟化技术多实例化独立的数据库,我也关注facebook的平台插件应用架构,我也关注salesf ...

  9. IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化

    马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培 ...

随机推荐

  1. 用U盘安卓esxi虚拟机出现 error loading /s.v00 错误解决办法

    前段时间用 一个 白色的 东芝U盘 给戴尔 R720服务器安装 esxi 6.0时,在加载到/s.v00 找个文件时出现错误,大致为: error loading /s.v00 compressed ...

  2. 【Java EE 学习 74 下】【数据采集系统第六天】【使用Jfreechart的统计图实现】【将JFreechart整合到项目中】

    之前说了JFreechart的基本使用方法,包括生成饼图.柱状统计图和折线统计图的方法.现在需要将其整合到数据采集系统中根据调查结果生成三种不同的统计图. 一.统计模型的分析和设计 实现统计图显示的流 ...

  3. TDD学习笔记【一】----序言

    提到TDD大多数程序员的疑问: 为什么我要写两份程序? 为什么我要写程序来验证我已经知道的结果? 我又不是SA,可能也不懂domain,怎么产生一开始的test case? 最后的感想就变成是: 1. ...

  4. CentOS 7 安装后没有ifconfig命令

    /bin,/sbin,/usr/bin,/usr/sbin下面都没有ifconfig命令. 执行命令  yum install net-tools 即可.

  5. Zookeeper操作

    Zookeeper操作 注意搭建: 1.集群规模不小于3个节点 2.服务器之间系统时间要保持一致 1.搭建步骤: 1.解压安装包 2.设置zookeeper环境变量 3.修改配置文件————zoo.c ...

  6. 浩瀚技术团队... 安卓智能POS移动PDA开单器 开单器 进销存系统 进销存系统

    浩瀚技术团队... 智能POS移动PDA开单器 开单器 进销存系统 进销存系统 点餐 会员管理 会员管理 深度解读 手机APP移动办公到底是什么? 快速打单POS·不仅仅是快那么简单!  

  7. 安卓四核PDA手持PDA智能POS机 打印二维码 分享

    很多项目都会用到 类似的要求  移动手持终端 通过程序 可以生成条码或二维码 打印出小票或标签纸 下面直接上代码 希望对大家有点用处 private void print(){ csys.setTex ...

  8. 好文分享_java堆栈的区别

    Java Heap Memory Heap memory is used by java runtime to allocate memory to Objects and JRE classes. ...

  9. java-并发-活性

    浏览以下内容前,请点击并阅读 声明 一个并发程序以适时方式执行的能力叫活性.以下部分介绍最常见的一种活性问题,死锁,并简单介绍其他两种活性问题,饥饿和活锁. 死锁 死锁描述了一种情况:两个或两个以上的 ...

  10. Lession1 写在机器学习之前

    机器学习从学习方式上来讲,可以分为两类: 监督学习(Supervised Learning),简而言之就是“有标签”学习 无监督学习(Unsupervised Learning),简而言之就是“无标签 ...