我对运维的思考

我是一名Java后端研发工程师,在个人职业生涯中,曾作过一小段时间专业的运维,然后在一段很长的时间里兼任过运维职责,只不过职责范围在小和大之间来回奔跑。

前端

1、Linux命令是基础,万变不离其宗

我所待的几家公司,或多或少要作运维相关的工做,其中Linux是最经常使用的,这个Linux包含Linux经常使用命令和操做系统(如Debian、红帽、Gentoo、Ubuntu、CentOS等)。其中我接触最多的就是CentOS和Ubuntu。node

为何说Linux命令是基础?

  • 命令行界面以Linux命令做为基础,若是不会敲命令,也就没法使用(各类软件安装和问题排查都涉及);linux

  • shell脚本就是由一条条Linux命令组合而来,掌握好Linux命令,你就能够写出各类各样的符合实际需求的脚本(服务监控、备份、项目部署等)。nginx

另外再从另一个角度来看,不管是专业的运维人员或开发人员都须要掌握Linux命令,只不过程度不同,对于运维人员必须掌握牢靠,毕竟是吃饭的家伙,对于开发人员,开发写出来的项目大可能是部署在Linux上(有一部分是Windows Server),涉及生产环境的问题排查,必然须要熟知一些经常使用的Linux命令。程序员

2、自动化

自动化这块对运维很是重要,自动化涉及最多的就是写一些shell脚本放在特定的目录归类好,按需执行。shell

如今有不少现成的软件能够将一些工做自动化如(jenkins持续集成(拉取项目、自动编译、发布等)、zabbix自动监控服务器CPU、内存、磁盘和JVM、MySQL等、Ansible轻松管理上百台服务器等)。数据库

有人幽默地说:不擅长将工做自动化的运维不是好运维。编程

在我作运维相关的工做的时候,发现像部署或者一些软件的备份和安装就那么几条命令,敲来敲去,敲了N多遍,虽然能够复制粘贴,可是感受仍是太过麻烦,因而写一个shell脚本,只需一键执行便可。这样一来就能够节省更多的时间。后端

更多的时间能够用来思考更多,比方说现有的运维体系哪些不是很完善或者是以前遗留的哪些问题(不那么紧急但比较重要)能够如今来解决。
再或者对于一些软件它的一些设计原理和思想是什么,也能够研究研究。再或者是配置文件,为何要这么配置,每一个配置是什么含义。浏览器

在我作运维的时候,网上搜索安装和配置软件,基本上就是复制过来一步步来,但后来发现有一点很差的就是我对于为何这样配置不知道,不知道意味着可能存在一些风险,运维人员要想进步成长,对一些软件不只仅作到知其然,更要知其因此然(与咱们研发人员写代码同样,不只仅要懂业务逻辑和代码执行逻辑,同时也要知道所使用的库,底层是如何处理的)。

安装软件谁都会,但要说到软件的配置,如何配更合理更符合实际场景那就是一门比较深的功夫。

那么如何作到自动化呢?

要养成”懒”的习惯,就和研发人员写代码同样,发现多段重复的代码,因而将其抽取为一个方法进行调用(不用在复制来复制去,影响可读行,同时也增长代码行,代码行越多确实不便阅读)。运维人员常用Linux命令,在敲的过程当中总会可以发现哪些是重复屡次的,重复屡次的就能够写成一个shell脚本。

自动化的好处有哪些?

最直接的好处就是:你动脑思考了,思考如何简化工做,提升效率。这样一来给你直接带来的就是实力的提高。

其它的好处就像上面说的,你能够有更多的时间来思考如何作的更好或者学习(我第一家公司的运维同事在自动化方面作的很不错,同时他的Linux功底也很是好,基本上工做作的特别快,效率也特别高,所以他有更多的时间去思考,去学习(业务或者技术层面)等)。

还有一个最重要的缘由,若是你不擅长将工做自动化,最后可能会累的要命。累的代价就是身心疲惫和中止思考(人在很是累的时候写代码,很是麻木,根本不知道本身在作什么,只是在重复动做)

3、要懂业务

在一些互联网公司,开发人员不懂业务的话,工做几乎没办法进行下去。对于运维人员来讲,能够不懂。这是我曾经的见解。

后来经历多了,发现还真不是这样。什么样的业务决定使用什么样的架构(逻辑架构(如分层:数据访问层、业务逻辑层、表示层等)、开发架构(SDK和一些第三方库等)、物理架构(部署和运行)、系统架构等),其中物理架构(操做系统、网络、服务器等)、数据架构(数据表设计、高可用、备份、复制等)。

根据合适的业务,选择合适的架构。对架构师而言很是重要,对于运维人员也一样如此。

