运维技术规划

运维中关键技术点解剖:1 大量高并发网站的设计方案 ;2 高可靠、高可伸缩性网络架构设计;3 网站安全问题,如何避免被黑?4 南北互联问题,动态CDN解决方案;5 海量数据存储架构



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



首先明确一下,全文所讲的”运维“是指:大型网站运维,与其它运维的区别仍是蛮大的;而后咱们再对大型网站与小型网站进行范围定义,此定义主要从运维复杂性角度考虑,如网站规范、知名度、服务器 量级、pv量等考虑,其它因素不是重点;所以,咱们先定义服务器规模大于1000台,pv天天至少上亿(至少国内排名前10),如sina、baidu、 QQ,51.com等等;其它小型网站可能没有真正意义上的运维工程师,这与网站规范不够和成本因素有关,更多的是集合网络、系统 、开发工做于一身的“复合性人才”,就若有些公司把一些合同采购都归入了运维职责范围,还有如IDC网络规划也归入运维职责。因此,很是重要必定须要明白:运维对其它关联工种必须很是了解熟悉:网络、系统、系统开发、存储,安全,DB等;我在这里所讲的运维工程师就是指专职运维工程师。



咱们再来讲说通常产品的“出生”流程:



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



二、架构师根据产品设计的需求,如pv大小预估、服务器规模、应用架构等因素完成网络规划,架构设计等(基本上对网络变更不大,除非大项目)



三、开发工程师将设计code实现出来、测试工程师对应用进行测试。



四、好,到运维工程师出马了,首先明确一点不是说前三步就与运维工做无关了,偏偏相反,前三步与运维关系很大:应用的前期架构设计、软/硬件资源评估申请采购、应用设计性能隐患及评估、IDC、服务性能\安全调优、服务器系统级优化(与特定应用有关)等都需运维全程参与,并主导整个应用上线项目;运维工程师负责产品服务器上架准备工做,服务器系统安装、网络、IP、通用工具集安装。运维工程师还须要对上线的应用系统架构是否合理、是否具有可扩展性、及安全隐患等因素负责,并负责最后将产品(程序)、网络、系统三者进行拼接并最优化的组合在一块儿,最终完成产品上线提供用户使用,并周而复使:需求->开发(升级)->测试->上线(性能、安全问题等以前预估外的问题随之慢慢就全出来了)在这里提一点:网站开发模式与传统软件开发彻底不同,网站一天开发上线1~5个升级版本是屡见不鲜,用户体验为王嘛,若是某个线上问题像M$ 须要1年解决,用户早跑光了;应用上线后,运维工做才刚开始,具体工做可能包括:升级版本上线工做、服务监控、应用状态统计、平常服务状态巡检、突发故障处理、服务平常变动调整、集群管理、服务性能评估优化、数据库管理优化、随着应用PV增减进行应用架构的伸缩、安全、运维开发工做:



a 、尽可能将平常机械性手工工做经过工具实现(如服务监控、应用状态统计、服务上线等等),提升效率。



b、解决现实中服务存在的问题,如高可靠性、可扩展性问题等。



c、大规模集群管理工具的开发,如1万台机器如何在1分钟内完成密码修改、或运行指定任务?2000台服务器如何快速安装操做系统?各分布式IDC、存储集群中数PT级的数据如何快速的存储、共享、分析?等一系列挑战都需运维工程师的努力。



在此说明一下其它配合工种状况,在整个项目中,前端应用对于网络/系统工程师来讲是黑匣子,同时开发工程师职责只是负责完成应用的功能性开发,并对应用自己性能、安全性等应用自己负责,它不负责或关心网络/系统架构方面事宜,固然软/硬件采购人员等事业部其它同事也不会关心这些问题,各司其职,但项目的核心是运维工程师~!全部其它部门的桥梁。



上面说了不少,我想你们应该对运维有一些概念了,在此打个比方吧,若是咱们是一辆高速行驶在高速公路上的汽车,那运维工程师就是司机兼维修工,这个司机不简单,有时须要在高速行驶过程当中换轮胎、并根据道路状况换档位、当汽车速度愈来愈快,汽车自己不能知足高速度时对汽车性能调优或零件升级、高速行进中解决汽车故障及性能问题、时刻关注前方安全问题,并先知先觉的采起规避手段。这就是运维工做~!



最后说一下运维工程师的职责:”确保线上稳定“,看似简单,但实属不容易,运维工程师必须在诸多不利因素中进行权衡:新产品模式对现有架构及技术的冲击、产品高频度的升级带来的线上BUG隐患、运维自动化管理承度不高致使的人为失误、IT行业追求的高效率致使流程执行上的缺失、用户增涨带来的性能及架构上的压力、IT行业宽松的技术管理文化、创新风险、互联网安全性问题等因素,都会是网站稳定的大敌,运维工程师必须把控好这最后一关,需具体高度的责任感、原则性及协调能力,若是能作到各因素的最佳平衡,那就是一名优秀的运维工程师了。



