本文经授权转载简书作者:顾宇
原文:http://www.jianshu.com/p/c6573e63c752
在#DevOps的前世今生# 1. DevOps编年史一文中,通过追溯 DevOps 活动产生的历史起源,我们发现了 DevOps 是敏捷思想从软件开发端(Dev)到系统维护端(Ops)的延伸。无论是 DevOpsDays 的创始人 Patrick Debois,还是同时期的 The Agile Admin。都想通过敏捷来改进传统的系统维护工作以及软件开发部门和系统维护部门的合作关系。但是,DevOps 的矛盾从何而来?这还要从 Dev 和 Ops 的起源开始讲起。
历史要追溯到刚刚出现计算机的时期。当时,软件开发还是少数人通过高学历才能够掌握的技能,那个时候只有“程序”(Program),但没有“软件”(Software),所以那个时候编写程序的人员被称为“程序员”(Programmer)。基本的学习材料还只是计算机设备厂商附送的使用手册。所以,只能先购买设备,再自己培养人才。
早期的程序员
最先购买计算机的是科研单位,军队,政府以及少数大型企业。同时组建了新的部门,成立了信息技术部(IT Department),或者叫信息化办公室(IT Office)。在中国的有些单位里干脆直接叫“电脑部”。他们一个科室,一个办公室主任,外加两三个科级干部和几个科员,专门管理这些电脑的使用情况,并且学习软件编程技术,用程序来解决其它各部门的。
这是最初的IT运维雏形,在这个时期是没有 Dev 和 Ops 之分的,他们统称为 Programmer。由于开发和运维都由同样的人包揽,自己维护自己开发的程序,也可以被看做是原始的 DevOps。这个时期的计算机系统和问题较简单,开发和维护并不复杂,无需进行专业区分。
随着计算机的成本不断下降,尤其是以IBM PC为代表微型计算机( MicroComputer )开始普及。企业也开始大规模使用计算机进行办公。由于软件开发人员数量仍然很少,加之需求很旺盛,专业的软件开发人员成本依然高昂。
最开始的时候,软件仅仅通过磁盘拷贝进行流传,某些介绍计算机或者软件的杂志开了先河。程序员通过磁盘向杂志社投稿,杂志社通过变卖杂志和软件获利。由于软件的边际生产成本几乎是0,所以渐渐有人把销售软件变成了一门生意。随着软件的扩展,当初为个人目的(Personal Purpose)所编写的软件渐渐的开始走通用化的路线,慢慢形成了软件产品。接着有了专门从事软件开发的公司,并逐渐成为一个产业。并且有了软件开发工程师(Developer,简称Dev)这个职业。
微软的成功是软件开发专业化的代表
在这个时期,开发软件仍然是很专业的事情,企业的IT部门要想开发软件的代价十分高昂。因此,大部分单位,组织和企业通过购买的形式获得软件。IT部门逐渐成为了负责信息化采购以及软硬件基本操作培训的部门。此外,由于信息化发展加速,各行各业软件层出不穷,加之软件企业越来越多,IT部门不得不通过更广泛的学习了解技术的变化。
随之带来的问题是:无论企业买来多少软件,企业的信息化需要仍然无法被满足。一台台电脑成为了企业的信息孤岛,解决了信息的分析和存储问题最多实现了无纸化办公。没有让部门间的信息有效的流动起来。大型企业最先发现这些问题并且给出了最初的解决方案,使得企业级软件开发和系统集成(System Integration)慢慢成为了一个热门的领域。
企业级软件系统最大的特点是通过计算机网络解决了企业内部的信息孤岛。但这样的系统无法在PC上运行需要专业的工作站,服务器以及网络设备。而这些设备的管理就理所当然的成为了企业IT部门的职责。
Ops 需要管理很多的设备和应用
随着软硬件技术的发展,特别企业级应用开发的经验不断积累,设备的采购成本和软件的开发成本进一步降低。大型IT厂商开始瞄准企业级应用市场,尤其是IBM,Oracle和EMC推出了相应的产品。使得软件定制开发的成本不断下降。加之随着开发人员越来越多,开发成本逐渐降低,于是出现了企业定制化软件开发,出现了MIS和ERP这样的应用以及J2EE这样的企业级软件开发框架。
在这个过程中,IT运维的概念逐渐产生,维基百科上是这样定义IT运维(IT Operations)的:
IT Operations is responsible for the smooth functioning of the infrastructure and operational environments that support application deployment to internal and external customers, including the network infrastructure; server and device management; computer operations; IT infrastructure library (ITIL) management; and help desk services for an organization.
翻译成中文就是:
IT运维的责任是要为内部和外部客户的应用部署提供平滑的基础设施和操作环境,包括网络基础设施,服务器和设备管理,计算机操作,ITIL管理,甚至作为组织的IT帮助中心。
对于企业的IT部门来说,工作就不仅仅是维护计算机和网络这些设备了。还要包括运行在上面的软件系统,尤其是定制化的企业级软件产品。因此在定制化企业级软件交付从乙方交付给甲方的时候就需要一系列的技术审查以确保质量,这就使得原本不需要关心软件是如何开发的企业IT部门提出了更高的要求。他们必须提升专业水准以应对这样的变化。同时需要重新思考整个IT部门的服务管理和设计。随着IT部门知识和服务专业度的提升,促生出了了ITIL(Information Technology Infrastructure Library,信息技术基础设施库)这样的最佳实践库,也使“系统维护工程师”(Ops)更加专业化。
在这个时期,Dev和Ops的矛盾,主要是由Dev所代表的乙方和Ops所代表的甲方在定制化软件产品交付质量上的矛盾。
随着企业级软件开发日趋完善和成熟,形成了以RUP(Rational Unified Process,Rational 统一软件开发过程)为代表的方法论。RUP描述了如何有效地利用商业的可靠的方法开发和部署软件,是一种重量级过程(也被称作厚方法学),因此特别适用于大型软件团队开发大型项目。
后来,互联网企业的繁荣着实闪瞎了世界的眼睛。没有人想到原本用来进行国防和科研的广域网居然可以带来这么大的商业价值。互联网创业公司的成功不断的颠覆了很多人习以为常的事情,特别是IT产业。
首先,相较于最多万人的用户访问规模,来自互联网的千万级甚至是亿级的访问规模是企业级应用不曾遇到过的。这对软件开发,主机管理,网络架构都带来了很大的挑战。
其次,企业级应用和互联网应用面对的问题是不一样的。根据“康威定理”:设计系统的组织,其产生的设计和架构等价于组织间的沟通结构。相较于有着清晰的等级和部门分工的组织来说,互联网产品的沟通结构更加复杂。
此外,互联网应用由互联网企业自开发自维护。虽然从表面上看没有了甲方和乙方的对立。但开发和运维相互分离的工作流程和考核方式却沿用了下来,职责上的对立依然存在:
Dev的工作是给应用系统增加新的功能/修复软件的Bug,这一系列价值的产生是通过应用系统变更实现的。一般的组织会用代码/功能的贡献数量作为KPI作为考核的依据,以激励Dev的工作产出。
Ops的工作则是让应用系统保持稳定和高性能,即最大化缩短宕机时间并能够提升应用系统的性能,并以这两者作为Ops的KPI的考核指标。以激励Ops通过维护工作使应用系统能够按照预期稳定的产出价值。
而市场环境的瞬息万变和资本的集中化使得互联网软件产品的生存状态十分脆弱:
一方面,快速变化的市场难以预测。因此,基于经验的重量级软件开发方法不再适用。取而代之的是强调适应性,拥抱变化的敏捷方法。互联网软件必须通过频繁增加/修改功能来提升自身对市场的适应程度。
另一方面,互联网软件的变更给带来的风险和损失都是难以度量的。因此,互联网软件有更加严格的交付标准,需要做更多的质量保证。而基于经验的系统运维实践并没有给出足够的方法以应对这种挑战。
那么,如果将敏捷的文化和原则引入运维,会如何?
请期待下一篇:#DevOps的前世今生# 3. DevOps的文化和原则
感谢ThoughtWorks总监咨询师史凯对本文的改进意见和建议。
https://en.wikipedia.org/wiki/Information_technology_operations
https://en.wikipedia.org/wiki/Software_developer
https://en.wikipedia.org/wiki/Management_information_system
https://en.wikipedia.org/wiki/Enterprise_resource_planning
https://en.wikipedia.org/wiki/Rational_Unified_Process
http://agilemanifesto.org/iso/zhchs/manifesto.html
https://theagileadmin.com/what-is-devops/
http://www.jedi.be/blog/2009/12/22/charting-out-devops-ideas/
http://itrevolution.com/the-convergence-of-devops/
http://joehertvik.com/operations-management/
https://zh.wikipedia.org/wiki/IBM-Rational%E7%BB%9F%E4%B8%80%E8%BF%87%E7%A8%8B
https://zh.wikipedia.org/wiki/%E6%95%8F%E6%8D%B7%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91
http://www.infoq.com/cn/news/2015/08/itil-vs-devops/
Original url: Access
Created at: 2018-11-06 10:51:56
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论