DevOps的真谛到底是什么?

摘要:DevOps是一种方法论,归纳总结了面临独一无二的机遇和强有力需求的网络巨头们,结合自身业务本质构思出全新工作方式的过程中所采用的实践,而他们的业务需求也很直接:以史无前例的节奏对自己的系统进行演进,有时候可能还需要以天为单位对系统或业务进行扩展。虽然DevOps对初创公司来说很明显是不可或缺的,但那些有着庞大的老式IT部门的大企业才是能从这些基本原则和实践中获得最大收益的。本文将试图解释得出这个结论的原因和实现方法。 最近我阅读了很多有关DevOps的文章,其中一些非常有趣,然而一些内容也很欠考虑。貌似很多人越来越坚定地在DevOps与chef、puppet或Docker容器的熟练运用方面划了等号。对此我有不同看法。DevOps的范畴远远超过puppet或Docker等工具。 这样的看法甚至让我感觉有些气愤。DevOps在我看来极为重要,过去15年来,我一直在大型机构,主要是大型金融机构中从事工程业务。DevOps是一种非常重要的方法论,该方法将解决一些最大型问题的基本原则和实践恰如其分地融为一体,很好地解决了此类机构的软件开发项目中一种最令人感觉悲凉的失败要素:开发者和运维人员之间的混乱之墙。 请不要误会我的这种观点,除了某些XP实践,大部分此类大型机构对敏捷开发方法论的运用还有很长的路要走,同时还有很多其他原因会导致软件开发项目的失败或延误。 但在我看来,混乱之墙目前依然是他们所面临的最令人沮丧、最浪费时间、同时也相当愚蠢的问题。 与其独自生闷气,我觉得不如说点更实在的东西,写一篇尽可能精准的文章,向大家介绍DevOps到底是什么,能为我们带来什么。长话短说,DevOps并不是某一套工具。DevOps是一种方法论,其中包含一系列基本原则和实践,仅此而已。而所用的工具(或者说“工具链”吧,毕竟用于为这些实践提供支持的工具集有着极高的扩展性)只是为了对这样的实践提供支持。 最终来说,这些工具本身并不重要。相比两年前,目前的DevOps工具链已经产生了翻天覆地的变化,可想而知,两年后还会产生更大的差异。不过这并不重要。重要的是能够合理地理解这些基本原则和实践。 本文并不准备介绍某些工具链,甚至完全不会提到这些工具。网上讨论DevOps工具链的文章已经太多了。我想在本文中谈谈最基本的原则和实践,它们的主要目的,毕竟这些才是对我而言最重要的。 DevOps是一种方法论,归纳总结了面临独一无二的机遇和强有力需求的网络巨头们,结合自身业务本质构思出全新工作方式的过程中所采用的实践,而他们的业务需求也很直接:以史无前例的节奏对自己的系统进行演进,有时候可能还需要以天为单位对系统或业务进行扩展。 虽然DevOps对初创公司来说很明显是不可或缺的,但我认为那些有着庞大的老式IT部门的大企业才是能从这些基本原则和实践中获得最大收益的。本文将试图解释得出这个结论的原因和实现方法。 本文的部分内容已发布为Slideshare演示幻灯片,可在这里浏览:http://www.slideshare.net/JrmeKehrli/devops-explained-72091158 目录 DevOps的真谛到底是什么? 简介1.1 管理信条1.2 一个典型的IT组织1.3 运维人员测挫败感1.4 基础架构自动化1.5 DevOps:仅此一次,一颗神奇的银子弹 基础架构即代码2.1 概述2.2 DevOps工具链2.3 收益 持续交付3.1 从实践中学习3.2 自动化3.3 更频繁的部署3.4 持续交付的前提需求3.5 零停机部署 协作4.1…

Continue ReadingDevOps的真谛到底是什么?

Scrum 实践总结终结篇

