DevOps
当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,持续集成和持续部署,或者是敏捷开发等等概念。那么应该怎么理解DevOps呢?
什么是DevOps?
随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发—测试—发布)模式已经不能满足快速交付的需求。2009 年左右 DevOps 应运而生,简单地来说,就是更好的优化开发(DEV)、测试(QA)、运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建、测试、发布更加快捷、频繁和可靠。我们目前大部分的项目都是这个模式,很多时候需求是不断变化的,需要及时的响应需求变更,同时也要保障产品的开发周期和交付质量。
DevOps的好处和价值?
- 代码的提交直接触发:CICD、消除等待时间,快速反馈,
- 每个变化对应一个交付管道:使问题定位和调试变得简单
- 全开发流程高效自动化:稳定,快速,交付结果可预测
- 持续进行自动化回归测试:提升交付质量
- 设施共享并按需提供:资源利用最大化
Devops与持续集成
DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。
毫无疑问,DevOps 是持续集成思想的延伸,持续集成/部署是 DevOps 的技术核心,在没有自动化测试、持续集成/部署之下,DevOps就是空中楼阁。
DevOps 的技术栈与工具链
Everything is Code,DevOps 也同样要通过技术工具链完成持续集成、持续交付、用户反馈和系统优化的整合。Elasticbox 整理了 60+ 开源工具与分类,其中包括版本控制&协作开发工具、自动化构建和测试工具、持续集成&交付工具、部署工具、维护工具、监控,警告&分析工具等等,
补充了一些国内的服务,可以让你更好的执行实施 DevOps 工作流。
- 版本控制&协作开发:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar
- 自动化构建和测试:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit
- 持续集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go
- 容器平台: Docker、Rocket、Ubuntu(LXC)、第三方厂商如(AWS/阿里云)
- 配置管理:Chef、Puppet、CFengine、Bash、Rudder、Powershell、RunDeck、Saltstack、Ansible
- 微服务平台:OpenShift、Cloud Foundry、Kubernetes、Mesosphere
- 服务开通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat
- 日志管理:Logstash、CollectD、StatsD
- 监控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kibana
DevOps 最佳实践
自 2009 年提出 DevOps 的概念起,很多公司都开始实施 DevOps,国外比较著名的有Amazon 、Google、Facebook等,国内著名的有百度、华为、阿里等。Amazon 是 DevOps 最佳实践的最有说服力的代表之一。这是 Amazon 在 Why We Need DevOps 一个月的 DevOps 快照:
11.6 seconds: 平均部署时长 (工作日)
1,079: 一小时的最大部署量
10,000: 主机平均并发接收部署量
30,000: 主机最高并发接收部署量
从早期的大型 SOA (Service Oriented Architecture)到 DevOps 文化的形成,Amazon 的每个工程师都可以完全独立地编写代码,测试代码,版本管理,部署上线,服务监测等任务。这套内部强大的 DevOps 文化最终形成核聚变, Amazon 一跃成为世界级别的云服务领导者 —— Amazon Web Services (AWS)。
DevOps = Culture + Tools
如果想整个业务部署 DevOps,不但需要软性要求即从上而下的培养 DevOps 文化自上而下地进行探索,也有硬性工具链要求,才能获得更高质量的软件交付。
最后,不论你是技术Leader,还是一名Dev、QA 或 Ops,实现全面的 DevOps 非常理想化也十分有挑战,希望这份 DevOps 初学者指南是一个好的开始:)