另外在此聊点题外话,我在这里看到有不少人要sina、QQ、baidu,51.com等聊自已的运维方面的经验,其实这对于它们有点免为其难:



a、各公司自已网络架构、规模、或多或少还算是公司的核心秘密,要保密,另外,对于你们所熟知的通用软件、架构,因为不少公司会根据自已实际业务须要,同时由于原版性能、安全性、已知bug、功能等缘由,进行过二次开发(如apache,php,mysql ),操做系统内核也会根据不一样业务类型进行定制的,如某些应用属于运算型、某些是高IO型、或大存储大内存型。根据这些特色进行内核优化定制,如sina就在 memcache上进行过二次开发,搞出了一个MemcacheDB,具体作得如何咱们不谈,但开源了,是值得称赞的,国内公司对于开源基本上是索取,没有贡献;另外,服务器也不是你们所熟知的型号,根据业务特色,大部份都是找DELL/HP/ibm进行过定制;另外,在分布式储存方面都有自已解决方案,要不就是使用现成开源hadoop等解决方案,或自已开发。但90%都是借鉴google GFS的思想:分布式存储、计算、大表。



b、各公司业务方向不同,会致使运维模式或方法都不同,如51.com和baidu运维确定区别很大,由于他们业务模式决定了其架构、服务器量级、 IDC分布、网络结构、通用技术都会不同,主打新闻门户的sina与主打sns的51.com运维模式差别就很是大,甚至职责都不大同样;但有一点,通用技术及大体架构上都大同小异,你们不要太神化,更多的公司只是玩垒积木的游戏罢了,没什么技术含量。



c、如上面所讲,目前大型网站运维还处于幼年时期理念和经验都比较零散,没有成熟的知识体系,可能具体什么是运维,你们都要先思索一番,或压根没想过,真正讨论也只是运维工做的冰山一角,局限于具体技术细节,或某某著名网站大的框架,真正运维体系化东西没有,这也许是目前网上运维相关资料 比较少的原故吧。或者也是国内运维人员比较难招,比较牛的运维工程师比较少见的缘由之一吧。



2、运维工做师须要什么样的技能及素质



作为一名运维工程师须要什么样的技能及素质呢,首先说说技能吧,如你们上面所看到,运维是一个集多IT工种技能与一身的岗位,对系统->网络 ->存储->协议->需求->开发->测试->安全等各环节都须要了解一些,但对于某些环节需熟悉甚至精通,如系统 (基本操做系统的熟悉使用,*nix,windows ..)、协议、系统开发(平常很重要的工做是自动运维化相关开发、大规模集群工具开发、管理)、通用应用(如lvs、ha、web server 、db、中间件、存储等)、网络,IDC拓朴架构;



技能方面总结如下几点:



一、开发能力,这点很是重要,由于运维工具都须要自已开发,开发语言:perl、python、php(其中之一)、shell(awk,sed,expect….等),须要有过实际项目开发经验,不然工做会很是痛苦。



二、通用应用方面须要了解:操做系统(目前国内主要是linux、bsd)、webserver相关 (nginx,apahe,php,lighttpd,java。。。)、数据库(mysql,oralce)、其它杂七八拉的东东;系统优化,高可靠性;这些只是加分项,不需必备,能够边工做边慢慢学,这些东西都不难。固然在运维中,有些是有分工偏重点不同。



三、系统、网络、安全,存储,CDN,DB等须要至关了解,知道其相关原理。



我的素质方面:



一、沟通能力、团队协做:运维工做跨部门、跨工种工做不少,需善于沟通、而且团队协做能力要强;这应该是现代企业的基本素质要求了,很少说。



二、工做中需胆大心细:胆大才能创新、不走寻常路,特别对于运维这种新的工种,更需创新才能促进发展;心细,运维工程师是网站admin,最高线上权限者,一不当心就会遗憾终生或打入十八层地狱。



三、主动性、执行力、精力旺盛、抗压能力强:因为IT行业的特性,变化快;每每计划赶不上变化,运维工做就更突出了,好比国内各大公司服务器每每是全国各地,哪里便宜性价比高,就那往搬,进行大规模服务迁移(牵扯的服务器成百上千台),这是一个很是头痛的问题;每每时间 很是紧迫,如限1周内完成,这种状况下,运维工程师的主动性及执行力就有很高的要求了:计划、方案、服务无缝迁移、机器搬迁上架、环境准备、安全评估、性能评估、基建、各关联部门扯皮,7X24小紧急事故响应等。



