开发者与系统管理员的争执:不要碰我的生产环境!

运维 系统运维
在Web开发公司里,对于是否允许开发人员进入生产环境,总是存在争议。本文作者认为,对于应用的部署永远应该是系统管理员的责任,也就是说,系统管理员需要更好的沟通能力,以及对应用开发有一定的认识。

51CTO编辑注:本文叙述的是Web开发公司的一个常见的纠纷,有关开发者与系统管理员之间职权划分的问题。本文的意思是系统管理员应该承担更大的责任,这与现在在欧美系统管理员界正刮起一股DevOp的潮流是契合的。这些人提倡集系统管理员和开发者的职责于一身,达到“敏捷运维”的目的。

51CTO编辑推荐:SA,神仙与装机男:运维的工作到底啥样儿?

在Web开发公司里,有个问题会被一而再、再而三的提出来,这就是:

“是否应该允许开发人员进入生产环境?如果是,允许到什么程度?”

对于此,我的观点是,整体上,应该限制开发人员访问生产环境。在论证我这个观点之前,我想声明一下,我的立场绝对不是基于对开发人员的品质品行的判断——所以请不要往这方面想。首先我要公布一些常见的程序员们不喜欢或讨厌这个观点的论据:

“系统管理员什么都不让我们干,他又解决不了,我们根本没法完成任务。”

如果真是这种情况,那么他们应该是对的。如果是因为没有足够的管理员或管理员不称职,那么瓶颈就会出现。然而,允许开发人员访问生产环境并不是一种解决方案,因为即使这一回你把问题解决了,以后还是会出现缺少管理员的情况。有时候一些管理上的规章制度会使事情变的繁琐,耽误时间,但我想这时间也不会是一种不可接受的漫长。

“我们以前就是这么干的。”

创业公司很少一成立就有一些系统管理员。出于某些原因,系统管理员会被认为是一种奢侈品。尽管这种状况在以前是可以的,但随着公司的成长,管理员应 该慢慢增多。事情会变的越来越复杂,这也是公司为什么需要系统管理员的原因。所以说,“我们以前就这么干”的说法并没有多少说服力。

“我们需要进入生产环境解决问题。”

也许是,也许不是。管理员应该能够给你想要的各种信息。如果这个过程成为瓶颈,那么允许有限范围内的访问是合适的。

还有很多的关于限制开发人员访问的讨论,但来让我们把目标转向我真正想讨论的——为什么这是一个好建议。

限制访问的产生由来:

如果开发人员不能够访问生产环境,一个最大的含义就是他们不能自己去安装程序。也就意味这管理员要去为他们安装程序。这其中会发生两件事情:

1)开发人员和系统管理员必须交流——相互的交流!管理员必须学会如何安装程序(我可不希望是由我去解释),这应该是件好事。

2)开发人员必须制作安装文件和编写简单有效的部署步骤说明。这也是很好的事情。能按步骤来重建系统是应对灾难恢复的重要的一部分。

所以,一旦开发人员被限制访问生产环境,我们就能避免那种因为程序过于复杂以致于只有开发人员出面才能部署安装的情况出现。同样,开发人员也避免了把时间浪费在部署和安装程序的工作上了,节省下的时间开发新程序岂不更好。虽然起初他们会多花一点时间,但以后会越来越方便。

这样管理员也能学到更多的关于安装过程中需要备份哪些东西的知识了。即使在管理员对程序不太了解的情况,他们只需对着开发人员提供的文档来执行他们的备份操作。

开发人员所关心的并不一定是系统管理员所关心的:

通常开发人员所关注的安全领域并不一定会是系统管理员所关注的领域。对于Web网站安全,他们只是擅长他们自己特有的领域。诸如跨站脚本攻击,SQL注入等安全问题是开发人员擅长的,对于系统管理员则不然。诸如账户权限,文件权限,web服务器配置通常不是开发人员擅长的和感兴趣的,而这些对于生产环境确十分重要的,它们是系统管理员擅长的领域。我对这个领域的见解是越少人访问越安全。还有,这能有效的避免凌晨两点被电话吵醒——因为系统管理员怀疑你们15个程序员中的某个人在服务器上做了不当的操作。

