联系电话: 18171260050

行业动态

  • 24,Sep,2022

一个新手面试Linux运维工作至少需要知道哪些知识?|知乎

知乎上有这样一个问题:新手面试Linux运维至少需要知道哪些知识?其中一个答案对这个话题有非常深入的解读,今天就和大家分享一下。

一、什么是大型网站运维?

首先要明确一点,全文中所说的“运维”是指:大型网站运维,与其他运维有很大区别;然后我们定义了大型网站和小型网站的范围。这个定义主要是从运维复杂度的角度,比如网站规格、人气、服务器量级、PV量等,其他因素不是重点;因此,我们首先定义服务器规模大于1000台,PV至少每天1亿(至少国内前1)。 0)linux运维,如新浪、百度、QQ等;其他小型网站可能没有真正的运维工程师,这与网站规格和成本因素不足有关,更多的是网络、系统和开发工作的集合,例如一些公司将一些合同采购纳入运营范围和维护职责,IDC网络规划也包括运维职责。因此,了解运维对于其他相关工作类型的重要性非常重要。必须非常熟悉:网络、系统、系统开发、存储、安全、DB等;我这里说的运维工程师是指专职运维工程师。

说说通用产品的“诞生”过程:

1、首先公司管理层给出指导思想,PM定位市场需求(或复制成熟应用)进行研究、分析,最后给出详细设计。

2、架构师根据产品设计的需要,如pv大小估算、服务器规模、

2、应用架构等因素,完成网络规划、架构设计等(基本上对网络,大型项目除外)

3、开发工程师实现设计代码,测试工程师测试应用。

4、好了,运维工程师的时间到了。首先,并不是说前三步与运维工作无关。相反,前三个步骤与运维有很大关系:应用程序的初步架构设计、软/硬件资源评估、应用程序采购、应用程序设计性能和评估的隐患, IDC、服务性能安全调优、服务器系统级优化(具体应用相关)等都需要全员参与运维,主导整个应用上线项目;运维工程师负责产品服务器的准备、服务器系统的安装、网络、IP、通用工具集的安装。运维工程师还需要对在线应用系统架构是否合理、是否具有可扩展性、安全风险等因素负责,负责产品(程序)、网络、系统的拼接和优化。 ,最后完成产品上线供用户使用,反复使用:需求->开发(升级)->测试->上线(性能、安全问题等,之前估计问题会逐渐出来)这里提一下一点:网站开发模式与传统的软件开发完全不同。一个网站每天开发和推出1~5个升级版本是很常见的。用户体验为王。如果像 M$ 这样的在线问题需要 1 年才能解决,那么用户就会消失。 应用上线后,运维工作才刚刚开始,具体工作可能包括:升级版本上线工作、服务监控、应用状态统计、日常服务状态检查、突发故障处理、日常服务变更调整、集群管理、服务性能评估优化、数据库管理优化、应用架构扩展、安全、运维随着应用PV的增减而发展:

一个。尝试通过工具(如服务监控、应用状态统计、服务上线等)来实现日常的机械手工作业,以提高效率。

b.解决现实生活中服务的高可靠性和可扩展性等问题。

c。大型集群管理工具的开发,比如10000台机器如何在1分钟内完成密码修改或运行指定任务?如何在2000台服务器上快速安装操作系统?如何在每个分布式IDC和存储集群中快速存储、共享和分析PB级别的数据?一系列的挑战需要运维工程师的努力。

这里是其他合作类型的描述。在整个项目中,前端应用程序是网络/系统工程师的黑匣子。同时,开发工程师只负责完成应用程序的功能开发,以及应用程序本身的性能和安全性。应用程序本身负责,它不负责或关心网络/系统架构。当然,业务部门的其他同事如软/硬件采购人员不会关心这些问题,各司其职,但项目的核心是运维工程师~!与所有其他部门的桥梁。

上面说了很多。我想大家应该对运维有一些概念。我们在这里打个比方。如果我们是一辆在高速公路上高速行驶的汽车,那么运维工程师就是司机和维修工。 , 这个司机不简单,有时候在高速行驶的时候需要换胎,还要根据路况换挡。当汽车的速度越来越快时,汽车本身就无法满足高速。当汽车本身不能满足高速,汽车性能调校或零部件升级,高速行驶中解决车辆故障和性能问题时,时刻注意前方的安全问题,做好预防措施。这是运维工作~!

