Linux运维好还是开发和运维哪个好好?

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
标签:至少1个,最多5个
在云计算时代,开发和运维的结合变得越来越重要。在,前新浪SAE运维主管,,分享了《一个开发眼中的运维》根据自己从开发人员转型运维之后的心得,谈如何把在开发上的运用抽象思维方式运用到运维领域。
1. 运维不是什么?
运维不是打杂的,运维不是客服,运维也不是服务开发的,但要做好合作。
2. 运维是什么?
运维服务于整个产品,保证架构合理,系统稳定。运维只对业务稳定负责,所有的工作都是奔着这个去的。
3. 你如何写程序,写程序的目的是什么?
程序是为了完成特定的功能。为了完成特定的功能,程序需要申请资源、使用资源、管理资源,功能完成后,还要释放资源。说到底,就是跟资源打交道,和资源打交道的工具是“编程语言”。
资源包括什么?内存、CPU、磁盘、网络、文件描述符、外部API、缓存、数据库等,编程语言是如何管理资源的、合理的算法/架构保证了资源的合理使用,malloc/free分配内存、connec、close使用网络等等。
4. 什么样的程序算好程序?
正确的程序算好程序。
逻辑正确,使用资源尽可能的少;
没有bug,没有把机器资源耗尽;
稳定性好,不会异常退出;
可用性高,有HA方案,不会因为一台机器(或一个进程)无法提供服务,而影响整个系统的服务;
没有单点是基本要求;
容易扩展,只需要简单的增加资源(CPU、内存、磁盘、机器等)就行,不需要太多人工迁数据、修改配置等;
容易维护,包括容易配置、容易部署、容易监控等。
5. 如何写出好程序?
什么样的程序不出错?代码少的程序错误少,逻辑简单的程序错误少,需要管理的资源少的程序错误少。要复用代码,减少代码的数量。
要抽象,分层,内聚,解藕,简化逻辑,隔离资源,才能简化逻辑,隔离资源,限制错误。
没有持久状态的程序好扩展,没有持久状态意味着上下线机器不需要迁移数据。没有状态的程序也很容易做HA方案。
配置简单,日志丰富,能提供程序状态查询的程序好运维。
但程序不可能没有数据,通过集中管理数据库,让数据尽量只读,预加载数据等手段隔离逻辑和数据,也能让扩展变的容易。
6. 系统是什么?
系统是我们运维的目标,不了解系统是什么,就不知道如何运维。
系统是网络,是机器,是程序。是把网络,机器,程序组织起来的架构。
机器角色应该是尽量单一的,架构应该是数据流简单的,基础业务服务化的。
系统是动态的,运维系统首先考虑的不是当下成本,而是系统变更(扩容,上下线机器)的成本。
运维必需是简单的,要考虑的一个新手,如何能尽快上手工作,而不是冗长的文档和复杂的培训。
7. 写程序和做运维是类似的,甚至一样的!程序提供单一功能,而运维搭建,维护的系统提供全部的功能,开发人员开发的程序只是整个系统的一个部分。
从某个角度说,开发人员做的事情越少,系统越容易稳定,因为开源的总是更靠谱。这是减少代码,也是复用。
但运维却理应比开发更不容易犯错,因为运维只需要管理资源,而不需要应对复杂的业务逻辑。
这是个矛盾,因为开发负责的复杂业务逻辑,是运维负责的系统的一部分,前者不稳定,后者也别想消停。
所以运维不懂开发,至少要懂如何控制复杂度,如何隔离故障,如何服务降级。出色的运维人员,只要精通一门语言,必然也是出色的开发(反之亦然)。但什么是出色的运维呢?大部分运维人员,只是一个熟练的操作工人。出色的运维必然更了解系统(原理),这要读很多书,做很多思考,有很多实践。
只看这个cat bigfile.txt | parallel --pipe wc -l | awk '{s+=$1} END {print s}'你能不能想出parallel加速的原理是什么?
8. 你是否了解你运维的资源?
CPU高意味着什么?你是不是应该先问问是sys,user,iowait这三个的哪个高?是单个CPU高,还是整体都搞?
你是否了解有的程序CPU使用率90%就有问题了,而有的350%了还没问题?
load高意味着cpu高吗?内存耗尽导致load高的原理是什么?内存耗尽回导致io高吗?
9. 是否正确的监控了资源?
监控了磁盘使用率,是不是也监控了磁盘的io能力,raid卡呢?磁盘损坏呢?监控了网卡使用率,是不是也监控了丢包率?
10. 资源是否一定对应硬件?
CPU,内存,磁盘,带宽都有对应的硬件,那些没有硬件对应的资源呢?文件描述符,端口数,进程数是不是资源?
路由表,iptables,cron是不是资源?
MySQL主从,第三方REST接口是不是资源?
11. 为什么要尽量把一切抽象为资源?
还记得刚才说程序要讲抽象么,为什么linux一切皆文件?一切运维对象都抽象为资源后,就可以用尽量统一的方法来管理(配置,监控)。
如果新上线一台机器无比容易,为什么还要费尽修复删除的/usr目录呢,把它当成新机器重做上线就行了。
12. 运维原则:
线上变更必需走配置管理。线上系统对任何人应该是只读的,只有配置管理程序有权写。这样保证了,变更是可重复的,可复制的。手工加路由,手工修改文件权限,手工配置ip,手工配置nfs,手工起虚拟机等等。一切在线上手工做的操作,于团队都是无益的,因为团队失去了一次改进配置管理的机会。任何操作不是想我就这一台机器,而是想我有1000台机器怎么办。
上线业务必需先问,如何保证HA,如何扩展,如何运维/监控。这三个问题不解决,谨慎上线,当然上线必需使用配置管理上线。
隔离复杂度,要简化,抽象。抽象指角色抽象。运维眼中没有计数用的mc,和缓存用的mc,运维眼中只有mc,于是所有的mc都来自mc池,mc池通过puppet配置,创建mc的过程编程了简单的
puppet配置。一旦把自己管理的所有业务抽象/分拆为几种有限的“业务”,缓存、mysql、httpd等,一切就简单了。例如我们有缓存池、数据库池、redis池、httpd池。(参考:4、5)
先解决问题,然后是以后如何避免此类问题,后者更重要。
不犯第三次错误(重复的问题不出现第三次)。第一次算不知道,第二次算不小心,第三次特么是故意的吧。如果每个问题都能彻底有效解决(最终落实到配置变更和监控),问题就会越来越少。
时刻思考如何“偷懒”,运维越清闲,系统越稳定。
13. 配置管理是如何管理资源的?
包,所有线上的软件/脚本都是通过(rpm)包管理的。
文件,所有的变更“持久化”都是通过文件。程序的配置文件,sysctl,iptables,route,cron等凡是能用配置文件控制的一切。
进程,所有的进程都是用配置管理启动的,或者通过配置管理写文件到系统启动目录,例如rc3.d。
你能相到的一切,无论是配置keepalived,还是添加用户,都抽象为这三个。如果不能抽象为这三个,请再思考两个小时。
如果系统可以由这三者全部控制,而这三者又全部写入了配置管理,这意味着按照配置管理配置出来的系统就一定是对的。扩容,升级,机器的上线,下线从此该有多容易。而运维人员,可以通过配置管理,一览整个系统,通过持续改进的模板,配置更容易学习,不容易出错。
的正确性,业务响应时间也要同等关注的。
基础监控要全面,但不一定实时报警。如果业务不受影响,又何必半夜起来处理宕机呢?如果业务有问题,全面的监控会帮你发现问题的蛛丝马迹。
如果memcache偶尔响应慢,你怎么能想到是swap导致的呢?全面的监控可以帮你发现这一点。把业务逻辑抽象为资源,可以统一业务监控和基础监控。(监控如何算全面,参考8、9)
重装操作系统,使用puppet重新配置,是系统恢复到正确状态的最佳途径。理论上,新装的机器使用puppet配置后一定是能用的,否则,就是puppet写的有问题。
区分无状态的机器和有状态的机器,尽量把状态集中,然后集中精力运维这些有状态的机器。
宁可通过网络把状态集中也要尽量让机器避免有状态,无状态的机器非常好运维。
6 收藏&&|&&43
你可能感兴趣的文章
8 收藏,1.5k
17 收藏,3.1k
41 收藏,2.5k
好心得,好总结...很多地方不谋而合...虽然我是个研发人员
好心得,好总结...很多地方不谋而合...虽然我是个研发人员
非常不错~~
非常不错~~
分享到微博?
我要该,理由是:linux运维工程师入门和学习必经之路
我的图书馆
linux运维工程师入门和学习必经之路
最近看到了一篇新闻,linux之父建议找一份基于linux和开源环境的工作,确实,这已经是未来的大趋势了。今天就来聊一聊我的想法,本人8年linux运维一线经验,呆过很多互联网公司,从一线运维做到运维架构师一职,也见证了中国运维行业从无人问津到可圈可点的整个演变过程。Linux系统目前主要应用在企业服务器上,学习linux,更多的是向linux系统/运维工程师方向进军。比如云计算系统工程师,大数据运维工程师,运维开发工程师其职位都是linux运维工程师的进阶。下面就整体介绍下,作为过来人,怎么学习linux,以及linux入门和学习的路线。目前发现马哥linux运维培训课程非常不错,我就以其为蓝本,跟大家介绍下linux学习路线运维学习需要分为四个阶段,linux初级入门-àlinux中级进阶-àlinux高级提升,和资深方向细化。第一阶段:初级入门初级阶段需要把linux学习路线搞清楚,任何学习都是循序渐进的,所以学linux也是需要有一定的路线。个人建议学习的路线如下:初级入门:1、Linux基础知识、基本命令(起源、组成、常用命令如cp、ls、file、mkdir等常见操作命令)2、Linux用户及权限基础3、Linux系统进程管理进阶4、linux高效文本、文件处理命令(vim、grep、sed、awk、find等命令)5、shell脚本入门(可边练习边学习)第二阶段:中级进阶中级进阶需要在充分了解linux原理和基础知识之后,对上层的应用和服务进行深入学习,其中说到服务肯定涉及到网络的相关知识,是需要花时间学习的。1、TCP/IP网络基础(差不多CCNA、NP的知识就够用)2、Linux企业常用服务(如dns、http、ftp、mail、nfs等)3、Linux企业级安全原理和防范技巧(系统性能/安全、安全威胁模型和保护方法4、 加密/解密原理及数据安全、系统服务访问控制及服务安全基础5、iptables安全策略构建6、shell脚本进阶(主要是结合一些应用,写一些案例)7、MySQL应用原理及管理入门(能管理和搭建一个个人博客站点)学到这里,掌握的基本技能,已经够用了,已经能做一些基础的运维工作和简单维护了。第三阶段:高级提升1、http服务代理缓存加速(其中主要学习varnish、nginx缓存系统,要对CDN的知识有所了解。)2、企业级负载集群(其中主要学习nginx、haproxy、lvs要对主要知识熟练掌握,对负载均衡算法有清晰认识,)3、企业级高可用集群 (其中需要对keepalived,heartbeat等进行深入讲解)4、运维监控zabbix详解(主要是zabbix、cacti、nagios等监控系统,现在用的比较多的是zabbix)5、运维自动化学习(需要学一些开源运维自动化工具的使用如ansible、puppet、cobbler等运维自动化工具)能掌握到这里,基本能处理搞定很多工作了,可以去面试高级运维工程师,差不多薪资能达到12-18K左右第四阶段:资深方向进阶1、 大数据方向(需要对hadoop、storm等常见开源大数据系统需要深入了解)2、 云计算方向(主要是openstack这套东西,当然像一些kvm等虚拟化技术,也是需要掌握的,现在docker也比较流行)3、 运维开发(主要是python运维开发)4、 自动化运维(在之前自动化基础上做深入)5、 运维架构师(主要需要广度,差不多5年左右以上经验,可以担当此职位)
TA的最新馆藏
喜欢该文的人也喜欢1226被浏览215847分享邀请回答1188 条评论分享收藏感谢收起29779 条评论分享收藏感谢收起查看更多回答无需注册,直接
运维老鸟谈Linux运维工程师的职业发展怎么样才算好呢
文章编辑:
  linux运维发展常见的就是下面两条路线:  第一条:运维应用--&系统架构--&运维开发--&系统开发  第二条:运维应用--&应用dba--&架构dba--&开发DBA  下面详细每个阶段的职位说明(以北上广为例):  01. 运维应用级别:  这个阶段就是玩别人的软件,例如:linux,nginx,mysql,php,nagios 大多数的linux,网络工程师,系统工程师都是这个阶段。 这个阶段的工资平均3-10K。处在这个阶段的伙伴们要注意了。  这里属于金字塔的底端,工资是相对比较低的。  02. 系统架构级别:  这个阶段就是用已知软件架构大规模集群方案以及实现各种技术方案  这个就是所谓的系统架构师,如果是程序开发就是程序架构师。  这个阶段的工资平均10K-30K,属于运维应用上层,需要靠技术,  沟通,思想三条线通力配合才能达到这个水平。  03. 运维开发级别:  这个阶段就是利用已知语言,开发基本的应用层工具,例如:web管理系统  这个阶段的平均工资大概10-30K,如果具备前两个运维应用和系统架构的积淀,  那么工资30-60K很轻松。  04. 系统开发级别:  这个阶段就是修改开源的软件,或者开发新的服务软件(例如:也开发一个web软件,存储软件)与底层软件(例如:OS)  这个阶段的平均工资大概20-60K,如果具备前两个运维应用和系统架构的积淀,工资更高!  05. 数据库管理和架构:  这个阶段就是也主要是玩别人的软件,但是由于数据相对更重要,所以工资要一些。  数据库也需要架构,所以数据库的高级阶段工资也会较高,数据库开发职位不多,就不说了。  这个阶段的工资平均10K-40K。要求至少第一层运维应用的能力。其他能力有就是加分。  关于的相关职位信息,可以登录内部推荐直招平台内推网来查找投递。查看更多内推网资讯:
  内行问答-互联网行业经验交流平台→
  内推网( ),专注于做行业内部推荐、打造最专业的内部推荐直招平台。
免责声明:文章来源于网络,由内推网编辑整理,文章观点仅代表作者观点,如有侵权,请及时与我们联系删除,谢谢;内推网(www.neitui.me)互联网内部推荐企业直招平台。查看:10655|回复:30
给点儿建议,学运维还是开发,本人大三学生,想着就业临近,学点儿东西,不知道开发编程难还是运维难。请讲解一下,还有以后哪个好就业,和薪资情况
给点回复啊,亲
初级工程师
自己先拿定主意再说没有人会给你建议。也不敢给。
引用:原帖由 yuren8611 于
08:33 发表
自己先拿定主意再说没有人会给你建议。也不敢给。 两个哪个更好学也回答不了?
优秀技术经理
如果你有编程的基础的话,可以先进行学习编程,然后在转到运维。
引用:原帖由 lanni654321 于
11:15 发表
如果你有编程的基础的话,可以先进行学习编程,然后在转到运维。 编程吧,这个工作的初始工资也高,新人搞运维都是要熬。
高级工程师
共同交流,共同进步
编程和运维都不简单&&只要学好一个就可以了&&编程一开始薪资待遇比运维要好,但是后期运维和编程的薪资待遇就是看技术了
中级工程师
引用:原帖由 RH023 于
23:47 发表
给点儿建议,学运维还是开发,本人大三学生,想着就业临近,学点儿东西,不知道开发编程难还是运维难。请讲解一下,还有以后哪个好就业,和薪资情况 ... 主要看兴趣,其次,我觉得运维接触的东西多,推荐运维,如果做开发的话做底层的开发还行,应用层的开发我是不喜欢,太无趣。
“运维新人要熬”不太同意,运维和开发一样的,如果不懂,那就得熬,熬到你懂。
难度相当,但开发需要学的东西更具体,运维需要学的东西没有范围,你什么都要懂,但是又不知道到底该懂什么,开发能力也必须有,很杂。
不要搞运维,大部分的运维工程师工作都是很闲,忙的话都是忙些做个网线、装个系统的杂事,还是做开发转项目经理
这样跟你说吧,不冲突,主要是你想做哪方面的事情,如果你在学校对linux熟悉,可以先做运维,如果开发学的好,懂像JAVA、python、C等语言,走开发也是很不错的选择! 如果你都不想放弃,可以选择一个你认为自己能胜任的工作,运维的目标是自动化,要达到自动化,就必须懂一门语言,用这些语言写出的工具能让你的运维更上一层楼! 如果是选择了开发,那就很多了,硬件开发、软件开发。 移动手机开发,web开发等很多方向可以选择,当然你还是不想放弃运维,我觉得走web开发更贴近一些,像java、C、php、python、perl等语言可以考虑学几个,当然你对C很精通,那你就是大神!&&如果运维开发都不错了,可以发展到架构师方向或者走其他管理方向!
& &&&最后薪资待遇要考虑到很多方面了,一线城市,北上广,开发比运维略高,但是开发到了一定年纪可能是个砍,运维吃的是经验饭!
& &&&个人拙见!
运维闲的能淡出鸟~~
开发累,开发钱多,开发受重视
本帖最后由 回溯 于
16:13 编辑
初级工程师
引用:原帖由 回溯 于
15:48 发表
运维闲的能淡出鸟~~
开发累,开发钱多,开发受重视 淡出鸟?
我上了这几年的班。我没有见过淡出鸟的。
这是一个两难的问题
引用:原帖由 yuren8611 于
16:19 发表
我上了这几年的班。我没有见过淡出鸟的。 就是很闲很闲啊,看会pdf教程,打会游戏,上网,一天就这么过了
高级工程师
共同交流,共同进步
引用:原帖由 回溯 于
15:48 发表
运维闲的能淡出鸟~~
开发累,开发钱多,开发受重视 这种运维我敢说工资没有超过5000的,运维技术上去了,挣得不必开发少
本帖最后由 西门飞冰 于
20:10 编辑
引用:原帖由 西门飞冰 于
20:09 发表
这种运维我敢说工资没有超过5000的,运维技术上去了,挣得不必开发少 就我刚来没超过5000,组的其他人随随便便超5000咯
引用:原帖由 回溯 于
11:15 发表
就我刚来没超过5000,组的其他人随随便便超5000咯 你做的运维吗,刚开始不超过5000?那开发呢,你是在哪儿
别总盯着人家的工资条,你要有那实力你也能开那么多薪水。
开发也有一个月不到5k的,运维也有3k搬砖的。
建议lz还是根据自己的兴趣去决定就业方向比较好
初级工程师
还是看自己的兴趣吧,就象dn833说的,开发和运维都有工资低和高的,全靠自己的努力,还是好好想一想吧,什么适合自己!
顶起来,我也好纠结,我现在做的是网络运维,好闲

我要回帖

更多关于 开发和运维哪个好 的文章

 

随机推荐