DevOps 这个词是由Development(开发) 和 Operations(运维)组合起来的,你可以把它理解成为一种让开发团队和运维团队紧密合作的方法。
DevOps从2009年诞生到现在已经14年多了,一开始大家还在摸索,慢慢地就变成了现在的一种主流开发交付模式。你肯定也发现了,DevOps 在我们身边出现的频率还蛮高的!各种行业峰会上都有它的专场,行业里的公司在招DevOps 工程师,企业在做 DevOps 转型,在设计和开发 DevOps 平台等等…
现在已经很少还有人在问“DevOps 有啥用”、“DevOps适不适合我”这种问题了,大家都更关心怎么落地实践 DevOps,怎么让它充分发挥价值。而且 DevOps 专家的岗位薪资也很高,仅次于一些高级管理层,都已经到了 IT 行业的金字塔顶部区域。
所以说,DevOps 基本上成了所有 IT 从业人员都必备的技能。不过呢,因为市场上资料太多太杂,个人的精力又有限,好多人都挺困惑的。
下面小艾老师就帮大家来科普一下。
01、对DevOps的理解
任何牛逼的项目,都是从一个单体项目慢慢发展而来。我们IT开发里边第一个要面对的就是单体架构,然后一步一步到集群、分布式、微服务、容器化,开发模式从瀑布开发,到敏捷开发,再到DevOps。
单体架构+瀑布开发:如果服务器少,部署又简单(基本就是LNMP),那就不需要运维,开发直接按照瀑布流方式进行就好了。写好代码,找台服务器安装好环境,把 jar 包上到远程服务器,开启服务就好了。
分布式架构+敏捷开发:后面业务体量大了,一台服务器扛不住,就要加机器,再加入 nginx、cdn、缓存等通用基础服务,这个时候需要专门的运维人员(Ops)介入,需要多人协同开发。然后因为业务可能也变复杂了,开发就会分工,每个人负责一小部分,再通过不断迭代,小步快跑的方式持续开发,这个就是敏捷开发
微服务架构+DevOps:如果发展到阿里、腾讯这种体量,或者系统复杂到一定程度,协同开发会涉及到很多人,JAVA,PHP,GO 各种技术栈都会有,一般的做法就是将项目拆成一个个小的服务单独部署,不然一个Bug就能导致业务线全线崩溃了。
拆分部署,就催生出了DevOps。所谓DevOps开发模式,实际上就是运维事先把上线的规则都给定义好了,开发只要按照规则自己就可以完成上线,如果出问题了也可以快速定位去调整。
运维要做的就是制定规则和自动化的代码及工具,比如监控,有专门的监控组件和可视化,基础服务有CDN、负载均衡,日志也有专门的日志工具等等……只要配置好这些工具,开发即运维,就能做一部分运维的事情了。
DevOps 的三大支柱:即人(People)、流程(Process)和平台(Platform)。
人 + 流程 = 文化
流程 + 平台 = 工具
平台 + 人 = 赋能
02、DevOps平台搭建工具
↑DevOps 工具全景图
项目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker
产品和UI图:蓝湖
代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion
构建工具:Ant、Gradle、maven
自动部署:Capistrano、CodeDeploy
持续集成CI(Continuous Integration):Gitlab CI
持续交付CD(Continuous Delivery):Gitlab CD
配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRail
容器:Docker、LXC、第三方厂商如AWS
编排:K8S、Kubernetes、Core、Apache Mesos、DC/OS
服务注册与发现:Zookeeper、etcd、Consul
脚本语言:python、ruby、shell
日志管理:ELK、Logentries
系统监控:Datadog、Graphite、Icinga、Nagios
性能监控:AppDynamics、New Relic、Splunk
压力测试:JMeter、Blaze Meter
预警:PagerDuty、pingdom、厂商自带如AWS SNS
网关:Kong,zuul
链路追踪:Zipkin
HTTP加速器:Varnish
消息总线:ActiveMQ、SQS
应用服务器:Tomcat、JBoss
Web服务器:Apache、Nginx、IIS
数据库:MySQL、Oracle、PostgreSQL等关系型数据库;cassandra、mongoDB、redis等NoSQL数据库
03、要实践 DevOps ,需要知道些什么?
不同公司的“DevOps 工程师”含义不同。小型公司可能找有系统管理经验的,大型公司或老牌公司,已经有一个稳固的系统管理团队了,他们要找的可能在 “设计运维功能的软件工程师”……这取决于不同公司的招聘经理。
一般来说,招聘的“DevOps 工程师“需要对以下这些内容有深入学习:
-
管理和设计安全、可扩展的云平台,像 AWS 等。
-
用流行的 CI/CD 工具构建发布部署流水线和策略,如 Jenkins 等。
-
用基于时间序列的工具监控、记录和报警,像 Kibana 等。
-
用配置管理工具做到“基础设施即代码”,像 Chef 等,还有发布工具如 Terraform 等
-
容器越来越受欢迎,掌握 Docker 等及编排工具知识有帮助。
如果你希望做 DevOps 实践的系统管理员,还得会写代码,Python 和 Ruby 是DevOps的流行语言。
如果你是开发人员,想做 DevOps ,建议再学学 Unix、Windows 及网络知识。
如果你觉得这些内容多,也别担心。建议参加艾威的DevOps Foundation认证培训,此认证由 DevOps 学院与 PeopleCert 联合推出,提供了一套“成体系”的 DevOps 实践知识、工具和方法,非常值得我们学习。