每个程序员应该知道什么系统pipe理员?

作为程序员,我们倾向于把系统pipe理员视为理所当然。 几次我没有一个好系统pipe理员真的让我很欣赏你们做什么。 当我们冒险进入一个没有系统pipe理员的环境时,你能给我们什么样的智慧呢?

    我会开始:

    1. 总是有一种备份系统。 如果有历史就更好了。
    2. 考虑单点失败,如果失败,如何处理。
    3. 根据所涉及的计算机数量,寻找通过计算机制作和创build标准映像的方式将使每个人的生活变得更加简单 – 没有“它在我的工作”,因为他们有这样一个程序不正常安装。
    4. logging一切,如果只是因为你忘记你如何设置的东西。
    5. 随时了解安全更新。

    <在此插入大post声明>

    其中一些已经被说过,但值得重复。

    文档:

    • logging一切。 如果你没有,请安装一个雷达下的维基,但要确保你已经备份了它。 从收集事实出发,总有一天会形成一个大局面。

    • 为每个逻辑块创build图表并保持更新。 我无法计算准确的networking图或集群图为我节省的次数。

    • 保持每个系统的构build日志,即使它只是复制和粘贴命令来构build它。

    • 在构build系统时,安装和configuration您的应用程序,testing它的工作原理并执行基准testing。 现在,擦拭磁盘。 认真。 “dd”是磁盘前面的第一个兆字节,否则会导致无法启动。 时钟滴答作响:certificate你的文档可以从头开始重build(或者,更好的是,certificate你的同事可以只用你的文档)。 这将形成灾难恢复计划的一半。

    • 现在,您已经完成了灾难恢复计划的前半部分,logging下其余部分; 如何让应用程序的状态恢复(从磁带恢复文件,从转储中重新加载数据库),供应商/支持细节,networking要求,如何以及在哪里获得更换硬件 – 任何你能想到的将有助于你的系统备份。

    自动化:

    • 尽可能地自动化。 如果你必须做三次,那么确保第二个花费在开发自动化上,所以第三个完全自动化。 如果你不能自动化,请logging下来。 那里有自动化套件 – 看看你能不能让它们为你工作。

    监控:

    • 应用仪器是纯金。 能够观察通过系统的交易使得debugging和故障排除变得更容易。

    • 创build端到端的testing,不仅certificate应用程序是活着的,而且真正做到了应有的。 如果可以插入监控系统以提醒用途,则分是您的。 这是双重责任; 除了certificate应用程序的工作,它使系统升级更容易(监测系统报告绿色,升级工作,回家的时间)。

    • 基准,监测和收集一切都理智的指标。 基准告诉你什么时候能期待什么东西会冒出魔法烟雾。 监控告诉你什么时候有。 指标和统计数据使得通过pipe理获得新的工具包(使用新鲜的魔法烟雾)变得更加容易。

    • 如果您没有监控系统,请实施一个。 奖励积分,如果你真的把杰克上面的端到端testing到它。

    安全:

    • “chmod 777”(又名授予所有访问权限)永远不是解决scheme。

    • 订阅“最低限度”的原则; 如果没有安装,复制或以其他方式存在于磁盘上,则不会受到威胁。 “厨房水槽”操作系统和软件的安装可能会使build设阶段的生活更轻松,但你最终付出了代价。

    • 知道服务器上的每个开放端口是什么。 经常审核,确保没有新的出现。

    • 不要尝试清理受感染的服务器; 它需要从头开始重build。 使用新下载的介质重build到备用服务器,仅从备份中恢复数据(因为二进制文件可能会受到损害),或者将受感染的主机克隆到某处进行分析,以便在同一套件中进行重build。 在这方面有一个完整的法律噩梦,所以如果你需要寻求法律途径的话,那么在保护方面就会犯错。 (注:IANAL)。

    硬件:

    • 永远不要假设任何事情都会按照盒子上所说的去做。 certificate它做你所需要的,以防万一。 你会发现自己比所期望的更频繁地说“它几乎工作”。

    • 不要吝啬远程硬件pipe理。 串行控制台和灯光pipe理应视为强制性的。 在超出选项的情况下,远程控制配电盘的奖励分数。

    (另外:有三种方法可以在凌晨三点解决问题,一种是温暖的,一种是通过睡衣上的VPN在笔记本电脑上工作,另一种是厚厚的外套和数据中心/办公室的驱动器,我知道哪一个是我的喜欢。)

    项目pipe理:

    • 从项目生命周期的第一天开始就将涉及到维护系统的人员。 成套工具和大脑时间的交付时间可以而且会出乎意料,毫无疑问,他们将(应该)具有将成为项目依赖性的标准或要求。

    • 文档是该项目的一部分。 项目closures后系统已经开始维护,你永远不会有时间把整个事情写出来,所以要确保它在开始的时间表中包含在内。

    • 在项目文档中指定的closuresdate前六个月,开始执行刷新周期。

    当服务器适合在生产环境中使用时,它们具有确定的生命周期。 这种生命周期的结束通常被定义为每当维修人员开始在年度维护中收取更多费用时,比刷新套件花费更多,或者大约三年(以较短者为准)。 在这段时间之后,他们对于开发/testing环境非常好,但不应该依靠他们来运行业务。 在2年半的时间重新审视环境,让您有足够的时间跳过必要的pipe理和财务环节,以便订购新套件,并在将旧套件发送给天空中的大型供应商之前实施平稳迁移。

    发展:

    • 确保您的开发和分期系统类似于生产。 虚拟机或其他虚拟化技术(区域,LDOM,虚拟服务器)可以轻松实现真正意义上的但性能的生产克隆。

    备份

    • 你没有备份的数据是你不想要的数据。 这是一个不变的法则。 确保你的现实符合这一点。

    • 备份比他们看起来更难; 一些文件将被打开或被locking,而另一些文件则需要被静止以寻求恢复,所有这些问题都需要解决。 一些备份软件包有代理或其他方法来处理打开/locking的文件,而其他软件包则不能。 将数据库转储到磁盘并将这些数据作为“静止”的一种forms进行支持,但这不是唯一的方法。

    • 备份是没有价值的,除非他们经过testing。 每隔几个月,从存档中取出一个随机磁带,确保它实际上有数据,并且数据是一致的。

    而最重要的是…

    select你的失败模式,或墨菲会…墨菲不按你的时间表工作。

    devise失败,logging每个系统的devise薄弱点,触发它们以及如何恢复。 当一些事情出错的时候,它会有所作为。

    不要以为轻松。 我认识很多程序员,他们认为只是因为他们可以在那里设置IIS或Apache dev box,他们可以运行一个networking农场。 了解工作涉及到什么,并进行研究和规划,不要以为系统pipe理员的工作是十分钟内完成部署应用程序的简单工作。

    • 意识到,无论好坏,许多服务器和/或networking设备往往都像第二个家庭的孩子一样。 这些是他们的宝贝。 他们倾向于他们,生病时帮助他们,并警惕地监视他们的麻烦。 这不应该是这样,但多年后, 往往是这样 。 记住这一点,因为你向他们传达你对设备运行不正常或期望值的担忧。 如果你得到一个你不明白的答复,试着通过这个世界观来过滤它。
    • 保持良好的工作条件。 听起来很舒服,但是它的价值体现在黄金上。 有一天,你需要一些特殊的好处。 总有一天,系统pipe理员会乐意为了让您的生活变得轻松一些,就是这一次。
    • 这种工作关系是双向的。 如果系统pipe理员非常繁忙,而且通过编写一个小脚本或程序可以使生活变得轻松一些,那就做吧! 他们会比你知道的更感激。
    • 非常清楚。 “这个糟糕透顶”并不像“间歇性的networking连接有点烦人,你有什么机会可以看看吗?
    • 如果你认为你的应用程序将会扩展,那么在设定之前询问pipe理员。 他们可能会“看到”你不知道的东西,或者知道你要部署的设备的性能限制。
    • 如果您的应用程序需要调整,但似乎不是代码问题,请仔细询问服务器的性能。 系统pipe理员倾向于关心他们的机器,并且在他们“生病”或“行为不端”时不高兴。 很好地询问会变成一个病态的机器(或修理/更换)。
    • (如别处所述)logging您使用的设置,以及为什么使用它们。 只要有“设置checkboxX”或“取消注释configuration文件行Y”没有帮助。 您可以设置在下一次重新启动时擦除所有数据的选项。
    • 如果您没有时间在纸上logging设置,请尝试在可能的情况下将其logging在系统中。 使用configuration文件,这应该几乎是标准做法 – 每个设置更改都应该打上date戳,其中包括首字母,该设置的预期效果以及更改的原因(请参阅前面的重点)。 这个小习惯在紧要关头不止一次地拯救了我的培根。 “为什么我们这样做? “因为我们规定了X政策,而规定Y给了我们X政策所需要的行为”。
    • 啤酒。 或者可乐。 甚至水。 饮料总是受欢迎的。 作为一个系统pipe理员是口渴的工作。

    安全不是事后的想法。 虽然被黑客攻击的应用程序可能会使程序员看起来无能为力,但是至less在丢失的周末中,系统pipe理员正在使用备份进行validation,清理和/或恢复。

    对于这个问题,不要把备份视为版本控制。 他们是为了灾难恢复,并没有真正的devise来恢复你的代码,因为你忘了你改变了什么。

    并停止盲目地指责Windows更新为您的代码被破坏。 我不在乎它是否奏效,告诉我为什么它现在不起作用 – 那么我们可以看到它是谁的错。

    如何debuggingnetworking问题,并观察您的程序与系统pipe理员工具运行。 作为一个开始进行系统pipe理的程序员,我感到惊讶的是,许多程序员在networking“停止”之后变得无能为力。

    • Wireshark ,观察您的代码以黑匣子的方式逐个分组地运行
    • 直接连接到networking服务的工具:
      • Telnet,netcat或socat ,通过TCP或UDP进行简单连接
      • OpenSSL的encryption相同的事情(提示:尝试openssl s_client -connect target-host:port有时),手动连接到networking服务
    • 挖(在BIND 9包)debugging名称parsing
    • 能够根据连接失败的时间和其他特征来判断networking堆栈的哪一部分失败
    • 可能是HTTPFox和/或Firebug

    知道如何解决问题。

    推卸责任是非常容易的(例如,你的networking正在与我的数据库沟通)。 这可能是networking的错误,但是你应该有错误的应用程序日志,使用Google或SO,可能会在应用程序的configuration中发现问题。

    每个人都喜欢责怪硬件,操作系统或networking,所以如果你多做一点尽职调查,你会让系统pipe理员成为一个快乐的人。 因为,如果没有别的,你可能会指出他们在一个特定的方向,可能是什么错误(而不是说“你的networking吮吸”或什么相同的帮助)。

    logging你所能做的一切。 不能告诉你最后一个系统pipe理员有多less次认为不logging“工作安全”或者某人想进出的东西是可爱的。 就像程序员应该留下好评,系统pipe理员应该logging下来。 拓扑图也不错。

    计划B.

    在devise和开发解决scheme时,始终要考虑灾难恢复计划。 识别可能导致停机的单点故障。

    文档:不必疯狂,但应用程序是如何工作的,一个图表显示了这些位如何安装,以及在出错时testing每个组件的方法。 示例数据和输出是很好的。

    要求:它依靠什么模块? 版本? OS?

    监测:理想情况下开发人员将包括监测信息和testing与应用程序。

    说到包装,包装! 没有什么比“部署”更糟,这意味着从VCS中检出文件的新版本并将其复制到一堆服务器上。 程序员经常不喜欢部署软件的复杂性:为什么版本化的打包软件是大多数操作系统的骨干。

    如果一个开发者来到我这里,第一次安装了一个简洁,全面的文档和一些Nagiostesting的RPM,他们会成为我最好的朋友。

    我感到惊讶的是,迄今为止在这里给出的17个答案中,没有一个包括确保您的应用程序以标准用户身份login时运行的任何内容。

    除了安装过程,使用标准用户帐户login应用程序应该运行良好。

    备份备份备份….testing备份….始终准备好回滚

    这可能只适用于初学程序员,但是我和一些程序员一起处理每个项目的一些事情。

    1. “它在我的机器上运行”并不是一个有效的说法。 程序员有责任创build一个在服务器上使用的安装程序,或者至lesslogging服务器上需要的每个连接,dll和加载项。

    2. (我已经多次听到过,所以请不要笑)我从我的机器运行在服务器上的EXE,它的工作原理。 但是,当我在服务器(思杰,terminal服务器等)上运行它不起作用。 请理解dll和ocx以及您的程序需要的任何内容,以及它们在哪里以及如何注册,以及程序如何使用它们。

    这些看起来很简单,但我经常处理它。

    布赖恩

    • 正式和非正式地与你的pipe理员谈论你在做什么。 他们通常会感兴趣的,可以在早期expression对生产的可能影响。 您不必同意,但它有助于识别故障点。
    • 不,你不能把整个服务器都交给你自己…如果你需要,这是一个政治决定,不pipe技术上是怎样的。 如果你想工作的政治,走在前面。
    • 生产硬件通常看起来与开发服务器不同,即使在农场内,机器上的规格也是不同的。
    • 了解如何设置生产,因为您可能无法在桌面上复制它,这样做会妨碍您做出错误的假设。
    • 仅仅因为你可以caching内存并不意味着你应该首先等待瓶颈(在unit testing或预生产性能testing中)
    • 如果将数据粘贴到数据库中,请考虑如何将数据拆分为只读数据(可以水平缩放)和读写数据(通常只能垂直缩放)。
    • 如果您将数据粘贴到数据库中,则必须真正成为RDBMS? 还有其他的键值对系统比较好(netcache)。
    • 不要以为AJAX是最终的解决scheme,它看起来很酷,但是它限制了监控和自动化的可能性。 我不是说不用它,只是三思而后行。

    好吧,这有点咆哮,但是:

    a)编码时,假定基础设施可能失败,而不是来自快乐永远在陆地上。 或Google。

    b)我们可能没有足够的资源来执行你所读过的基础设施,所以当事情发生的时候,要轻松一点。 我们很可能知道需要做什么,但是无论出于何种原因,它还没有发生。 我们是你的伙伴!

    c)就像上面说的jhs一样,如果你熟悉工具来排除基础设施故障,比如ping,traceroute(或者两者兼而有之),挖掘等等,那么真的会有帮助。甚至可以知道Wireshark。

    d)如果你编程一台计算机,你应该知道它是如何连接到networking和基本的,比如能够parsingipconfig / all或者ifconfig的输出。 您应该能够以最less的帮助启动和运行Internet连接。

    否则,我认为艾利非常注意它。 谁做一个小系统pipe理员的开发人员是值得他们的黄金重量! 但同样,理解开发者如何去做(包括版本控制等)的系统pipe理员在这个时代是非常重要的。

    这似乎是在目前的空气,我已经注意到更多关于在博客dev / ops关系的讨论 – 检查

    保持Twitter的Twitter

    分隔和战争

    在操作中首先testing

    没有哪一个组织或者function比另一个更好,也不需要“更大的脑”。 我已经看到双方在对方公司中都performance得很明显 – 你们都试图达到同样的目标 – 关注这些相似之处,而不是使用不同的工具。

    基础设施架构师变成了程序员,可能想在未来回滚那个事务:)

    1. 早,经常互相交谈。 与那些将pipe理你的应用程序将被部署的基础架构的人一起审查devise(如果你知道这是谁的话)。
    2. 零数据丢失是可能的,但这是开发人员和系统pipe理员共享的责任。 再次,互相交谈在这里可能会有所帮助。
    3. 您的基础架构人员应该参与确定非function性需求。
    4. 安排啤酒(工作完成时)和披萨(当我们正在工作)。 不知何故,这种食物的存在会影响我们的能力,使我们可爱的小32 cpu盒做你想做的任何事:)

    作为开发人员的系统pipe理员,以及我自己的开发人员,这里给出的build议不仅是黄金,而且应该成为全新公司的新开发人员的招聘文档的一部分。

    我还没有看到(尚未解释)的东西是,开发者真的应该知道他们将用来创build他们所付费用的程序的产品。 我必须解释和configurationapache服务器,eclipse和Visual Studio的次数以及开发者机器上的数据库有点令人担忧。