同时懂业务对于运维人员排查问题也是颇有帮助的,由于懂流程,懂流程意味着能够重现,重现问题过程当中,打开对应的日志,这样一来能准确的定位到问题,看是由于服务器的缘由仍是某个开发人员代码写的问题(服务器的缘由一般那段程序执行须要更多的内存,服务器内存可能不够;代码的缘由一般是一些判断逻辑不是很完善致使程序没有按照正常流程走)。这样就能减小运维背锅的几率,也能有理有据的反驳。

4、要有一套完整的运维机制

曾看过李鹏写的《IT运维之道》这本书,大部分忘记了,但其中提到的IT运维四要事,至今印象还比较深入,作运维的朋友,能够读一读,曾经在创业公司读这本书的时候,受到一些启发运用到实际中,提升效率很多。
这本书总结了IT运维的四件要事。我以为讲的很不错。同时这四要素可构成一套完整的运维机制。四要素以下:

1.按运维原则作事

  • 事前:讲计划、重承诺;
  • 事中:讲规范、重控制、有反馈;
  • 过后:重效率、能应急、有保障。

2.掌握服务平衡

  • 主动服务:服务者发起运维服务;
  • 受理服务:用户提出运维需求。

3.落实总体运维

  • 软件支撑系统;
  • 应用系统;
  • 计算机硬件设备;
  • 机房和环境。

4.贯穿服务流程

  • 事件流程;
  • 问题流程;
  • 配置管理流程;
  • 变动流程;
  • 发布流程。

上述四要素每个部分要细说,均可以讲不少内容。因为我运维经历颇有限,上述四要素并无所有接触。但对于我感触最深的是第一点按运维原则作事和第四点贯穿服务流程。这四要素你们可择需而取。在个人职业生涯中,涉及到运维相关的工做,若是我有权把控的话,基本上会按照第一点来作(其实不只仅是运维,开发也同样)。

5、适当了解先后端

早年软件,以Java开发为例,基本上JSP+SSH之类的或者JSP+SSM等之类的框架。基本上Java代码+前端HTML+CSS+JS混合一体。若是代码写的不是那么优美,看起来很难受。
现在,基本上都是先后端分离。
前端三大主流框架Vue.js、React.js、Angular.js等。
这三大框架基本上都体现了前端模块化的思想。做为运维人员部署方面也很简单,要么服务器有node.js环境,要么让前端人员本地编译好,将生成的dist目录里的文件打成zip包直接上传到nginx对应的目录解压便可。总而言之,运维人员得了解。

为何要适当了解先后端?

最基础的就是针对请求的响应码,要识别一些经常使用的响应码,利于排错,同时做为运维人员也要擅长浏览器调试。由于像有的公司作的项目是须要现场实施的,实施人员一般是运维,去客户公司部署项目,肯定项目是否部署成功,一般要结合一些先后端相关的知识。记忆比较深入的是在第一家公司的时候,有一次运维同事和技术总监跟着去客户公司调设备,技术总监之因此带他去也是让其熟悉这个环境,同时也让他熟悉一些Java代码(Client-Server通讯),由于回头就得他一我的来客户公司调,要求他能看懂这部分Java代码。不能排除有的时候运维不只仅是捣鼓一些服务器上的东西,可能还要求熟悉一些先后端代码之类的。你们能够去Boss直聘上瞄一眼,中高级运维,基本上都要求至少熟悉一门编程语言,能够是Java,也能够是Go和Python。不过近年来Go和Python是比较多(Python作自动化运维是很是合适的)。固然了,基本上学计算机的,你们接触了编程语言不可能只有一个。

6、总结

记得以前在公众号看过一篇文章《远见|美团王慧文清华演讲:社会最稀缺的是π型人才》,这篇文章提到了社会最稀缺的是”π型人才”。

“π型人才”并不等因而全才(也不能等于什么都了解、什么都不精),只是不给本身设限(不把本身圈在特定的地方,简单的举例说明,我既是一名Java程序员,又是产品的创造者之一,同时我也能够是一名业余做家)。

个人前三家公司经理级别的领导基本上都符合这样的。

第一家公司的技术总监

以前公司是没有运维的,他独立负责整个公司的运维。不只仅这样,若是项目急的时候,他也要上阵写Java和一些前端代码。平时他也是主要写后端代码和作数据库设计方面的。

第二家公司的项目经理

他早年作过程序员,后来作产品经理,再后来运营总监等。

第三家公司的技术经理

他是一名后端程序员,后来不知因为什么缘由作起来前端。我和他在一块儿工做的时候,发现他天天和咱们同样,除了开产品会就是在写代码或者是作少部分管理工做。

结合我这些年的工做经验来看,不管是开发、测试、运维等,它们都共同涉及一个点,那就是工做的”原则”(包含工做的方法论),每家公司的研发流程不同,但工做的原则是能够复用的。

相关文章
相关标签/搜索