sqisydream 2017-10-17
2017年,Devops火了,一时间互联网大厂都在谈自动化运维,都在谈Devops实践,从国外的微软谷歌到国内的阿里腾讯,都在做Dveops落地。那么Devops为什么会火呢?
如同这张漫画,软件研发的功能越来越全面,导致代码更加庞大而复杂,在增加一些新特性的时候,需要投入大量的人力物力来更新及维护代码。即使有优秀的架构师、数据库和运维人员,以及规模庞大的开发和产品经理团队,也很难掌控全局。
手工编译、上传服务器文件、执行命令、启动停止服务器、发现BUG再重复一遍流程,软件开发的重复劳动越来越多,在Devops概念之前,全部要靠人工手动完成,也看到了很多运维人员半夜起来救急的情况。
Devops一词来自于Development 和 Operations 的组合,从字面意思理解,就是让软件开发人员和运维人员更好的沟通合作,通过自动化流程让软件开发、测试、发布更快捷。实际上,Devops是对敏捷和精益开发的传承,是在整个IT价值流中实施精益的结果,Devops并不是只一个新的工程师,也不是一个部门,而是一种文化,没有什么工具可以把团队直接变成Devops组织,这是一种观念的转变。
Devops在高效交付以及自动运维方面的好处让其快速被市场认可并接受,但是在做Devops实践中往往会遇到很大的阻力。
Devops并不是简单的将开发部门和运维部门合并,而是通过自动化的基础设施、合理的流程规范以及智能的自动运行系统测试使开发和运维之间的沟通协作得到加强。
这需要开发和运维之间达成共识,并且围绕业务系统来组织工作,弱化职责观念,打破传统IT分组的壁垒。
在第六届TOP100全球软件案例研究峰会的入选榜单中,我们看到了来自阿里、腾讯、去哪和中国移动的Devops实践案例。
很多人都在说devops,好像这两年大家都找到了运维的完整解决思路了,好像运维界的“教科书”已经出版了,照着做就能实现运维的新时代,过上喝着咖啡做运维的好日子。
然而在此之前的运维痛楚和涅磐过程又是怎样的呢?当前腾讯SNG运维维护着十万台规模的服务器,最多一人维护一万台,在天津大爆炸、春节红包等各类突发事件背后都展现出突出的运维能力。
回顾腾讯运维十年前开始的建设历程,标准化是腾讯SNG运维的海量运营思想的核心理念,需要有一些核心软件和方法论,才能帮助运维少走弯路,突破各种屏障,实现标准化的目标,最终帮助运维和研发向Devops延展。根据业务所处的不同阶段来做投入产出的分析,能影响运维方向的建设,应当尽早的投入和尽可能的深入。
组建一套运营体系首先需要考虑五至十年的业务规划和选择合适的运营理念。不迷信于某一种运营方法论,选择最合适自己企业的才是最重要的。
移动开发模式已经进入两级分化:超大规模APP的研发模式偏项目式,研发协同的人员、模块较多,需要完整的构建、测试、发布、运维等DevOps体系;而一些创新、试验类的APP在商业模式和业务形态未完全确定的情况下,更适合以较快的方式来测试和验证业务的想法,所以以最低成本快速创建一个 APP 就是当务之急。
浙江移动的DevOps产品研发团队,服务用户包括对内的几百人规模的开发团队和对外的地市开发团队以及其他对外的移动租户,主要研发产品是建立的是以用户体验为中心的混合云管理平台。
DevOps的建设,大家做的不尽相同,分为基于构建服务(CI/CD)的研发管理服务和基于公共云服务能力的两种流派。浙江移动的DevOps用户包括对内的几百人规模的开发团队和对外的地市开发团队,我们建立的是以用户体验为中心的混合云平台。
根据复合理论(Complex Theory)的观点,实施敏捷DevOps要从更多复合、复杂的组织和团队环境中找到突破点,聚焦于痛点问题,把时间“浪费”在“高附加值”的事物上,集中精力不遗余力的解决痛点问题,以此辐射找到适合团队发展的敏捷DevOps之路。
Qunar具有先天的devops文化,在研发过程中也有很多自动化工具的支持。由于这些工具由不同专业背景的团队提供,工程师们就要去理解不同工具中特有的概念,记住各个工具间的关系,有时为完成一件事情不得不在多个系统间进行 “人工智能”的切换。借助devops的思想,我们决定拆掉原先“各自为政”的自动化工具的墙,消除信息孤岛,建立以应用为中心的全生命周期管理平台——Portal。所谓全生命周期,是指从需求--开发--测试--交付—运维的一个闭环。
1.版本控制和协作开发工具
(1)版本控制系统Git
(2)代码托管平台 GitLab
(3)代码评审工具 Gerrit
(4)版本控制系统 Mercurial
Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。
(5)版本控制系统 Subversion
Subversion 是一个版本控制系统,相对于的 RCS、CVS,采用了分支管理系统,其设计目标是取代CVS。
(6)版本控制系统 Bazaar
Bazaar 是一个分布式的版本控制系统,它发布在 GPL 许可协议之下,并可用于 Windows、GNU/Linux、UNIX 以及 Mac OS 系统。
2.自动化构建和测试工具
(7)Apache Ant
Apache Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。
(8)Maven
Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目,而使用 Ant 则需要十几行。
(9)Selenium集成测试工具
(10)Python单元测试框架
(11)QUnit 是 jQuery 的单元测试框架。
(12)JMeter功能和性能测试的工具,完全用java实现。
(13)Gradle
Gradle 是可以使用 Groovy 来书写构建脚本的构建系统,支持依赖管理和多项目,类似 Maven。
(14)PHPUnit
PHPUnit 是一个轻量级的PHP测试框架。
3. 持续集成&交付
(15)Jenkins可扩展的持续集成引擎
(16)Capistrano
Capistrano 是用来并行在多台机器上执行相同命令的工具,使用用来安装一整批机器。
(17)BuildBot
BuildBot是进行系统自动化编译/测试周期最需要的软件,用于验证代码的变化。
(18)Fabric
fabric8 是开源 Java Containers(JVMs) 深度管理集成平台。能够很方便的从 UI 和 UX 一致的中央位置进行自动操作,配置和管理。fabric8还提供了一些非功能性需求,比如配置管理,服务发现故障转移,集中化监控,自动化等等。
(19)Tinderbox
(20)Travis CI
Travis CI 是一个基于云的持续集成项目, 可以支持大部分主流语言,比如:C,PHP,Ruby,Python, Nodejs等等。
(21)Continuum是最新的 CI 服务器之一,基于 Web 界面配置容易。
(22)LuntBuild自动构建工具。通过web接口可以很容易地进行系统的持续构建。
(23)CruiseControl
CruiseControl 是一个针对持续构建程序(项目持续集成)的框架,包括email通知的插件,Ant和各种各样的CVS工具,还提供了一个Web接口, 可随时查看当前的编译状况和历史状况
(24)Integrity是 Ruby 开发的持续集成服务器。
(25)Gump
Gump 是 Apache 的整合工具。它以 Python 写成、完全支持 Apache Ant、Apache Maven 等等软件组建工具。
(26)Go
Go 是 Google 开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。
4. 部署工具
4.1 容器平台
(27)Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
(28)Rocket
Rocket (也叫 rkt)是 CoreOS 推出的一款容器引擎,和 Docker 类似,帮助开发者打包应用和依赖包到可移植容器中,简化搭环境等部署工作。
(29)Ubuntu(LXC)
LXD 是 ubuntu 基于 LXC 技术的重构,容器天然支持非特权和分布式。LXD 与 Docker 的思路不同,Docker 是 PAAS,LXD 是 IAAS。LXC 项目由一个 Linux 内核补丁和一些 userspace 工具组成。这些 userspace 工具使用由补丁增加的内核新特性,提供一套简化的工具来维护容器。
4.2 配置管理
(30)Chef
Chef 是一个系统集成框架,为整个架构提供配置管理功能。
(31)Puppet
Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户, CRON作业,和主机一起显然离散元素,如包装,服务和文件。
(32)CFengine
Cfengine(配置引擎)是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。Cfengine 适用于管理各种环境,从一台主机到上万台主机的机群均可使用。
(33)Bash
bash 是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。
(34)Rudder
Rudder 已改名为Flannel,为每个使用 Kubernetes 的机器提供一个子网。也就是说 Kubernetes 集群中的每个主机都有自己一个完整的子网,例如机器 A 和 B 可以有 10.0.1.0/24 和 10.0.2.0/24 子网。
(35)Powershell
(36)RunDeck
RunDeck 是用 Java/Grails 写的开源工具,帮助用户在数据中心或者云环境中自动化各种操作和流程。通过命令行或者web界面,用户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的门槛。
(37)Saltstack
Saltstack 可以看做是func的增强版+Puppet的弱化版。使用Python编写。非常好用,快速可以基于EPEL部署。Salt 是一个开源的工具用来管理你的基础架构,可轻松管理成千上万台服务器。
(38)Ansible
Ansible 是用于发布、管理和编排计算机系统的工具,Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。
4.3 微服务平台
(39)OpenShift
OpenShift 是由红帽推出的一款面向开源开发人员开放的平台即服务(PaaS)。 OpenShift通过为开发人员提供在语言、框架和云上的更多的选择,使开发人员可以构建、测试、运行和管理他们的应用。
(40)Cloud Foundry
Cloud Foundry 是VMware于2011年4月12日推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发 人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
(41)Kubernetes
Kubernetes 是来自 Google 云平台的开源容器集群管理系统。基于 Docker 构建一个容器的调度服务。该系统可以自动在一个容器集群中选择一个工作容器供使用。其核心概念是 Container Pod。
(42)Mesosphere
Apache Mesos 是一个集群管理器,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行Hadoop、MPI、Hypertable、Spark。
4.4 服务开通
(43)Puppet
Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如用户, CRON作业,和主机一起显然离散元素,如包装,服务和文件。
(44)Razor
(45)Docker Swarm
Docker Swarm 是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主机资源的利用率和容错服务。具体来 说,Docker Swarm支持用户创建可运行Docker Daemon的主机资源池,然后在资源池中运行Docker容器。Docker Swarm可以管理工作负载并维护集群状态。
(46)Vagrant
Vagrant 是一个基于 Ruby 的工具,用于创建和部署虚拟化开发环境。它使用 Oracle 的开源 VirtualBox 虚拟化系统,使用 Chef 创建自动化虚拟环境。
(47)Powershell
(48)OpenStack Heat
5. 维护
5.1日志记录
(49)Logstash
Logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。
(50)CollectD
Collectd 是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制。比如以RRD 文件形式。
(51)StatsD
StatsD 是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或者 TCP 方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务,例如 Graphite。
6. 监控,警告&分析
(52)Nagios
Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。
(53)Ganglia
Ganglia 是一个跨平台可扩展的,高 性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数据存储和可视化。
(54)Sensu
Sensu 是开源的监控框架。主要特性:高度可组合;提供一个监控代理,一个事件处理器和文档 APIs;为云而设计;Sensu 的现代化架构允许监控大规模的动态基础设施,能够通过复杂的公共网络监控几千个全球分布式的机器和服务;热情的社区。
(55)Zabbix
Zabbix 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
(56)ICINGA
ICINGA 项目是 由Michael Luebben、HendrikB?cker和JoergLinge等人发起的,他们都是现有的Nagios项目社区委员会的成员,他们承诺,新的开源项 目将完全兼容以前的Nagios应用程序及扩展功能。
(57)Graphite
Graphite 是一个用于采集网站实时信息并进行统计的开源项目,可用于采集多种网站服务运行状态信息。Graphite服务平均每分钟有4800次更新操作。
(58)Kibana
Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。