最后说一下运维工程师的职责:“保证在线稳定”,看似简单,实则不易。运维工程师要平衡很多不利因素:新产品模型对现有架构和技术的影响,产品频繁升级导致的线上bug,运维自动化管理低导致的人为错误,流程执行力不足由于 IT 行业追求的高效率,以及用户增加带来的性能和结构压力,IT 行业技术管理文化松散、创新风险、互联网安全问题等因素都将成为网站稳定性的敌人。原则性和协调性,如果你能做到各方面因素的最佳平衡,你就会成为一名优秀的运维工程师。

另外,我想在这里谈一个题外话。看到这里很多人想讲讲自己的运维经验,比如新浪、QQ、百度等,其实这对他们来说有点难:

一个。每个公司自己的网络结构和规模,或多或少都是公司的核心机密,应该保密。另外,对于众所周知的通用软件和架构,很多公司会根据自己的实际业务需求,同时由于原有的性能、安全性、已知的bug、功能等原因,进行二次开发(如php、mysql)已经进行了,操作系统内核也将根据不同的业务类型进行定制。有些是高 IO 类型,或者是大存储和大内存类型。根据这些特点,对内核进行优化和定制。比如新浪对网站进行了二次开发,想出了一个。我们不会谈论它是如何完成的,但值得称道的是它是开源的。国内公司基本要求开源。没有贡献;另外,服务器不是知名机型。根据业务特点,大部分已被DELL/HP/ibm定制;此外,他们有自己的分布式存储解决方案,或者使用现成的开源解决方案,或者自行开发。但是90%都是借鉴GFS的思想:分布式存储、计算、大表。

b.每个公司的业务方向不同,会导致不同的运维模式或方式。比如百度的运维肯定是很不一样的,因为他们的业务模式决定了他们的架构、服务器级别、IDC分布、网络结构和通用技术都会不同。 sina作为主新闻门户的运维模式,和主要sns的运维模式差别很大,甚至职责也不一样;但有一点,通用技术和通用架构是相似的,所以不要太神化,更多的公司只是在玩积木游戏,没有任何技术含量。

c。如前所述,大型网站运维的概念和经验还处于起步阶段,还没有成熟的知识体系。可能是什么是运维,大家应该先考虑一下,或者根本不考虑。想了想,真正的讨论只是运维工作的冰山一角,仅限于具体的技术细节,或者是某知名网站的大框架,没有真正的运维体系。这可能是网上运维相关资料比较少的原因。酒吧。或者说这也是国内运维人员比较难招,比较好的运维工程师少的原因之一。

二、运维人员需要具备哪些技能和素质

作为一名运维工程师,你需要具备什么样的技能和素质?先说技能吧。如上所见,运维是一个综合了多种IT技能和技能的职位。对于->->->->->->->等环节需要了解,但有些环节需要熟悉甚至精通,比如系统(熟悉使用基础操作系统、*nix、..)、协议、系统开发(每一项重要工作都是自动化运维开发、大型集群工具开发、管理)、通用应用(如lvs、ha、web、db 、中间件、存储等)、网络、IDC拓扑;

技能总结如下几点:

1、开发能力,这个很重要,因为运维工具需要自己开发,开发语言:perl、php(其中一)、shell(awk、sed、... .etc.)),你需要有实际项目开发的经验,否则工作会很痛苦。

2、一般应用需要知道:操作系统(国内主要是linux,bsd),相关(nginx,apahe,php,,java...),数据库(mysql,),其他杂七巴拉的东西;系统优化,可靠性高;这些只是加分项,不是必须的,你可以边工作边慢慢学习,这些东西并不难。当然,在运维上,有的优先级不同。

3、系统、网络、安全、存储、CDN、DB等都需要很好的理解和了解相关原理。

在个人素质方面:

1、沟通能力和团队合作:运维中有很多跨部门、跨岗位的工作,需要良好的沟通能力和较强的团队合作能力;这应该是现代企业的基本素质要求,不多说了。

2、在工作中要敢于用心:勇于创新,不走寻常路,尤其是运维等新型工作,更需要创新促发展;小心,运维工程师是网站管理员,拥有最高在线权限的人,一不小心就会后悔一生,或者进入十八层地狱。

3、主动、执行力、精力充沛、抗压能力强:由于IT行业的特点,变化快;往往计划跟不上变化,运维工作比较突出,比如国内各大公司的服务器,往往是全国各地,便宜又划算的地方,搬到那里执行大- 规模化的服务迁移(涉及数十万台服务器),这是一个非常头疼的问题;往往时间很紧,比如1周内完成,这种情况下,运维工程师的主动性和执行力都有很高的要求:计划、解决方案、无缝服务迁移、机器搬迁、环境准备、安全评估、性能评估、基础设施,和相关部门扯皮,7X24小应急等。