四、其它就是一些基本素质了:头脑要灵光、逻辑思惟能力强、为人谦虚稳重、亲和力、乐于助人、有大局观。



五、最后一点,作网站运维须要有探索创新精神,经过创新型思惟解决现实中的问题,由于这是一个处于幼年的职业(国外也同样,但比国内起步早点),没有成熟体系或方法论能够借鉴,只能靠你们自已摸索努力。



3、怎样才算是一个合格的运维工程师



一、保证服务达到要求的线上标准,如99.9%;保证线上稳定,这是运维工程师的基本责职所在。



二、不断的提高应用的可靠性与健壮性、性能优化、安全提高;这方面很是考验主动性和创新思惟。



三、网站各层面监控、统计的覆盖度,软件、硬件、运行状态,能监控的都须要监控统计,避免监控死角、并能实时了解应用的运转状况。



四、经过创新思惟解决运维效率问题;目前各公司大部份运维主要工做仍是依赖人工操做干预,须要尽量的解放双手。



五、运维知识的积累与沉淀、文档的完备性,运维是一个经验性很是强的岗位,好的经验与陷阱都需积累下来,避免重复性范错。



六、计划性和执行力;工做有计划,计划后想法设法达到目标,不找借口。



七、自动化运维;能对平常机械化工做进行提炼、设计并开发成工具、系统,能让系统自动完成的尽可能依靠系统;让你们更多的时间用于思考、创新思惟、作自已喜欢的事情。



以上只是技术上的一些层面,固然我的意识也是很重要的。



4、运维职业的迷惘、现状与发展前景



运维岗位不像其它岗位,如研发工程师、测试工程师等,有很是明确的职责定位及职业规划,比较有职业认同感与成就感;而运维工做可能给人的感受是哪方面都了解一些,但又都比上专职工程师更精通、感受平时被关注度比较低(除非线上出现故障),慢慢的你们就会迷惘,对职业发展产生困惑,为何会有这种现象呢?除了职业自己特色外,主要仍是由于对运维了解不深刻、作得不深刻致使;其实这个问题其它岗位也会出现,但我发现运维更典型,更容易出现这个问题;



针对这个问题我谈一下网站运维的现状及发展前景(也在思考中,可能不太深刻全面,也请你们斧正补充)



运维现状:



一、处于刚起步的初级阶段,各大公司有此专职,但重视或重要程度不高,可替代性强;小公司更可能是由其它岗位来兼顾作这一块工做,没有专职,也不可能作得深刻。



二、技术层次比较低;主要处于技术探索、积累阶段,没有型成体系化的理念、技术。



三、体力劳动偏大;这个问题主要与第二点有关系,不少事情仍是依靠人力进行,没有完成好的提练,对于大规模集群没有成熟的自动化管理方法,在此说明一下,大规模集群与运维工做是息息相关的若是只是百十来台机器,那就没有运维太大的生存空间了。



四、优秀运维人才的极度缺少;目前各大公司基本上都靠自已培养,这个现状致使行业内运维人才的流动性很是低,很是多好的技术都局限在各大公司内部,如 google 50万台机器科学的管理,或者国内互联公司top 10 的一些运维经验,这些经验是很是有价值的东西并决定了一个公司的核心竞争力;这些问题进而致使业内先进运维技术的流通、贯通、与借签,并最终将限制了运维发展。



五、不少优秀的运维经验都掌握在大公司手中;这不在于公司的技术实力,而在于大公司的技术规模、海量PV、硬件规模足够大,如baidu可怕的流量、 51.com海量数据~~~~这些因素决定了他们遇到的问题都是其它中/小公司尚未遇到的,或即将遇到。但大公司可能已有很好的解决方案或系统。



发展前景:



一、从行业角度来看,随着中国互联网的高速发展(目前中国网民已跃升为全球第一)、网站规模愈来愈来大、架构愈来愈复杂;对专职网站运维工程师、网站架构师的要求会愈来愈急迫,特别是对有经验的优秀运维人才需求量大,并且是越老越值钱;目前国内基本上都是选择毕业生培养(限于大公司),培养成本高,并且没有经验人才加入会致使公司技术更新缓慢、影响公司的技术发展;固然,毕业生也有好处:白纸一张,可塑性强,比较认同并容易融入企业文化。



二、从我的角度,运维工程师技术含量及要求会愈来愈高,同时也是对公司应用、架构最了解最熟悉的人、愈来愈获得重视。



三、网站运维将成为一个融合多学科(网络、系统、开发、安全、应用架构、存储等)的综合性技术岗位,给你们提供一个很好的我的能力与技术广度的发展空间。