变更控制:

我不认为一个稳重的程序员会不把变更控制当作重要的事情。因为在程序中经常会有这样的事情。然而,我发现许多程序员却不会慎重的把在服务器上的每次改动都做上日志。(当然我也看到过一些配置文件是有版本控制的)

如果你没有这样做,这意味这生产环境不可能正确的重建。这也意味着如果某些改动导致了问题,对于来解决问题的人却未必能知道这些曾经发生过的改动。这就好像是一个系统管理员打开产品代码,在未通知任何人的情况下修改了程序或提交到产品里。哇,我估计程序员们会抓狂的。

拥有者对其有控制权:

Joel’s Spolsky有句话放在管理工作上很合适:

“每人都有自己的一块领地。是谁的,就是谁的。如果一个管理者或其他人,想插手一个事情的管理方式,他必须保证自己是事情拥有者。拥有者有最终话语权。”

系统管理员通常被认为是生产环境的拥有者。他们是持续跟踪机器运行状态的人,是凌晨2点会被电话叫醒的人,基本上也是和生产环境问题距离最近的人。如果开发人员直接访问的生产环境,那这种管理控制无形中就给破坏了。

系统管理员的职责:

为了能在这种原则下正常的工作,管理员必须完成一些工作。

1)向开发人员们询问他们想从你这得到什么信息,你要很乐意的给他们想要的。

2)确保开发人员在他们自己的空间里有一个好的开发环境。

3)理论结合实践。每个公司都有自己的特殊情况,有些公司由于自身业务的原因决定了开发人员的无访问权限(比如金融类)。然而,即使你那不是个金融 公司,取消开发人员的访问特权的作业制度也是最好的方案。有可能某些开发人员同时担任这系统管理员的工作,所以每个公司都有自己的情况。

就像我在开始时声明的那样,我认为所讨论的问题跟程序员是否优秀无关——有很多的开发人员的技术跟系统管理员一样出色。

我们所关注的更多的是如何在公司的发展中让两种角色的人都专注于自己擅长的领域。也许事情的改变需要时间。然而,最终的目的是让我们有一个更加可靠和安全的生产环境。

[英文出处]:Should Developers have Access to Production?

[中文翻译]:外刊IT评论

【编辑推荐】

  1. 资深系统管理员给Linux/Unix新人们的建议
  2. 5月15日外电头条:系统管理员与开发者界限日渐模糊
  3. SA,神仙与装机男:运维的工作到底啥样儿?
责任编辑:yangsai 来源: 外刊IT评论
相关推荐

2010-04-12 09:33:58

系统管理员

2014-06-24 15:38:25

2015-07-16 14:20:44

Docker开发者系统管理员

2010-07-09 12:52:21

2010-08-11 17:11:15

2013-03-30 21:59:13

系统管理员必备工具iftop

2018-08-01 08:12:34

Linux管理员网络管理

2018-08-15 14:00:18

LinuxBash系统管理员

2013-06-26 09:29:30

系统管理员

2013-09-29 09:50:21

系统管理员Ubuntu JujuJuju

2009-05-15 08:45:43

系统管理员程序员脚本

2019-08-13 19:34:45

容器镜像DockerLinux

2010-05-07 16:35:44

2011-06-16 09:35:28

系统管理员iPad应用

2010-04-29 13:46:57

2012-11-01 11:33:11

IBMdw

2010-08-02 09:13:10

系统管理员开源工具链

2015-07-13 14:06:00

系统管理容器技术Docker

2013-02-21 11:13:19

2010-08-10 09:13:52

Unix系统管理员Ubuntu
点赞
收藏

51CTO技术栈公众号