4、其他是一些基本素质:头脑聪明、逻辑思维能力强、谦虚稳重、有亲和力、乐于助人、有大局观。

5、最后,做网站运维需要一种探索创新的精神,通过创新思维解决现实问题,因为这是一个处于起步阶段的职业(国外也是这样,但是起步比较早比中国),没有成熟的体系或方法可以借鉴,大家只能靠自己的探索和努力。

三、如何成为一名合格的运维工程师

1、确保服务符合要求的上线标准,如99.9%;确保在线稳定是运维工程师的基本职责。

2、不断提高应用的可靠性和健壮性,优化性能,提高安全性;这是对主动性和创新思维的考验。

3、网站各级监控统计的覆盖范围,软件、硬件、运行状态,凡是可以监控的都需要监控统计,避免监控死角,了解应用程序的实时操作。

4、通过创新思维解决运维效率问题;目前各公司的主要运维工作大部分仍依赖人工操作干预,要尽可能解放双手。

5、运维知识的积累和沉淀,文档的完整性,运维是一个很有经验的岗位,好的经验和陷阱需要积累,避免重复犯错。

6、计划和执行;工作是有计划的,计划之后的想法就是努力实现目标,不找借口。

7、自动化运维;能将日常机械化工作细化、设计、开发成工具和系统,并尽可能依靠系统自动完成;让大家多花点时间思考和创新思维,做自己喜欢的事。

以上只是技术方面的一部分,当然个人意识也很重要。

四、运维行业的困惑、现状与发展前景

运维岗位不像其他岗位,比如研发工程师、测试工程师等,职责和职业规划非常明确,有职业认同感和成就感;以及运维工作的哪些方面可能给人的感觉他们都懂一点,但是比专职工程师更熟练,感觉平时受到的关注较少(除非出现在线故障)。慢慢的大家都会对职业发展感到迷茫和迷茫。为什么会这样? 除了专业本身的特点外,主要是对运维缺乏深入的了解和表现造成的;其实这个问题也可以出现在其他位置,但是我发现运维比较典型,出现这个问题的可能性更大;

针对这个问题,我说一下网站运维的现状和发展前景(我也在思考,可能不够深入全面,还请直接补充)

运维现状:

1、在刚起步的初期,各大公司都有这个全职工作,但重点或重要性不高,可替代性强;小公司更有可能通过其他职位来处理这项工作。没有全职,也不可能做深入。

2、技术水平比较低;主要处于技术探索和积累阶段,没有系统的概念和技术。

3、体力劳动量过大;这个问题主要和第二点有关。很多事情还是靠人力进行的,还没有完成好的训练。大规模集群没有成熟的自动化管理方法。需要注意的是,大规模集群与运维工作密切相关。如果只有一百多台机器,运维空间不大。

4、优秀的运维人才极度缺乏;目前各大公司基本都是靠自己的培训。这种情况导致行业内运维人才的流动性非常低,很多好的技术都局限在各种大公司里面,比如50万台机器的科学管理,或者国内前10的一些运维经验互联网公司,这些经验非常宝贵,决定了一个公司的核心竞争力;这些问题反过来又导致该行业的先进操作。维护技术的流通、整合、借用,最终会限制运维的发展。

5、很多优秀的运维经验掌握在大公司手中;这不在于公司的技术实力,而在于大公司的技术规模、海量PV、硬件规模,比如百度可怕的流量、海量数据~~~~这些因素决定了他们遇到的问题是其他的中小型企业还没有遇到,或者即将遇到。但大公司可能已经有了很好的解决方案或系统。

发展前景:

1、从行业来看,随着中国互联网的快速发展(目前中国网民已经跃居世界第一一),网站规模越来越大linux运维,结构越来越复杂;对专职网站运维工程师和网站架构师的要求会越来越迫切,特别是对于经验丰富、优秀的运维人才,年龄越大越有价值;目前国内培训基本选择毕业生(仅限于大公司),培训成本高,加上缺乏经验的人才会导致公司技术更新慢,影响公司技术发展;当然,毕业生也有优势:一张白纸,可塑性强,辨识度高,容易融入企业文化。

2、从个人角度来说,运维工程师的技术含量和要求会越来越高。同时,他们也是最熟悉公司应用和架构的人,会受到越来越多的关注。

3、网站运维将成为集多学科(网络、系统、开发、安全、应用架构、存储等)为一体的综合性技术岗位,为大家提供良好的个人能力和技术广度发展空间。

4、运维工作的相关经验将变得非常重要,也将成为个人的核心竞争力,具备良好的各级解决问题、提供解决方案、放眼全球的能力。

