您希望开发人员做些什么?[关闭]


35

作为一名开发人员,我大部分时间都在思考代码,UI,数据结构等,但是(我勇敢地承认)在部署之前,我不倾向于考虑我的应用对系统管理员和DBA的影响。该应用程序。

首先,对不起。其次,您希望我和您处理的其他开发人员会做些什么?哪些事情会使您的生活更轻松,问题更少,鼓励合作并减少崩溃,性能问题和配置噩梦?

Answers:


34
  1. 从第0天开始考虑并建立安全性。
  2. 对所有内容使用版本控制:源代码,文档,配置等。
  3. 文档,文档,文档。
  4. 使用平台本机包装进行全新安装和卸载
  5. 将配置数据与库和可执行文件分开
  6. 支持并行运行不同版本以进行测试和迁移
  7. 健壮的,可配置的日志记录
  8. 轻巧,准确,安全的监控
  9. 应用程序检查点和备份
  10. 您的应用程序如何应对问题:内存不足,文件系统已满,网络中断,配置文件丢失/损坏,时间偏斜?
  11. 始终具有单独的开发,测试和生产环境。使用所有免费的VM软件,没有任何借口!

请记住,您的应用程序可能具有比启动或关闭更多的状态。画一个状态图。大多数应用程序的状态如下:

  • 初始化
  • 复苏
  • 但不接受工作
  • 等候
  • 检查点
  • 处理中
  • 整理起来
  • 关机

想一想如果系统在每个状态下崩溃都会发生什么。系统管理员将如何监视和控制状态转换?


4
哇。状态图的想法真是棒极了。我提名它为当天最酷的答案!
quux

只是个小问题:安全性更多是设计问题。您必须首先定义“安全”在您的上下文中的含义(用户应该做什么,什么是机密等)。否则,几乎没有开发人员可以做...
sleske

17

从SA区分“用户”。

“用户”需要知道如何使用您的软件。用户不在乎诸如如何安装软件之类的东西。

SA不在乎如何使用您的软件,但需要了解有关如何安装软件的一些关键详细信息。

为每个角色分别编写文档,包括与每个角色相关的信息。


3
我认为值得一提的是,管理员应该是网络各个方面以及在其上运行的工作站和应用程序的即时专家。当我们有财务人员问我们如何更新他们的工资单软件时,这很容易,当我们有后勤问题时问我们为什么他们不能做订单,这取决于我们已经确切地知道他们处理流程的内容了订购。我认为关于每个系统实际上如何与对方交谈的文档很容易被遗忘,使我们的管理员显得“愚蠢”,因为我们不知道其工作的复杂细节
bobby

9

我的愿望之一是在异常和错误代码中包含适当的消息。对于没有开发应用程序的人来说,这是完全不透明的JimmyNotAtHomeException: it's late!

但是诸如此类的消息Unable to find jimmy - initial manual call_mother procedure非常有帮助。


2
我同意。请具有多个日志级别并记录日志内容!
克林顿·布莱克莫尔

不幸的是,对于某些公司来说,隐性错误消息是他们向您出售支持合同的业务模型的一部分。他们真的不希望您理解。
knweiss

8

沟通,沟通,沟通。系统管理员和开发人员之间的每个问题几乎总是可以追溯到缺乏沟通。如果在项目之前,系统管理员(或其代表)和开发人员聚在一起并进行了很好的框架讨论,那么可以避免许多问题。我无法告诉您有多少事情被搞砸了,因为您在开发中的一个盒子上开发每个人只是为了看着它在产品中崩溃,因为该应用程序随后被分离到应用程序服务器+ DB服务器+接口服务器等。提出这个话题的荣誉。


8

让我们尽早参与该项目。就像真实的真实早期一样,在功能规格阶段。

其他人提到必须在每台PC上手动安装,但是同样适用于config和config更改。如果您选择在客户端存储诸如连接字符串之类的内容,并且需要定期更新它们,我们可能会想要杀死您

出于同样的原因,选择可以适当地集中管理和配置的技术。确保它与我们使用的任何中央管理工具良好集成。

始终使用最低公分母进行测试。这意味着作为非管理员,在最原始的操作系统上,通常会使用应用程序套件和浏览器平台。我们不希望在最后一刻让所有用户都需要升级浏览器。

事情出了问题时不要责怪我们。在我以前的工作中,每当一个应用程序崩溃时,开发人员都会立即将矛头指向我们。“您安装了新补丁,不会升级浏览器,安全性太严格了”或其他。这产生了破坏性的气氛。的确,我们站在同一边,我们希望与您一起修复它,但在这种情况下我们不能这样做。


希望我能两次投票:-)。
sleske

7

不要成为精英。

“别浪费我的时间,伙计。你只是一个笨拙的系统管理员;写的是软件,而只是为它服务。

开发人员实际上曾经对我说过这些话(1)。在电子邮件中。CC到一个大型通讯组。含义很明显:作为一名开发人员,他是整个软件领域的主人和主人。而我只是一个临时工,被雇用来处理琐碎的工作,以至于他无法浪费自己的宝贵时间。当然,这是一个几乎最坏的例子,但是您知道,在(2)之前和之后,我听到过许多开发人员对此种评论的强烈和微弱的回响。