四、运维工做的相关经验将会变得很是重要,并且也将成为我的的核心竞争力,具有很好的各层面问题的解决能力及方案提供、全局思考能力等。



五、特长发挥和兴趣的培养;因为运维岗位所接触的知识面很是广阔,更容易培养或发挥出我的某些方面的特长或爱好,如内核、网络、开发、数据库等方面,能够作得很是深刻精通、成为这方面的专家。



六、若是真要之后不想作运维了,转到其它岗位也比较容易,不会有太大的局限性。固然了,你得真正用心去作。



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



5、运维关键技术点解剖



一、 大规模集群管理问题



首先咱们先要明确集群的概念,集群不是泛指各功能服务器的总合,而是指为了达到某一目的或功能的服务器、硬盘 资源的整合(机器数大于两台),对于应用来讲它就是一个总体,目前常规集群可分为:高可用性集群(HA),负载均衡集群(如lvs),分布式储、计算存储集群(DFS,如google gfs ,yahoo hadoop),特定应用集群(某一特定功能服务器组合、如db、cache层等),目前互联网行业主要基于这四种类型;对于前两种相似,若是业务简单、应用上post操做比较少,能够简单的采用四层交换机 解决(如f5),达到服务高可用/负责均衡的做用,对于资源紧张的公司也有一些开源解决办法如lvs+ha,很是灵活;对于后两种,那就考验公司技术实力及应用特色了,第三种DFS主要应用于海量数据应用上,如邮件、搜索等应用,特别是搜索要求就更高了,除了简单海量存储,还包括数据挖掘、用户行为分析;如 google、yahoo就能保存分析近一年的用户记录数据,而baidu应该少于30天、soguo就更少了。。。这些对于搜索准备性、及用户体验是相当重要的。



接下来,咱们再谈谈如何科学的管理集群,有如下关键几点:



I、监控



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



a、服务故障、状态监控:主要是对服务器自身、上层应用、关联服务数据交互监控;例如针对前端web server,咱们就能够有不少种类型的监控,包括应用端口 状态监控,便于及时发现服务器或应用自己是否crash、经过icmp包探测服务器健康状态,更上层可能还包括应用各频道业务的监控,经常使用方法是采用面业特征码进行判断,或对重点页面进行签名,以网站被黑篡改(报警、并自动恢复被篡改数据)等等,这些只是一部份,还有N多监控方式,依应用特色而定,还有一些问题需解决,如集群过大,如何高性能的进行监控也是一个现实问题。



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



II、故障管理



a、硬件故障问题;对于成百上千或上万机器的N多集群,服务器死机、硬件故障几率是很是大的,几乎每时每刻都有服务硬件问题,死机、硬盘损坏、电源、内存、交换机。针对这种状况,咱们在设计网站架构时须要充分考虑到这些问题,并将其视为常态;更多的依靠应用的冗余机制来规避这种风险,但给系统工程师足够宽裕的处理时间。(如google不是号称同时死800台机器,服务不会受到任何影响吗);这就是考验运维工程师及网站架构师功能的地方了,好的设计能达到google所描述自恢复能力,如gfs,糟糕的设计那就是一台服务器的死机可能会形成大面积服务的连锁故障反映,直接对用户拒绝响应。



b、应用故障问题;多是某一bug被触发、或某一性能阀值被超越、攻击等状况不一而定,但重要的一点,是要有对这些问题的预防性措施,不能想固然,它不会出问题,如真出问题了,如何应对?这须要运维工程师平时作足功夫,包括应急响应速度、故障处理的科学性、备用方案的有效等。



III、自动化



自动化:简而言之,就是将咱们平常手动进行的一些工做经过工具,系统自动来完成,解放咱们的双手及枯燥的重复性劳动,例如:没有工具前,咱们安装系统须要一台一台裸机安装,如2000台,可能须要10人/10天,搞烂N张光盘,人力成本更大。。。而如今经过自动化工具,只需几个简单命令 就能搞定、还有如机器人类程序,自动完成以往天天人工干预的工做,使其自动完成、汇报结果,并具有必定的专家系统能力,能作一些简单的是/非判断、优化选择等。。。这些好处很是明显再也不多说。。。应该说,自动化运维是运维工程师职业化的一个追求,利已利公,虽然这是一个异常艰巨的任务:不断变动的业务、不规范化的应用设计、开发模式、网络架构变动、IDC变动、规范变更等因素,均可能会对现有自动化系统产生影响,因此须要模块化、接口化、变因参数化等所以,自动化相关工做,是运维工程师的核心重点工做之一,也是价值的体现。php

http://bbs.chinaunix.net/thread-3667292-1-1.htmlhtml

相关文章
相关标签/搜索