5、实力和兴趣的培养;由于运维岗位所接触的知识面很广,比较容易培养或发展某些个人特长或爱好,比如内核、网络、开发、数据库等方面,可以做的非常深入和精通并成为该领域的专家。

6、如果以后实在不想做运维,转其他岗位比较容易,不会有太多限制。当然,你必须真正投入其中。

7、技术发展方向:网站/系统架构师。

五、运维关键技术点分析

1、大规模集群管理问题

首先要明确集群的概念。集群不是指各种功能服务器的总和,而是指服务器和硬盘资源(多于两台机器)的整合,以达到一定的目的或功能。它是一个整体。目前常规集群可分为:高可用集群(HA)、负载均衡集群(如lvs)、分布式存储、计算存储集群(DFS,如gfs、yahoo)、特定应用集群(某种组合具有特定功能的服务器,如db、缓存层等,目前互联网行业主要以这四种为主;对于前两种,如果业务简单,对应用的后期操作比较少,可以使用四层交换机来解决问题(比如f5)实现了服务高可用/责任均衡的作用。对于资源有限的公司,也有一些开源的解决方案,比如lvs +ha,非常灵活;对于后两者,将考验公司的技术实力和应用特点。现在,第三种DFS主要用于海量数据应用,如邮件、搜索等应用,尤其是搜索要求更高,除了简单的海量存储,还包括数据挖掘和用户行为分析;例如,yahoo 可以保存近一年的用户记录分析数据,而百度应该不到 30 天,soguo 更少……这些对于搜索准备和用户体验至关重要。

接下来说一下如何科学的管理集群,有以下几个重点:

我,监控

主要包括故障监控和性能、流量、负载等状态监控,这些监控关系到集群的健康运行,以及潜在问题的及时发现和干预;

一个。服务故障、状态监控:主要是对服务器本身、上层应用、关联服务数据的交互监控;比如对于前端web,我们可以有很多种监控,包括应用端口状态监控,方便及时发现是服务器还是应用本身崩溃了,通过icmp包检测服务器健康状态,以及上层还可以包括对应用程序各个通道的服务的监控。常用的方法是使用人脸行业特征码进行判断,或者对关键页面进行签名,使网站被黑、被篡改(报警,并自动恢复被篡改的数据)等,这些只是一部分,有N多种监控方式,根据应用特点,还是有一些问题需要解决,比如集群太大,如何高性能监控也是一个现实问题。

b.其他是集群状态监控或统计,为我们合理管理和调优集群提供数据参考,包括服务瓶颈、性能问题、流量异常、攻击等问题。

2、故障管理

一个。硬件故障问题;对于一个拥有成百上千或上万台机器的多集群,服务器崩溃和硬件故障的概率非常高。电源、内存、开关。针对这种情况,我们在设计网站架构时需要充分考虑这些问题,并将其作为规范;更多地依靠应用程序的冗余机制来规避这种风险,但要给系统工程师足够的处理时间。 (如果不是声称800台机器同时死机,服务不会受到任何影响);这是测试运维工程师和网站架构师功能的地方。一个好的设计可以达到描述的自恢复能力,比如gfs,一个不好的。设计上是某台服务器的故障可能引起大规模的服务链故障反射,直接拒绝响应用户。

b.应用失败问题;可能是bug被触发,或者超过了某个性能阈值,攻击等等,但重要的是对这些问题有预防措施。不能想当然,不会出错,如果有问题,怎么处理?这需要运维工程师做大量的工作,包括应急响应速度、科学的故障处理、备份方案的有效性。

3、自动化

自动化:简而言之,就是通过工具和系统将我们日常的一些手工工作自动化,解放我们的双手和繁琐的重复劳动,例如:在没有工具之前,我们需要一个系统来安装一个裸机安装,比如2000台,可能需要10人/10天,销毁N盘,人工成本更大。 . 现在,通过自动化工具,只需几个简单的命令就可以完成,而且还有类似机器人的程序,自动完成过去每天人工干预的工作,从而自动完成并报告结果,并且具备一定的专家系统能力,可以做一些简单的yes/no判断、优化选择等。 这些好处是显而易见的,不用多说。 . 应该说,自动化运维是运维工程师的专业追求,造福大众,造福大众,虽然这是一项极其艰巨的任务:不断变化的业务、非标准的应用设计、开发模式、网络架构变更、IDC变更、规范变更等因素可能会对现有自动化系统产生影响,因此需要模块化、接口化、可变因素参数化等。因此,自动化相关工作是运维工程师的核心重点工作之一,也是很有价值的。反映。