您可能比我赚更多钱(但不要以为然!)。但是需要一个团队来构建,操作和维护我们用户依赖的系统。最终,我们都为他们服务。

我知道您的工作和技能与我的不同。我尊重你的能力。我希望您即使在您看来基本而又愚蠢的时候也能回答我的问题。我会很乐意回报这个礼貌!

我并没有疯狂地旅行,因为许多坏的(或干脆不关心的)开发人员已经在各种论坛上发表了自己的看法和思想。但是我的担忧与您的有所不同,我的问题和建议也无助于我的自我。确实,我的工作是通过使应用程序始终处于最佳运行状态,可用并响应所有用户的方式来使您看起来更好。为此,我必须使其余的网络和系统也保持最佳状态。

我完全知道您过去曾经遇到过愚蠢,权力疯狂和/或只是普通的懒惰管理员。我试图不成为一个,也不像一个。如果您为这种可能性留出空间,并在看到它时确认它,那么我可以肯定,您会得到所需的东西,而其他混蛋仍然对他们的系统管理员是个混蛋感到困惑。


(1)他还坚持认为他的程序(一种用于编写和管理软件需求的工具)需要具有域管理员权限才能安装和运行。这是主要的安全风险。

(2)我还与许多出色的开发人员合作,他们可以在必要时教书,并在必要时学习。


天哪,白痴。说这话已经够糟糕了,但是在地方周围对其进行
CCCC

同意 那个开发人员确实应该被他们的上级(他们希望也被CC; ;-)彻底地咀嚼掉了。
sleske

6

尊重系统管理员的工作,让他们完成工作。许多公司的系统管理员都不称职,这通常是不现实的。但是我已经看到,即使系统管理员已经证明了他们的能力,傲慢的开发人员也会忽略系统组的建议。

与sysadmins讨论新系统的设计。通常会有宝贵的见解。开发人员经常查看与系统管理员的讨论,并以“过早优化”作为初始要求。我实际上看到一个开发小组的负责人说,浪费他的时间与sysadmin和DBA一起讨论对新数据库服务器的要求,甚至描述它是写密集型负载还是读密集型负载,或者需要多少存储空间。

与系统管理员讨论性能问题。老实说,只有系统管理员才能正确解释系统上的性能指标。我已经看到开发人员认为Linux总是会泄漏内存,因为“ free”报告的可用内存总是会减少,即使在解释了“ free”的输出的第10次之后。

不与系统管理员讨论就不要下结论。我已经看到开发人员陷入了诸如“数据库总是磁盘绑定”(他们甚至不知道iostat)之类的理论,“ RAID 5对于事务性工作负载而言更快”(基于对移动的一个数据库系统的回忆)从一个硬件平台到另一个硬件平台-这是一个读取密集型工作负载,RAID5解决方案在更多控制器上分布了越来越多的驱动器。但是他们忘记了这些细节,只记得结论了。)

在没有与系统管理员讨论的情况下,请不要为系统问题设计解决方案。我在一个病态的环境中工作,开发人员将设计一个解决方案,并要求提供小的实施帮助。Unix小组的负责人和我自己之外的Unix小组的成员以及他的老板,都希望将开发人员视为“客户”,而不是试图使整体基础架构功能正常发挥作用的同事。客户永远是对的,这意味着不质疑他们在做什么或为什么做。我是唯一坚持要描述问题以便能够确定正确解决方案的人。不要以会造成这种病理环境的方式行事。这并不会带来净收益-相反,系统经理将采取防御行动,所有人都会受苦。

你再也不上学了 这些是现实世界的系统,它们无法以理想的方式运行。例如,并非所有内容都具有零延迟。当系统管理员警告您群集解决方案仅出于政治目的,并且系统增加的复杂性降低了整体可靠性时,请认真对待。您必须针对实际的故障模式进行设计,例如,当您丢失要通过TCP与之通信的服务器时,该连接可能不会为您重置。系统管理员了解实际的故障模式。

听您的系统管理员告诉您的内容,或者向管理层投诉您的系统管理员不称职,需要被解雇。忽略系统管理员没有任何意义。

考虑如何部署应用程序。意识到与您的系统管理员进行讨论是有意义的。如果您有100台相同但仅基于单个配置文件而不同的服务器,则可能需要考虑将这些配置文件的主副本存储在中央位置。如果您的应用程序易于重新部署,请认识到每个人的情况要好得多。如果系统出现问题,您是希望在一分钟内将其重新部署为备用设备,还是等待一段时间才能修复损坏的系统?如果您可以重新部署应用程序,则可以更轻松,安全地升级操作系统。您将来可能会在意。

如果您认为可能是操作系统引起的问题,请立即致电sysadmin以进行检查。但是,经过粗略的调查没有发现任何问题之后,您有责任解释该问题。

了解“响应缓慢”和“根本不响应”之间存在区别。


3

