运维,这里指互联网运维,通常属于技术部门,与
研发、测试、
系统管理同为
互联网产品技术支撑的4大部门,这个划分在国内和国外以及大小公司间都会多少有一些不同。
运维的职责
对于初创公司,运维部和系统部一般是合二为一的,相关工作由同一批人负责,界限可能不是很明显。大型公司对运维工作的要求更高,需要有更精细的分工,因此机房/网络/操作系统相关的底层工作分离出来由专人负责,成为
系统管理部,而上层和应用产品相关的工作则由运维负责,成为运维部。以下从互联网
产品生命周期和运维涉及的技术分别来看分工较细的大型互联网公司中运维工作的职责。
产品生命周期
运维的职责覆盖了产品从设计到发布、运行维护、变更升级及至下线的生命周期,各个阶段的职责包括:
产品发布前
这个阶段
运维工程师的职责是参与设计并把关运维准入,主要包括:
(1) 产品的业务熟悉;
(2) 产品架构设计的
合理性评估,包括是否存在单点,是否可容错,是否有
强耦合等,同时需要提供
产品设计的合理性建议以使产品能够满足上线发布并稳定运行的基本要求;
(3) 资源评估,包括所需的服务器资源、
网络资源以及资源的分布等,同时把
相关产品对资源预算申请的合理性,控制服务成本;
(4) 资源就位,将申请的服务器及基础环境/域名准备就位。
产品发布
这个阶段运维工程师负责发布的具体工作,将具体的软件和系统/硬件
资源整合形成产品并对外提供服务。
对于已在线服务的更新也属于发布范畴,这个时候的产品发布一般要保障在线发布,在不中断对外服务的情况下完成产品的升级。对于大型复杂的变更也存在中止服务部署完成后再重新提供服务的情况,但这种情况需要运维工程师通过尽可能的技术手段来避免。
产品运行维护
这个阶段的主要工作包括:
(1) 监控:对服务运行的状态进行实时的监控,随时发现服务的运行异常和资源消耗情况;输出重要的日常服务运行报表以评估服务/业务整体运行状况,发现服务隐患;
(2)
故障处理:对服务出现的任何异常进行及时处理,尽可能避免问题的扩大化甚至中止服务。这之前运维工程师需要针对各类服务异常,如机房/
网络故障、程序
bug等问题制定处理的预案,问题出现时可以自动或手动执行预案达到止损的目的。除了日常小故障外,运维工程师还需要考虑产品不同程度受损情况下的
灾难恢复,包括诸如地震等
不可抗力导致大规模机房故障、在线产品被删除等对产品造成致命伤害的情况。
容量管理:包括服务规模扩张后的资源评估、扩容、机房迁移、流量调度等规划和具体实施。
产品对外提供服务最重要的一点是
用户体验,用户体验中非常重要的是产品的
可用性和
响应速度。而如何用最合理的资源(如机器、带宽等)支持产品提供高可用和高速度的用户体验,这也是运维工程师的重要职责。
产品下线
发展良好的
互联网产品将始终在线对外提供服务,但互联网产品
快速迭代,也存在相当多孵化的产品最后被淘汰的情况,这些产品都需要做下线处理,这个过程运维工程师主要做好资源回收的工作,将机器/网络等资源回收后纳入
资源池中供其它服务使用。
运维技术方向
产品的整个
生命周期里运维的职责重要而广泛,但运维工程师们的职责不仅限于这部分工作,还需要总结工作中遇到的问题,抽取出相关的技术方向、研发相关的工具和平台以支持/优化业务的发展并提高运维的效率,
相关技术工作主要包括:
等等,凡是关系到
服务质量、效率、成本、安全等方面的工作,及涉及到的技术、组件、工具、平台都在运维的技术范畴里。做好每一个技术方向、完成相应的组件、工具、平台研发都能对履行运维职责起到积极的作用,对业务的发展发挥关键影响。
技能和素质
运维以技术为基础,通过
技术保障产品提供更高质量的服务。运维工作的职责及在业务中的位置决定了运维工程师需要具备更加广博的知识和深入的
技术能力:
运维工作的复杂性对这个岗位的运维工程师们的
软素质也提出了要求:
主动性、
执行力,能够
主动学习国际国内的运维技术,并引入到工作中,提高运维的质量和效率;
开展方式
业务运维工程师的日常工作包括:
平台工具
广义上所有开源的软件都是运维工程师会使用到的平台和工具,同时也包括运维各个技术方向上自行研发的各类平台。
职业发展
负责具体的产品线运维工作,同时也需要掌握开发的能力,深入业务,最了解业务的痛点和问题,同时研发/优化针对产品业务需求的平台、工具和手段,能够接触到各类优秀的系统架构并有能力做出优劣对比,同时对业务的掌控决定了相应运维工程师在业务发展中的作用。长远发展是成为大型系统的架构师。
专门研发运维相关通用平台和技术,需要有一定的产品线运维经验或从产品线中拿到运维需求。对研发能力有较高的要求,对系统的设计有较严格的标准,并且能够理解
用户需求,做出适合服务运维和满足运维工程师使用体验的运维产品,长远的发展是成为各个技术纵向领域的技术专家。
数据库方向是运维技术中较为特殊的一个方向,由于业务的重要性通常需要专设岗位,业界在该方向也有深厚的研究和积累。主要方向有数据库内核、
云数据库等,长远发展是数据库领域的技术专家,数据库架构师。
运维同学做事情的过程中通常需要协调多个RD和
QA同学,对协调和推进能力要求比较高,对一些技术深度还不错,协调和推进能力比较高的同学非常适合转型管理职位,长远的发展和技术部门的管理职位一样目标是
CTO、CEO。
各个方向上的工程师发展到一定阶段后,没有明确的界限,需要同时具备较强的运维、架构、编程、算法等能力,是一个要求很高的职业。
运维行业前景
资深运维
以下是
中国互联网业界部分资深
运维工程师对运维的看法(涉及隐私,相关人名采用首字母缩写):
CXY:
运维是一个非常广泛的定义,在不同的公司不同的阶段有着不同的职责与定位,如果以operation字面的含义去理解,认为就是敲几行操作命令的工作,那就错了。 对于初创公司,运维工程师的工作可能需要从申请域名开始,购买/租用服务器,上架,调整
网络设备的设置,部署操作系统和
运行环境,部署代码,设计和部署监控,防止漏洞和攻击等等。对于大型的公司,对于运维工作的要求越来越高,也催生了更细化的运维分工:从大的方向,可以分为
网站运维,
系统运维,
网络运维,数据库运维,
IT运维,运维开发,运维安全等方向。
很多非从业人员对运维的看法一般属于IT运维的一个非常小的职责:
装系统^^。 一些
研发工程师对运维的看法也只局限运维工作的几个点:部署, 变更, 监控,响应。
无论做什么运维,最基本的职责都是保证业务能够
稳定运行。所以必须成为业务稳定性的
owner。有些人通常认为运维工程师像消防员,7*24小时响应异常,救火。但是稳定性的运维工程师和医生的职业更接近。医生也分各种科室,也有
急症室,需要先判断病人的问题,对症下药。
业务有着各种各样的需求,如果运维工程师能够满足业务需求,或者主动挖掘业务的痛点和改进方法,就能为业务实现更多的价值。
在满足业务需求时,应该分清主次,优先面对业务快速发展非常重要的需求,例如稳定性,部署和变更效率,
容量管理。稳定性不用多说,如果用户没法稳定使用你的业务,什么
产品特性都没有价值。对于
百度这样极速发展的互联网公司,每天都有大量的升级更新需要提供给用户,如何在异地的大集群上最快的满足产品的升级需求,同时让用户对升级过程无感知,这是我们的追求。当用户会用百度来测量网络是否可以上网时,就是对运维质量的褒奖。
其次,可以横向看看不同业务的需求。如果能够把多个业务的需求抽象出来,把一些有通用价值的工作平台化(例如数据库,cdn,监控,流量接入和调度,大数据的存储和计算),也能在这个方向进行深入的发展。在百度这样的巨大的流量和服务器规模下,你不仅有巨大的空间和挑战,也有着充足的资源和支持,可以开发和应用业界最前沿的技术。
有一定的积累后,可以进入到宏观和微观的两个层面,从整个公司层面考虑业务的智能部署和调度(涉及网络,硬件,系统,应用
开发方式等各个要点),进一步提升效率和节省成本。
如果能够懂业务,理解业务的模式,紧密结合业务进行优化和创新,也是运维工程师体现价值的另外一种方式。有很多产品上的创新,专利的申请,论文的发表,业务指标的提升,直接或者以合作的方式由运维工程师贡献。
YBX:
运维工程师相对研发人员来讲,可以全局观察所维护的
计算机系统,特别是高阶运维工程师,不存在模块界限,这种独特的位置带来很多价值:
同样从公司不同业务角度看,可以统一调配资源,进而节省资源。
KZ:
XX:
运维即
生产环境以及和生产环境相关的资源、服务的维护的整个过程,包括了相关的技术、流程手段,确保生产环境稳定、高效、低成本的运行。
运维一方面为对业务功能最终负责,其价值的体现为最大化助力
产品价值的发挥。这通常是通过将
产品功能的运行表现提升到极致来达成的。例如搜索引擎的运维重点要保障用户在搜索时候的极致体验:稳、快、准、新、全。而一个在线聊天系统的运维应该是确保用户聊天过程的实时与顺畅。另一方面为对在线业务的成本最终负责。其价值的体现为降低服务运行成本
运维工作的开展方式一般取决于所维护的业务特点需求,形成所需的多个主题方向进行开展。通常的解决方案中包括如下的一些主题方向:
事件管理、
配置管理、
变更管理、容量管理等。
运维工程师的要求特别严苛,因为运维工程师针对不同的问题,需要不断的补充扩大自己的知识和研究范畴。
在初级阶段,优秀运维工程师会体现出格外出众的
主动性和
责任心,面对陌生的业务会
主动学习和拓展自己对业务对认识和相应的知识范畴,以能够足够的胜任业务的独立维护。
在逐步的
发展阶段中,注重总结反省的工程师会逐渐成长为高阶运维工程师,通常他们会有比较体系化的服务运维理解。也有一部分工程师由于出色的
项目管理规划能力,逐渐成为项目经理
再进一步的发展,高阶的运维工程师对于产品的理解将非常的透彻,因而在这种情况下,高阶运维工程师甚至可以成为产品的
产品经理、产品研发的
咨询顾问,在产品功能的
设计与开发中起到至关重要的角色。
SJY:
一个运维工程师所需的
技术体系以其专业方向而异。但基本的计算机系统架构,操作系统,
网络技术的掌握是基本要求。例如你可能需要熟练掌握linux操作系统的使用,熟练使用各种脚本工具来处理日常
工作任务,精通
TCP/IP协议栈以排查一个大规模
网络系统中的流量异常问题等。更进一步的你需要形成一套软件可运维性方面的经验积累,以此作为
后续工作的指导。
一个运维工程师在初期阶段目的是掌握维护一套系统所需的所有软硬件知识和经验。进阶阶段是需要能够设计开发一套基础的体系软件,以支撑
业务系统的稳定可靠运行,即开发服务于软件的软件,以支持更大规模的业务系统,提高运维生产力。最高阶段是反作用于
软件系统的构建和运行阶段,使得系统从诞生阶段起即具有天然的可运维性,以最大化系统的生产力,同时最小化对外部支撑资源的依赖。
ZM:
运维工程师首先应该是
软件工程师(Software Engineer),只是责任和侧重有所不同。
运维工程师不是
系统管理员。和系统管理员最大的差别是,运维工程师的工作不仅仅是配置和
管理系统,而且可以运用
软件开发的方法来增强
系统的功能、或者对数据进行分析。
运维工程师应该是软件工程师、
系统工程师等角色的综合体,和一般软件工程师相比、应该具有更加广博的知识背景
运维的职责在于:
运维的日常工作:
运维工程师最重要的是会运用编程和软件的方法来解决问题。发展的道路应该和软件工程师没有很大的区别,差异只是关注点和领域方向的不同
国际会议
以下是部分运维相关的国际会议,会议涉及运维及运维
相关技术的交流学习。