文章目录
- 什么是DevOps?
- DevOps的概念提出
- 单体架构 + 瀑布模式
- 分布式架构+敏捷开发模式
- 微服务架构 + DevOps
- DevOps常用工具
什么是DevOps?
DevOps是一个复合词,它是Development
+ Operations
的组合,它强调了开发(Dev) 和 运维(Ops) 的沟通协作。
DevOps 整个流程包括敏捷开发>持续集成>持续交付>持续部署。
DevOps的概念提出
单体架构 + 瀑布模式
单体架构为LNMP,这时Dev即全栈。开发好直接部署就行。
这个时候服务监控也简单,服务出了问题,直接去线上看一下运行日志,为了解放双手监控服务,开发者会写一些脚本分析日志,服务器少,部署简单,通常开发就可以完成运维的工作,不需要专门的运维来做部署,所以开发模式很简答,直接按照瀑布流方式开发就可。
分布式架构+敏捷开发模式
随着业务的增多,需要多人协作。人员一多,为了更好的分工,大多会将项目进行拆分,每个人负责专注于一部分。
敏捷开发的核心理念:就是既然我们无法充分了解用户的真实需求是怎样的,将一个大的目标不断拆解,把它变成一个个可交付的小目标,然后通过不断迭代,以小步快跑的方式持续开发。
另外,为了保证项目质量,测试环节不可减少,为了加快速度增大开发效率,QA 的工作最好是和开发同步交替进行的,需要将测试环节从后面注入到整个开发环节当中,每次可交付的都是一个可用的功能集合,对开发交付的内容进行持续验证。
公司业务一大,像大公司的动不动就是几千台服务器,就需要专门的运维介入了,。但是这个时候也不是 DEVOPS,而是 DEV+OPS,这时 Ops 的主要职责就是:硬件维护、网络设备维护、DBA 、基础服务维护、数据监控等,运维们擅长写各种部署,监控脚本,减少机械的重复工作,开发模式变成了敏捷开发模式
微服务架构 + DevOps
微服务架构将项目拆成一个个小的服务单独部署。这时,拆分部署催生出 DevOps,再看看这种架构下的开发模式 DevOps,运维需要做的上线工作,主要就是将代码部署到对应的机器里面,微服务有那么多的服务,每个大点的公司几百个服务不算多,而且还可能随时搞一个服务出来,如果还按照原始的脚本部署方式,可能最后连是哪个脚本都找不到。
那么为何不能再远程部署一些机器,专门用来管理代码,进行上线工作,由运维事先把上线的规则都给定义好了,开发只要按照他的规则都访问这台服务器进行各自的代码合成和发布,自己上线呢,能用代码自动完成的事情就绝不要手动解决,这是每个开发人员都在想的东西。运维需要做的事情,慢慢的都沉淀到了各个平台上面,例如监控,有专门的监控组件和可视化,基础服务例如服务器,CDN,负载均衡等基础服务可以外包到云服务厂商,日志也有专门的日志工具,链路追踪也有专门的组件和可视化,还有网关等,渐渐的,只要这些都配置好了,开发也可以做运维的部分工作,毕竟开发才是最了解代码的人,哪里出了问题看看监控日志,可以最快速度定位到问题,于是 DevOps开发模式诞生了,开发也是运维。
下面的图说明了DevOps的位置及价值:
下面就是一个简单的DevOps流水线
DevOps常用工具
以下并不完全,仅供参考:
• 代码管理: GitHub、GitLab、SubVersion
• 构建工具:Ant、Gradle、maven
• 持续集成(CI): TeamCity、Jenkins、Bamboo
• 配置管理:Ansible、Chef、Puppet
• 容器:Docker、LXC
• 编排:Kubernetes
• 脚本语言:python、ruby、shell
• 日志管理:ELK(ElasticSearch, Logstash, Kibana)、EFK(ElasticSearch, Fluentd, Kibana)
• 系统监控:Prometheus 、Zabbix
• 压力测试:JMeter
其中最常用的几种就是Git、Jenkins、Docker、Kubernetes。