以可预测的方式配置和布置事物,并以可预测的方式针对要开发的OS进行更改。这就是一切。例如:OpenLDAP有一种怪异的日志级别方式。某些IMAP服务器甚至没有配置文件,但必须编译选项。一些软件包希望它们的内容位于一个特定的目录路径中,这不可避免地会破坏特定操作系统的约定。这些东西在我通常的配置上均表现为疣。

这是一个总的规则,但是不要以为您很特别,因此有幸打破软件包在您的平台上的一般惯例,除非您的软件有很多充分的理由需要它。“我强烈认为应该如此”还不足以破坏每个人的常规设置。这一定是与您的软件试图执行的功能相关的原因。


3

当应用程序涉及服务器间通信时,请在设计阶段至少包括一名sysadmin。另外,清楚地记录对其他服务的依赖关系:SQL,SMTP,HTTP等...不要让我们猜测您的工作,或者当某些事情无法按预期工作时我们无法为您提供帮助。


3

请使其能够以自动化方式在数十个或数百个系统上部署软件。如果组织需要软件包,则系统管理员几乎可以肯定没有时间在每个盒子上手动安装它。如果文件需要许可信息,则记录如何提供文件将是一个很大的好处。

从历史上来看 Adobe曾经有过一些安装程序,很难使用 ; 请瞄准更高的目标!


2

考虑从第一天开始扩展。系统管理员可以通过在性能问题上投入金钱/硬件来创造奇迹,但是有时这些都无济于事-特别是考虑锁定-有时您无法摆脱锁定问题。谢谢你问:)

哦,并尽可能尝试使用64位,并且也使用多线程:)



2

除了这里的其他一切...

  • 要求一个模拟的生产环境(具有与实时服务器相同配置的开发服务器或VM),然后使用它来测试发布过程。然后,向我们提供此发布过程,包括更改列表和应用更改的顺序(即1.进入维护模式,2.应用SQL更新,3.将源更新为X版本,4.退出维护模式, 5.祈祷)
  • 确保您拥有一种维护模式,可以将用户踢出去以保持数据完整性。您不希望我们在用户登录并执行事务的情况下跨多个服务器运行大型系统更新...多数情况下这是失败的秘诀。
  • 使用某种程度上标准化的开发模型。例如,我们所有正在工作的新应用程序(Web组)都使用Zend Framework。
  • 向我们提供我们可以阅读的变更日志,其中包括已修复的错误列表,我们可以通过这些错误列表来了解变更范围。有时,仅仅因为我们有不同的观点,我们就能发现潜在的问题。

2

尽管不切实际,但如果开发人员在被迫离开世界之前被迫以生产sysadmin或dba角色工作,将会很有帮助。

我处理的许多专业应用程序要么对在托管环境中进行安装一无所知,要么犯了数据库设计的暴行。


完全同意。我是一名开发人员,但是作为管理员工作了几个月,发现它是非常宝贵的经验。它确实扩大了您的视野。
sleske

1

1)详细记录错误的日志文件。或像ELMAH这样的错误跟踪系统。

2)有关安装,实施和SA指南的详细文档。

3)加上上面提到的其他出色的SA。:)

我现在能想到的就是这些。


1

该书发布!有很多关于生产中可能出现问题的恐怖故事。阅读它可以为在设计操作时提供灵感/想法。(这是由Michael Nygard撰写的,他曾在开发和运营方面工作过。)


1
  • 没有规格就不要发展
  • 记录(或确保记录的人准确地记录)
  • 不要害怕为客户提供支持(作为更高级别的支持)

1

以我的经验,最大的影响是开发人员从第一天开始就考虑部署。一旦您开始在生产/客户环境中构思新功能,就开始考虑如何将其部署到生产/客户环境中。环境及其运行方式。

一旦他们进入开发过程,还不算太晚,但是可能需要一些时间才能将观点转移到这么远。他们直到意识到被迫面对代码库时才意识到自己查看代码库的抽象程度。在他们看来,这只是一个“组成部分”。特别令人感兴趣的是如何将其部署到先前存在的环境中,并运行该软件的先前(或更旧的!)版本。部署讨论可能会对如何调整体系结构以适应新功能产生重大影响。


我同意你的评论。作为部署工程师,我在部署过程中会处理大量令人难以置信的复杂性,如果仅凭我的观点,则可能会变得更加简单。
djangofan

0

我喜欢但尚未看到的东西是可配置的。如果您的应用程序使用任何类型的配置文件,请使所有内容均可配置。
在我的公司,我编写了一个简单的应用程序,可以导出一部分数据库。下周,我重写了它,以允许关闭一小部分。从那以后的每个星期,我都不得不重写零件并重新构建它,以更改一个小的功能。我只是勉强添加了一个xml配置文件,现在它可以更轻松地进行重新部署。
我喜欢配置文件。


0

我希望开发人员能够更好地与质量检查任务区分开。我认为当开发人员能够为他/她正在从事的项目创建一些单元测试用例时,这很好,但是如果将这些测试传递给QA,那将是很好的。实际上,当开发人员为质量检查工程师提供一点帮助时,这非常好,因为它最终会使DEV受益。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.