产品研发有自己的生命周期: 设计阶段---开发阶段---测试阶段---部署阶段---线上运行阶段---下线或者回滚阶段。
而运维在这个生命周期中的每个阶段都有可能参与:
设计阶段: 主要针对系统架构设计的合理性进行评估,包括是否存在单点,是否可以容错,是否有强耦合等。当然也包括了资源的申请,比如是用阿里服务器还是机房服务器。
注: 面试了很多培训机构的学员,他们喜欢说“真实服务器”这个词,这有一种可能是心虚的表现,觉得自己一直在虚拟机操作,即使用过阿里云也不敢说自己操作过。会时常把真实服务器挂嘴边。
开发阶段: 环境部署,依赖库及包管理,数据库准备,操作系统选择等
部署阶段: 自动化部署,稳定性检验,可扩展部署等
线上运行阶段: 实时监控,故障处理,容量管理
下线及回滚阶段: 资源回收,服务终止通告,停止服务。
从这个生命周期我们可以看到运维的日常工作:
产品技术方案的评估
资源预估,申请和管理
系统环境部署,开发环境准备
产品上线,下线及回滚方案,发布产品(很多公司开发人员负责这块)
监控线上服务的质量,确保高可用性
故障快速响应
与产品,测试,技术等其他团队进行沟通(这里是你找男女朋友的关键)
开发工具或者平台,实现自动化,提高系统的稳定性和可靠性。
通过运维的基本工作,我们来看看一个运维人员需要掌握的知识体系:
操作系统: Ubuntu,CentOS,Redhat
web: nginx,apache ,tomcat
监控: zabbix,Grafana
自动部署: ansible pssh salt jenkins
负载均衡: LVS ,HAproxy, Nginx
数据库: mysql, Oracle,SQL server
消息队列: kafka,zeroMQ
大数据平台: HBase, MongoDB ,Cassandra
容器: LXC Docker,K8S
虚拟化: Openstack,Xen ,KVM
版本控制: Git svn
以上只是最常见的运维技术和框架,如果要拓展的还有很多,比如安全方向的,fail2ban ,比如测试工具sysbench 等等。
在众多的技能体系中,很多人习惯于研究一个又一个关键永远都学不完。其实运维的发展是从最原始的人工阶段慢慢过渡到工具和自动化阶段,最后才是平台化阶段。 你在不了解人工阶段的情况下,直接使用自动化工具倒是也无可厚非,但是却很难明白为什么要用,用来干嘛,怎么用。
举个栗子: 如果你自己手动做过日志分析,或者使用自己写的shell脚本去做过日志分析,你就很容易明白ELK的使用。 因为自动化的基础是手工可以实现,如果手工阶段实现不了,自动化如何去实现。
很多人提高了智能运维,其实智能运维的应用已经在国内的百度,搜狗,阿里等企业开始尝试和摸索。 目前智能运维主要被用于故障分析,根据故障的现象,快速定位问题。 这里会涉及到很多算法,比如我们常见的,基于指数平滑的二次平滑,三次平滑算法,或者循环神经网络算法等等。
智能运维还不是小公司的研究范畴,但总有一天会被普及。当然我们也不必因为智能的发展而忧心忡忡,毕竟时间万物的发展,有新的事务出现,必将有新的岗位代替旧的岗位。 我们只要用心去掌握新岗位的技能就行了。