难得的机会 谢谢大家关注我的微信公众号vipdocker,到目前为止已经有过千的订阅数。虽然还很少,但是我会继续努力分享多多写点工作心得以及工作的技术思考来与大家交流。不过惭愧的是,最近的一些变化使得我已经尽3个月没有写文章了,抱歉抱歉! 个人最大的变化是新近换了新东家,借着给新东家的同事分享Scrum开发模式的机会,把这个系列的文章的终结篇给完成了,或许某些内容与之前的文章有些重复,不过又有了新的思考,欢迎翻阅与对比查看(可通过公众号的历史文章找到)。 本文主要涵盖的内容如下: 敏捷Scrum模式概貌 Scrum Team的组成与角色分工 团队的日常活动 敏捷Scrum模式概貌 开发管理的痛点 开发过程的各个环节的明确边际,造成信息传递链条过长,沟通成本以及问题反馈效率低。现行的多数团队,其沟通方式多数是链式传递的,从产品->架构->开发->测试这样一个过程。然后就是每个人都希望做完自己规定的职责后可以当甩手掌柜,最后结果是下游环节在出现问题的时候把责任习惯性推给上游环节。测试不管大局,拼命找开发的所谓的“漏洞”,而开发则去说架构没有设计好,架构则找产品茬说产品啥YY需求。这样最明显的特征就是测试似乎绩效很好,但是产品质量依然一塌糊涂。这里引出一个公司管理的一个很现实的问题,在小团队规模开发模式下,以个人还是以团队的方式考核KPI和事? 新技术的引入(微服务、容器化),不再适应大军团作战,而是需要匹配的灵活的端到端团队。在一个分层比较多的组织里面,最难做到的是管理水平化,往往在团队外增加“保姆式”的组织或监控流程。这样团队除了日常的工作,还要疲于应付那些水平管理所带来的沟通、会议等。这样整个团队都在疲于加班,但是事情依然无法按时完成。 客户的需求变化已经不再局限于整体产品购买,而是倾向于业务快速迭代,大军团作战已经难以快速交付、快速变更。如何配合客户的业务变更成为传统大型产品销售型企业最大的挑战。因为一个客户的产品已经难以复制性再交付给下一个客户了。在这样的市场条件下,如何将系统更大程度的拆解与灵活组装考验架构设计能力,也同样考验开发组织形式的变更能力。 敏捷开发不是个新鲜事物,但是随着微服务、容器化等新技术理念的推出,敏捷开发找到了更合适的切合点而已。 什么是Scrum敏捷开发 几个值得思考的问题: 团队对于需求范围是否有自主性? 开发范围是否是根据时间倒排? 是流程管控开发人员,还是人主导流程? 在有市场交付压力的团队中,最容易遇到的问题就是倒排时间。因为交付内容与交付日期已经先确定了,然后当遇到开发瓶颈的时候,第一个想到的就是给团队增加人手。但是别忘了一个经典的说法,一个女人生一个孩子需要9个月,那么9个女人是否可以一个就生出一个孩子呢?答案是显而易见的。另外一个说法就是,如果所有的需求都是高优先级的,那么所有的需求都是低优先级的。 具体什么是Scrum敏捷开发,大家可以参考一下这本书:<<Successding with Agile Software Development with Scrum>> 不过还是跟大家强调一点,流程是死的,人是活动,需要根据团队情况进行变通。 区别 现在已经不流行敏捷开发,而是流程DevOps了。其实可以这样说,不以敏捷开发为基础的DevOps都是耍流氓。…

Continue ReadingScrum 实践总结终结篇

如何删除docker images/containers

docker images往往不知不觉就占满了硬盘空间,为了清理冗余的image,可采用以下方法: 1.进入root权限 sudo su 2.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: docker rm $(docker ps -a -q) 3.查看当前有些什么images docker images 4.删除images,通过image的id来指定删除谁 docker rmi <image id> 想要删除untagged images,也就是那些id为<None>的image的话可以用 docker…

Continue Reading如何删除docker images/containers

Quick Guide to Developing Microservices on Kubernetes and Docker

http://www.eclipse.org/community/eclipse_newsletter/2017/january/article2.php   As Java developers we’re often really busy with large backlogs, customer issues and countless disruptions. It can be quite daunting finding the time to learn all about things…

Continue ReadingQuick Guide to Developing Microservices on Kubernetes and Docker

CentOS

Prerequisites To configure Kubernetes with CentOS, you’ll need a machine to act as a master, and one or more CentOS 7 hosts to act as cluster nodes. Starting a cluster…

Continue ReadingCentOS

Linux 笔记

一、基础 1、基础命令 tty : 查看当前终端类型 返回值 终端类型 /dev/pst/# 伪终端 /dev/tty# 虚拟终端 /dev/console 物理终端 /dev/ttys# 串行终端 who : 查看登录用户 bashname : 查看目录基名 dirname : 查看目录名 type : 查看命令类型 where : 命令在哪(zsh)…

Continue ReadingLinux 笔记