我无意在这里对比其它方向哪个更有前景一点,就说说Linux 运维,可以做些什么,有哪些方向。
1,运维,基本要掌握的有,操作系统,计算机原理,编译原理,计算机网络等等等等。基于理论性的知识,基础知识,必须扎实,才能灵活应用。现在互联网变化之快,今天出来一个新技术,你才刚用上手,别人告诉你淘汰了,又有新产品了。掌握什么才能应对这种变化的速度呢?万变不离其宗,基础掌握得好,理解了原理,都可以解释得通。掌握了那么多基础的知识,还能没有发展前景吗?
2,一家公司的所有服务器,基础环境,一般由运维去搭建的。所有程序员跑的程序,必须跑在你搭建的环境中。没了运维可不行哦。服务器的root 权限掌握在运维手里,一个命令可以毁了一个网站,一个团队,重要吧?有专业公司恢复数据?那我进入机房,几个动作把硬盘物理性损坏,没救了吧?破坏的事情说多了,说点好的。运维可以根据现在业务的统计数据,去规划一下网站的未来发展,需要多少资源啊,当前的高可用做得好不好啊,扩展性有保证了没有啊。
3,运维团队,有一个方向,是DBA 。DBA 就是管数据的。一个简单的例子吧,现在的网站,瓶颈一般都在DB 上,DBA 的其中一个职责,就是提升DB 的性能,你看,运维团队解决了网站的瓶颈问题噢。DBA 还有一个职责,就是保证DB 的高可用。网站的程序可以重写,但用户的数据不能伪造,如果数据永远地丢了,那这个网站也就完了。
4,运维团队,还有一个方向,是运维开发。大概就是,他们在写着一些,与网站业务不相关的程序,来提高开发的工作效率啦,提高服务器的性能啦。两个网站表面看起来都差不多,只是一些UI 的不同,真正可以造成不同的,可能是,网站A 只是用了一台服务器就撑起了B 要10 台服务器才能做到的访问量,网站A 做到了快速自动化测试,节省了大量的时间,网站B 的工程师还在忙活的时候,A 的工程师们都在娱乐了。这才是不同,质的不同。
我不是很喜欢纯靠经验型的运维,不懂得编程的运维,前进的路很有限。可以转技术管理,带队做项目,但就是在技术方面的路很难走下去。 是否有发展前景,在于人,而不在于具体的哪个方向。
我是做运维的,已经做了 7 年了。提问是发展前景如何,尽可能就这方面做出回答。
前景主要有两方面,职业前景、薪水前景。
薪水前景:
总的来说,运维的薪水普遍比开发人员略低一点。这是因为上手运维工作比开发门槛略低,市场上有很多运维人员处于“会搭建服务”的状态。这种门槛确实比会“粘贴复制”代码,还要低一点。但是随着你个人能力的提升,金字塔效应一样会很明显。各大公司都需要技艺高超的运维人员,开出的价格并不会比你同龄的开发人员明显低。我目前在北京遇到薪水最高的运维人员在 40w(已有)到 50w(希望)一年。且这只是我看到的运维工作部分,就发展来说当你技能、视角不断提升有可能通过运维岗位开始接触其他工作,有人提到的 DBA 是一种。而当你熟悉多种技能之后开始统一管理多个部门,则有可能变成多个部门的总监。这都是有可能性的“发展”。而到这个层面的待遇,我个人猜测在 50w ~ 100w 年 。
职业前景:
职业前景主要还是要从技能来说,我很赞同《程序员的思维修炼》中针对技术人员等级的划分,我觉得最根本的划分应该参考该书。但我在这里提一点干货。尽可能依照难度排序。
0.熟悉常见硬件配置,了解常见硬件体系
1.会搭建常见服务、理解服务工作原理
2.精通系统工作原理(到这一步已经很少有人能做到了,能过滤掉 80%)
3. 熟悉多种发行版本,RedHat 系(Fedora , CentOS)、Debian 系(Ubuntu)、Gentoo 系(LFS,Arch)
4.熟练的脚本开发 ,Perl,Python,Shell(三选二,或者都会)、自动化技术。
---- 第一梯度结束 ----
5.集群化的管理思维方式 ,可以通过 Puppet ,脚本等等类似工具配合。
4. 性能的极端优化 ,这个工作必须基于 2 的基础,实际上很少有人能够做到7. 多种数据库的原理、优化 MySQL,Oracle,MongoDB,Redis,这里面够你消耗掉一半的青春8. 高可用性以及负载均衡思维方式— 第二梯度结束 —9. 与开发人员一起,参与架构设计
— 第三梯度结束 —
实际上第九点是贯穿在以上各点中循序渐进的过程。但是一定要有这个过程。
以上并不代表运维工作中所有的工作内容。
就技能方面还是希望多参考《程序员的思维修炼》一书中提到的,那才是最根本的。
添加了一条 0 条,我来解释一下,我觉得运维由于要直接面对大量的计算机设备,以及 Linux 发行版本,所以对硬件体系的了解也要比别的岗位更加重要。我曾经面试过一个自称熟悉“虚拟化”的应聘者,当我问:“开启全虚拟化 BIOS 需要做什么设置么?” 对方一脸茫然,于是我又问,你知道 VT-X 么?依旧一脸茫然。最后我问:“你们以前用什么牌子的CPU?” 答,“不知道。”一共就两个牌子!你忽悠我一下也好啊。
再说发行版本,先扯开一下话题 ,在这个问题里面 服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS? 请不要相信推荐 Ubuntu 或者 Debian 的答案…………OK ,回归我要说的,曾经有人讨论是否要用 Gentoo 来做服务器系统。我不想在这里讨论运维应不应该用 Gentoo,我只想说,如果你要用,你必须对你的硬件相当相当熟悉!你才有可能获得那点性能的提升,这种熟悉包括 CPU,SATA SAS 总线等等的细节。所以对硬件设备的理解,是将运维工作做到极致的前提。