当前位置: 首页 > 科技观察

干运维有前途吗(钱)?

时间:2023-03-16 14:28:47 科技观察

前言:知乎上有个问题:Linux运维工作新手面试至少应该掌握哪些知识?其中一个回答对这个话题有非常深入的解读,系统的分析了运维的意义。需要掌握的技术、工作内容、性质和前景今天分享给大家。1、什么是大型网站运维?首先澄清一下,全文中所说的“运维”是指:大型网站运维,与其他运维有较大区别;然后我们将进行大型网站和小型网站的Scope定义,这个定义主要是从运维复杂度的角度考虑,比如网站规格、知名度、服务器规模、pv量等,其他因素不是重点;因此,我们首先定义服务器规模大于1000台,每天pv至少上亿(至少国内前10),如新浪、百度、QQ等;其他小网站可能没有真正的运维工程师,这与网站规格和成本因素的缺乏有关,更多的是网络、系统、开发一体化的“复合型人才”,就像一些公司包括一些合同采购纳入运维职责范围,IDC网络规划也纳入运维职责范围。因此,了解非常重要:运维必须非常熟悉其他相关工种:网络、系统、系统开发、存储、安全、DB等;我这里说的运维工程师指的是专职运维工程师。先说说一般产品的“诞生”过程:1、首先公司管理层给出指导思想,PM定位市场需求(或复制成熟应用)进行调研、分析,最后给出详细设计。2.架构师根据产品设计需求完成网络规划和架构设计,如pv规模预估、服务器规模、应用架构等因素(除了大型项目外,网络基本不变)。3.开发工程师实现设计代码,测试工程师测试应用。4.好了,运维工程师该出来了。首先,并不是说前三个步骤与运维无关。相反,前三步与运维有很大关系:早期应用架构设计、软件/硬件资源评估应用采购、应用设计性能危害及评估、IDC、服务性能\安全调优、服务器系统-层级优化(与具体应用相关)等都需要全程参与运维,主导整个应用上线项目;运维工程师负责产品服务器的准备、服务器系统的安装、网络、IP、常用工具集的安装。运维工程师还需要负责在线应用系统架构是否合理,是否具有可扩展性,安全隐患,并负责最终将产品(程序)、网络、系统进行拼接和优化组合,最后完成产品上线供用户使用,重复一遍:Requirements->Development(upgrade)->Test->Launch(performance,securityissuesandotherproblemsofwereweredoesn'tgettingtoallproblemsheretogetheronepoint:网站开发模式与传统软件开发完全不同。网站每天开发和推出1-5个升级版本是很常见的做法。用户体验为王。如果像M$这样的某个在线问题需要一年时间才能解决,那么用户就会用完。;应用上线后,运维工作才刚刚开始。具体工作可能包括:升级版本上线工作、服务监控、应用状态统计、日常服务状态巡检、突发故障处理、日常服务变更调整、集群管理、服务性能评估优化、数据库管理优化、应用架构扩缩容、安全、运维开发工作随应用PV增减:a.尝试通过工具(如服务监控、应用状态统计、服务上线等)实现日常的机械人工作业,提高效率。b.解决现实服务中存在的问题,如高可靠性和可扩展性问题。C。开发大型集群管理工具,如10000台机器如何在1分钟内完成修改密码或运行指定任务?2000台服务器如何快速安装操作系统?多PT层级的分布式IDC和存储集群如何快速存储、共享、分析数据?一系列的挑战需要运维工程师的努力。这是对其他类型工作的解释。在整个项目中,前端应用对于网络/系统工程师来说就是一个黑盒子。同时,开发工程师的职责只负责完成应用的功能开发,对应用本身的性能和安全性负责。负责,不负责也不关心网络/系统架构问题。当然,业务部门的其他同事,比如软件/硬件采购员,是不会关心这些问题的。他们各司其职,但项目的核心是运维工程师~!所有其他部门的桥梁。上面说了很多,我想大家应该对运维有一些概念吧。我们在这里打个比方。如果我们是高速行驶在高速公路上的汽车,那么运维工程师就是司机和维修工。司机并不简单,有时在高速行驶中需要更换轮胎,根据路况换档。当车子的速度越来越快的时候,车子本身就满足不了高速了。当汽车本身无法满足高速行驶时,就需要对汽车性能进行优化或对零部件进行升级,解决汽车在高速行驶时出现的问题。故障和性能问题,时刻注意前方的安全问题,提前做好规避措施。这就是运维工作~!最后说一下运维工程师的职责:“保证线上稳定”。看似简单,实则不易。运维工程师必须权衡很多不利因素:架构和技术的影响,产品频繁升级带来的线上BUG隐患,运维自动化管理容忍度低导致的人为失误,流程的缺失IT行业追求高效率导致的执行力、用户量的增加、性能和架构的压力、IT行业松散的技术管理文化、创新风险、互联网安全问题等因素都会成为网站的大敌稳定。运维工程师必须把控这最后一道坎。高度的责任感、原则性和协调能力,如果你能在所有因素中取得最佳平衡,那么你将是一名优秀的运维工程师。另外,这里稍微说点题外话。看到这里很多人想说说自己在新浪、QQ、百度等运维的经历,其实这对他们来说有点难:a.每个公司自己的网络结构,规模,或者更多至少是公司的核心机密,必须保密。另外,对于大家熟知的通用软件和架构,很多公司会根据自己的实际业务需求,并且由于原有的性能、安全性、已知bug、功能等,经过二次开发(如apache、php,mysql),操作系统内核也会根据不同的业务类型进行定制,比如有些应用是计算型的,有些是高IO型的,或者是大存储大内存型的。根据这些特点进行内核优化和定制。比如新浪对memcache进行了二次开发,创建了一个MemcacheDB。我们不会谈论它是如何完成的,但它是开源的,值得称赞。国内公司基本都是开源的。请求,无贡献;另外,服务器也不是知名机型。根据业务特点,大部分已由DELL/HP/ibm定制;此外,他们还有自己的分布式存储解决方案。就是使用现成的开源hadoop等方案,或者自己开发。但是90%都是基于GoogleGFS的思想:分布式存储、计算、大表。b.每个公司的业务方向不同,会导致不同的运维模型或方法。比如http://51.com和百度的运维肯定是有很大区别的,因为他们的商业模式决定了他们的架构、服务器规模、IDC分布、网络结构、通用技术都会不同。作为主要新闻门户的新浪和作为主要sns的http://51.com的运维模式有很大不同,甚至职责也不尽相同;但是有一点,通用的技术和通用的结构是差不多的,所以大家不要太迷信,更多的公司只是在玩搭积木的游戏,并没有什么技术含量。C。如上所述,目前,大型网站的运维还处于起步阶段。观念和经验比较分散,没有成熟的知识体系。可能大家应该想过什么是运维,或者根本就没有想过。真正的讨论只是运维工作的冰山一角,局限于具体的技术细节,或者某个知名网站的框架,并没有真正的运维体系。这可能是线上运维相关资料比较少的原因。或者也是国内运维人员难招的原因之一,相对好的运维工程师比较少见。2、运维人员需要具备什么样的技能和素质?技能和岗位,需要对系统->网络->存储->协议->需求->开发->测试->安全等环节有所了解,但有些环节需要熟悉甚至精通,比如系统(熟悉基本操作系统,*nix,windows..),协议,系统开发(日常很重要的工作是涉及自动化运维开发,大型集群工具开发,管理),通用应用(如lvs、ha、web服务器、db、中间件、存储等)、网络、IDC拓扑。技能方面,总结了以下几点:1、开发能力,这一点很重要,因为所有的运维工具都需要自己开发,开发语言:perl、python、php(其中之一)、shell(awk,sed,expect...等),需要有实际的项目开发经验,否则工作会很痛苦。2、一般应用方面,需要了解:操作系统(目前国内主要是linux、bsd)、webserver相关(nginx、apahe、php、lighttpd、java...)、数据库(mysql、oralce)、其他杂项;系统优化,可靠性高;这些只是bonusitems,不是必须的,你可以一边工作一边慢慢学习,这些东西都不难。当然,在运维上,有些是有分工的,侧重点不同的。3、系统、网络、安全、存储、CDN、DB等需要有很好的了解,知道相关原理。个人素质方面:1、沟通能力和团队合作:运维工作中有很多跨部门、跨岗位的操作。需要善于沟通,有较强的团队合作能力;这应该是现代企业的基本素质要求,我就不多说了。2、工作需要胆大心细:只有胆大包天才能创新,不走寻常路,尤其是运维等新型工作,更需要创新促发展;细心,运维工程师是网站管理员,在线权限最高的人,一不小心,会后悔一生或入十八层地狱。3、主动性强、执行力强、精力旺盛、抗压能力强:由于IT行业的特点,变化很快;往往计划赶不上变化,运维工作更加突出。比如国内大公司的服务器往往遍布全国各地。便宜又划算,就搬过去,进行大规模的服务迁移(涉及上百台服务器),非常头疼;往往时间很紧,比如一周内完成,这种情况下,对运维工程师的主动性和执行力要求很高:方案、方案、服务的无缝迁移、机器搬迁、环境准备、安全评估、绩效考核、基础设施、相关部门扯皮、7X24小型突发事件响应等。4、其他是一些基本素质:头脑聪明,逻辑思维能力强,谦虚谨慎,有亲和力,乐于助人,有大局观。5、最后一点就是做网站运维要有探索创新的精神,通过创新思维解决现实问题,因为这是一个刚刚起步的职业(国外也一样,只是起步较早比中国少),也没有成熟的体系或方法论可以借鉴,只能靠大家自己的探索和努力。三、什么是合格的运维工程师1、确保服务达到要求的在线标准,比如99.9%;保证在线稳定是一个运维工程师的基本职责。2、持续提升应用可靠性和健壮性、性能优化、安全性提升;这方面是对主动性和创新性思维的考验。3.网站、软件、硬件、运行状态各个层级的监控统计覆盖,能监控的都需要监控统计,避免监控死角,能够实时了解应用的运行情况.4、通过创新思维解决运维效率问题;目前各个公司的主要运维工作大部分还是依赖于人工操作干预,需要尽可能的解放双手。5、运维知识的积累和沉淀,文档的完备性。运维是一个很有经验的岗位。好的经验和陷阱需要积累,避免重复错误。6、策划与执行;有计划地工作,并在计划后努力实现目标,不要找借口。7、自动化运维;能将日常机械化工作细化、设计、开发成工具和系统,并尽可能依赖系统,使系统自动完成;让大家花更多的时间去思考,创新思维,做自己喜欢的事情。以上只是一些技术方面的内容。当然,个人意识也很重要。4.运维职业的困惑、现状及发展前景运维岗位不同于研发工程师、测试工程师等其他岗位,有非常明确的职责定位和职业规划,有意识职业身份和成就;而运维工作给人的感觉可能是什么都懂一点,但是比起专职的工程师更精通,感觉平时受到的关注也少(除非有线上故障)。渐渐地,每个人都会迷茫,对职业发展产生负面影响。疑惑,为什么会出现这样的现象?除了职业本身的特点,主要是对运维的理解不够深入造成的;其实其他岗位也会出现这个问题,但是我发现运维比较典型,更容易出现这个问题;针对这个问题,我来说说网站运维的现状和发展前景(我也在思考,可能不够深入和全面,望指正)运维现状:1.处于起步阶段。各大公司都有这个全职工作,但不太重视或不重视,可替代性强;小公司大多由其他岗位来承担这项工作,没有全职工作是不可能深入的。2、技术水平较低;主要处于技术探索和积累阶段,没有系统的概念和技术。3、体力劳动过大;这个问题主要与第二点有关。很多事情还是靠人力,没有很好的培训。大规模集群没有成熟的自动化管理方法。在这里说明一下,大规模集群与运维工作是息息相关的。如果只有一百台左右的机器,运维空间不大。4、优秀的运维人才极度匮乏;目前,各大公司基本上都是靠自己培训。这种情况导致行业运维人才的流动性非常低,很多好的技术都局限于大公司,比如谷歌50万台机器的科学管理,或者国内互联网前10大公司的一些运维经验,这些经验非常宝贵,决定了一个企业的核心竞争力;这些问题导致业界先进运维技术的流通、对接、借用、签约最终会限制运维的发展。5、很多优秀的运维经验掌握在大公司手中;这不在于公司的技术实力,而在于公司的技术规模大,PV海量,硬件规模足够大,比如百度的可怕流量,http://51.com的海量数据~~~~这些因素决定了他们遇到的问题是其他中小企业没有遇到或即将遇到的问题。但是大公司可能已经有了很好的解决方案或系统。发展前景:1、从行业来看,随着中国互联网的高速发展(目前中国网民已跃居世界前列),网站规模越来越大,结构越来越越来越复杂;全职网站运维工程师,对网站架构师的要求会越来越迫切,尤其是对经验丰富的优秀运维人才的需求,年龄越大越有价值;成本高,加入没有经验的人才会导致技术更新缓慢,影响公司技术发展;当然,毕业生也有优势:一张白纸,可塑性强,更有认同感,容易融入企业文化。2、从个人角度来说,对运维工程师的技术含量和要求会越来越高。同时,他们也是最熟悉公司应用和架构的人,越来越受关注。3、网站运维将成为集多学科(网络、系统、开发、安全、应用架构、存储等)为一体的综合性技术岗位,为大家提供良好的个人能力和技术广度的发展空间。4、运维工作的相关经验会变得很重要,也会成为个人的核心竞争力,具备良好的各级问题解决能力、解决方案提供能力、整体思维能力。5、特长和兴趣的培养;由于运维岗位接触到的知识面广,更容易培养或发展个人在某些方面的特长或爱好,比如内核、网络、开发、数据库等,可以做到非常精通和成为该领域的专家。6、以后实在不想做运维的话,转其他岗位比较容易,没有太多的限制。当然,你必须真正用心去做。7、技术开发方向:网站/系统架构师。五、运维关键技术点剖析1、大规模集群管理问题首先,我们要先明确集群的概念。集群一般不是指具有各种功能的服务器的总和,而是指具有某种用途或功能的服务器和硬盘资源。一体化(机器数大于两台),对于应用来说是一个整体,目前常规的集群可以分为:高可用集群(HA)、负载均衡集群(如lvs)、分布式存储、计算存储集群(DFS,如googlegfs、yahoohadoop)、应用专用集群(具有特定功能的服务器组合,如db、缓存层等),目前互联网行业主要以这四种为主;和前两种类似,如果业务简单,应用的后期操作比较少,可以简单的使用四层交换机(比如f5)来解决,达到服务高可用/责任平衡。对于资源紧张的公司,也有一些开源的方案比如lvs+ha,非常灵活;对于后两者,则考验企业的技术实力和应用特点。第三类DFS主要用于海量数据应用,如邮件、搜索等应用,尤其是搜索要求更高。除了简单的海量存储,还包括数据挖掘、用户行为分析;比如谷歌和雅虎可以保存和分析近一年的用户记录数据,而百度应该不到30天,搜狗就更少了。..这些对于搜索准备和用户体验至关重要。下面我们就来说说如何科学的管理集群。主要有以下几点:一、监控主要包括性能、流量、负载等的故障监控和状态监控,这些监控关系到集群的健康运行,及时发现潜在问题。发现和干预;A。服务故障及状态监控:主要是服务器本身、上层应用、关联服务数据的交互监控;比如对于前端web服务器,我们可以有多种监控,包括应用端口状态监控,方便及时发现服务器或者应用本身是否崩溃,通过检测服务器的健康状态icmp包,上层还可能包含对应用各通道业务的监控。黑篡改(被篡改数据的报警和自动恢复)等,这些只是一部分,还有N多监控方式,根据应用的特点,还有一些问题需要解决,比如集群是太大了,如何实现高性能的监控也是一个现实的问题。b.还有就是集群状态的监控或者统计,为我们合理管理和优化集群提供数据参考,包括服务瓶颈、性能问题、异常流量、攻击等问题。2.故障管理硬件故障问题;对于N个多集群,几百、几千、几万台机器,服务器死机和硬件故障的概率非常大,几乎无时无刻不存在服务硬件问题、死机、硬盘损坏、电源、内存,转变。针对这种情况,我们在设计网站架构时需要充分考虑这些问题,视之为常态;更多的依赖于应用程序的冗余机制来避免这种风险,但是要给系统工程师足够的时间来处理它。(例如,Google声称如果800台机器同时挂掉,服务不会受到任何影响);这是考验运维工程师和网站架构师功能的地方。好的设计可以实现谷歌描述的自恢复能力,比如gfs,不好的设计意味着一个服务器的崩溃可能导致大面积服务的级联故障,直接拒绝响应用户。b.应用失败问题;可能是触发了某个bug,也可能是某个性能阈值被超过或被攻击等,但是重要的一点是对这些问题要有预防措施,不能想当然。它不会引起问题。如果出现问题,如何处理?这需要运维工程师做很多工作,包括应急响应速度、科学的故障处理、有效的备份方案等。3、自动化自动化:简单来说就是通过工具自动完成我们日常的一些手工工作,解放我们的双手和枯燥的重复劳动。例如:在没有工具之前,我们需要一个来安装系统。装一台裸机,比如2000套,可能需要10人/10天,销毁N张CD,人工成本会更高。..现在,通过自动化工具,只需要几个简单的命令就可以完成。也有机器人程序自动完成以往每天人工干预的工作,使其能够自动完成并报告结果,具有一定的专家系统能力。简单的是/否判断、优化选择等。.这些好处非常明显,我就不多说了。..应该说,自动化运维是运维工程师的职业追求,利己利民,虽然这是一项极其艰巨的工作:不断变化的业务,非标准的应用设计,开发模式,网络架构变化,IDC变更规格、规格变更等因素可能对现有自动化系统产生影响,因此需要模块化、接口化、可变参数化等。所以自动化相关的工作是运维工程师的核心工作之一,也是有价值的。反映。