「 开工日 」谈谈你对运维工程师的认知~
阅读本文大概需要 10 分钟。
互联网刚兴起的时候,运维只是一个简单的服务安装管理及监控工作,没人会想到人类在互联网上建立了如此庞大的业务生态。从衣食住行到教育金融,服务器的规模在急剧膨胀,从简单的人力可管控,逐渐进化到依赖自动化体系来管理,另一方面,仅依赖工具已经不能很好的解决运维场景的需求。
近年来,互联网特别是移动互联网的普及让用户的获取突破了地理的限制,各个领域都出现了亿级乃至十亿级海量用户规模的高科技公司,如搜索领域的Google、百度、社交领域的Facebook、腾讯、出现领域的Uber、滴滴、电商领域的Amazon、阿里巴巴、以及中国最大的自媒体社交平台微博等;服务海量用户需要大规模的在线分布式系统和大数据处理系统。同时,在竞争日益激烈的市场环境下,高科技公司产品和技术的快速迭代能力也至关重要。
1.认识运维
运维(IT Opeartions),是指通过一系列步骤和方法,管理与维护线上服务或者产品的过程。有着非常广泛的定义,在不同的公司不同的阶段代表不同的职责与定位,没有一个统一的标准。随着互联网的发展,运维的含义也在逐渐互联网化。通常属于技术部门,与研发、测试、系统管理同为互联网产品的技术支撑。
运维的重点在于系统运行的各种情况、从机房、网络、存储、物理机、虚拟机这些基础的架构、到数据库、中间件平台、云平台、大数据平台、偏重的也不是编程,而是对这类平台的使用和管理。运维的水平可以成为衡量一个公司技术实力的标准。
运维工程师,是指从事运维工作的工程师。运维工程师的工作范围非常广泛,包括服务器购买、租用和上架等基本管理,调整网络设备的配置管理和部署,服务器操作系统安装调试,测试环境和生产环境的初始化与维护,代码部署和管理(Git和SVN等),设计和部署线上服务的监控和报警,服务安全性检测(防止漏洞和攻击),数据库管理和调优等。在大型公司中,运维工程师根据工作内容被细化为网站运维、系统运维、网络运维、数据库运维(DBA)、IT运维、运维开发(DevOps)、运维安全等方向。
运维的工作内容决定了对运维工程师的要求会非常高,运维工程师需要对服务器资源(CPU、内存、磁盘、网络IO等)非常了解,对Linux系统和常见的开源框架、工具非常熟悉,因此在运维工程师中更容易诞生架构师。
在国内被称为SRE(网站可用性工程)需要具备算法、数据结构、编程能力、网络编程、分布式系统、可扩展架构、故障排除等各方面技能,核心工作包括容量规划与实施、服务集群维护、系统容错管理、负载均衡、监控系统以及值班等,最终为产品上线后服务的稳定性负责,但是不负责具体的机器运维。首要工作任务时保障SLA(服务等级协议),它定义了对服务有效性的保障,对故障解决时间、服务超时等的保障。
2.主要职责
产品技术方案评估
资源预估、申请和管理
环境部署及相关准备工作
产品上线、下线及回滚,服务在线发布/升级产品
监控线上的服务质量
响应异常/处理突发故障
和响应产品线的研发和测试团队沟通协调处理产品问题
与产品、技术、测试等团队沟通协作
对系统实时数据进行分析
建立工具或平台,保障系统的稳定性和可靠性
3.运维技术
在产品的整个生命周期中运维工作重要而广泛,但运维工程师的职责不局限于这部分工作,还需要总结工作中遇到的问题,抽取出相关的技术方向,研发相关的工具和平台,以支持/优化业务的发展并提高运维的效率。
运维工程师所需的技术体系根据其专业方向而异,但对计算机系统架构、操作系统、网络技术的掌握是基本要求。
一个运维工程师在初期阶段的目的是掌握,维护一套系统所需的所有软硬件知识和经验。在进阶阶段需要能够设计开发一套基础的体系软件,以支撑业务系统的稳定可靠运行,即开发服务于软件的软件,以支持更大规模的业务系统,提高运维生产力。在最高阶段要能反作用于软件系统的构建和运行阶段,使得系统从诞生阶段起即具有天然的可运维性,以最大化系统的生产力,同时最小化对外部支撑资源的依赖。
运维以技术为基础,通过技术保障产品提供更高质量的服务。运维工作的职责及在业务中的位置决定了运维工程师需要具备更加广博的知识和深入的技术能力,需要掌握的技术非常广泛。
运维涉及的常见技术和框架 | |
功能描述 | 技术和框架 |
操作系统 | Linux、Ubuntu、Windows、CentOS、Redhat 等 |
Web Server | 以 Nginx 为典型代表,Apache 等 |
网络工具 | tcpcopy、curl 等 |
监控和报警系统 | Grafana、Zabbix、Cacti、Nagios、Prometheus等 |
自动部署 | Ansible、Jenkins、sshpt、salt 等 |
配置管理及服务发现 | Puppet、Consul、Zookeeper 等 |
负载均衡 | LVS、Haproxy、Nginx 等 |
传输工具 | Scribe、Flume 等 |
集群管理工具 | Zookeeper 等 |
数据库 | MySQL、Oracle、SQL Server 等 |
缓存技术 | Redis、Memcache 等 |
消息队列 | Kafka、ZeroMQ 等 |
大数据平台 | HDFS、MapReduce、Spark、Storm、Hive 等 |
大数据存储 | HBase、Cassandra、MongoDB、LevelDB 等 |
时序数据 | Druid、OpenTSDB 等 |
容器 | LXC、Docker、K8s 等 |
虚拟化 | OpenStack、Xen、KVM 等 |
4.运维发展历程
1)人工阶段
早期运维处于人工阶段,这个时候的运维是一个通称,负责从机房、服务器选型、软硬件初始化、服务上下线、配置监控、盯监控等,运维和开发之间没有太明确的分工,基本是遇到什么问题解决什么问题。在这个阶段,因为服务器少、业务需求简单,只需要少数几个运维工程师就能完成运维工作,运维也基本不会成为企业发展的瓶颈,
2)工具和自动化阶段
随着IT尤其是互联网的迅速发展,企业所承担的业务愈发复杂,运维也进入了第二阶段,为了提升运维工作效率,简化操作流程,运维工程师开始将部分运维操作及重复性工作流程编写成脚本来自动执行。
工具的产生是运维自动化的一个典型的标志,尤其是开源项目的逐渐兴起,大量工具被开源,很多项目都可以在 GitHub 上找到。随着容器技术的兴起,许多新的专门运行容器的 Linux 发行版本也出现了。Docker 及相关虚拟化技术的不断发展、K8s(Kubernetes,自动化容器管理工具,具备集群管理、任务调度等强大的功能)等技术的发展、助力云服务(Cloud,包括私有云、公有云)的快速发展,也进一步为运维自动化带来了极大的便利。
在工具和自动化阶段,运维工程师有一部分掌握了一定的开发能力,将日常的工作通过自动执行程序来完成,以替代人工,效率也逐渐比单纯人工运维更高,同时出错的概率逐渐降低。当然了,已经有掌握 Python、Shell 等开发语言和工具的运维工程师逐渐转向运维开发角色。
3)平台化阶段
在平台化阶段前,脚本和工具是分散的,不易管理,同事也需要人工干预,随着业务变得更加复杂,对大量脚本的管理是低效和复杂的。之后,将自动化脚本和工具进行整合,从系统层面构建更加易用和高效的运维管理工具,已经成为趋势,这也就是运维平台化。
围绕开源工具、开源平台,大中型企业开始结合业务构建自己的运维平台,包括监控平台、报警平台和自动化平台等,这些平台在一定程度上提高了产品开发效率和测试效率,降低了运维成本,并且降低了系统出风险的概率,提高了系统可用性。
运维平台示例 | ||
平台类型 | 典型的基础开源平台 | 说明 |
监控系统 | ELK、Grafana、OpenTSDB等 | 围绕数据搜集、ETL、搜索、指标管理、可视化展示等,快速构建监控系统 |
报警系统 | Zabbix | 具有报警管理、报警聚合、提醒等功能,同时与监控系统配合,构成系统稳定性的保障体系 |
自动化平台 | GitLab、Jenkins、Ansible、sshpt、salt、Docker | 具有代码托管、编译、打包、环境部署、安装和回滚、灰度等基础功能,同时结合监控和报警系统构建动态扩缩容、自动化降级等系统 |
通过上表可以看出,具有平台化思想的开源工具几乎覆盖了运维的全部维度,从监控系统、报警系统到自动化平台都有非常优秀的开源技术框架。
4)智能运维阶段
当基础设施固定下来后,运维模式最终也会固定下来,这些模式会把可用性、扩容等场景在内的诸多运维方案包含进来,把平台平滑地加入运维架构。AIOps(AIgorithmic IT Operations)最早由 Gartner 定义为采用人工智能算法(AI和机器学习),利用机器解决已知的问题和潜在的运维问题的一种技术解决方案,根据 Gartner 定义,AIOps 中的 AI 并不是 Artificial Intelligence(人工智能),而是广义的算法。
AIOps 使用分析理论和机器学习等方法,分析和处理各种操作工具、服务和设备产生的大量数据。它能够自动发现问题,并且能够实时对问题做出反应。AIOps 建立在大数据与机器学习(Machine Learning)基础之上。
推荐阅读:
资源分享:
T级技术资源大放送!包括但不限于:Linux、Python、Java、前端、测试、大数据、人工智能等,具体获取方式请点击下方链接查看~
添加小编微信,加入技术交流群
长按 识别二维码 关注