0

我们的商店为十几个客户端安装开发了一些WEB/SMS/DB解决方案。这些应用程序具有一些实时性能要求,并且足以正常运行。问题在于客户端(生产服务器的所有者)正在使用相同的服务器/数据库进行自定义,这会导致我们创建和部署的应用程序的性能出现问题。如何限制客户端修改对生产系统的影响

客户定制的几个例子:

  • 添加大表与许多文本数据类型为的列,得到转换为其他数据类型的查询
  • 没有主键,索引,或FK约束
  • 在脚本循环中使用使用count(*) from table where id = x的外部脚本来确定如何在以后的同一脚本中构建更多查询。 (无批量操作的计划者可以优化或只是做一切在一个单一的通)的服务器上
  • 所有的新代码文件被创建/ root所有,与0777权限

客户端不走建议/批评很好。如果我们继续尝试自己移植/更改脚本,那么旧代码可能会回来,从而破坏我们所做的任何更改!或者对其用例有限的了解,我们会在尝试优化其变更时破坏功能。

我的问题是:我们如何限制资源查询/应用程序,而不是我们创建和部署的内容?这样的场景中是否有任何实用的选择?我们为拥有开放源码软件解决方案感到自豪,但似乎它变成了一项责任。

我们使用PG 8.3在Linux Distos的一个范围上运行。客户端更喜欢使用php,但shell脚本,perl,python和plpgsql都以某种形式在系统上使用。

回答

1

此问题在第一台客户机完全访问第一台计算机后两分钟左右开始,并且自此以后并未消失。任何时候,如果某个人的优先考虑事项很快完成,那么他们就会马虎,对每个人都搞砸了。这就是事情的工作方式,因为正确的设计和实现比廉价的黑客更难。你不会解决这个问题,你所能做的就是弄清楚如何让客户更容易和你一起工作,而不是反对你。如果你做得对,它会看起来像优秀的服务,而不是唠叨。

首先,数据库端。现在有办法在PostgreSQL中控制查询资源。主要的困难是像“nice”这样的工具可以控制CPU使用率,但是如果数据库不适合内存,很可能会导致I/O使用率下降。看到这个developer message总结这里的问题。现在

,如果它确实是CPU的客户端烧穿,可以使用两种技术来改善这种情况:

  • 安装C函数改变进程的优先级(example 1example 2),并确保每当他们运行一些东西时,它会首先被调用(也许把它放到他们的psql配置文件中,还有其他方法)。
  • 编写一个脚本,用于查找由其用户标识生成的postmaster进程并对其进行renice处理,使其经常以cron或作为守护程序运行。

这听起来像你的问题不是他们正在运行的特定查询过程,而是他们对更大结构进行的其他修改。只有一种方法可以解决这个问题:您必须像对待入侵者那样对待客户端,并利用计算机安全领域的这一部分的方法来检测他们是否搞砸了。认真!在服务器上安装入侵检测系统(如Tripwire)(有更好的工具,这只是一个典型的例子),并在触摸任何事物时提醒您。新文件是0777?应该跳出正确的IDS报告。

在数据库方面,您无法直接检测到有用修改的数据库。你应该每天将一个模式的pg_dump写入一个文件中(pg_dumpall -gpg_dump -s),然后将它与最后一个交付的对象进行比较,并在更改时再次提醒您,如果管理得很好,与客户的联系变成了“我们注意到你在服务器上发生了变化......你试图用它来完成什么?”这让你看起来像是在真正关注它们,这可能会变成并且他们可能会立即停止摆弄东西,只是知道你会立即赶上它而已。

你应该立即开始做的另一件事是安装尽可能多的版本控制软件,你可以在每个客户端框。您应该能够登录到每个系统,运行相应的状态/ diff工具安装并查看发生了什么变化。也定期寄给你。同样,如果将模式作为组件管理的内容组合在一起,这种方式效果最佳。没有足够的人对数据库中的代码使用严格的版本控制方法。

这是这里使用的主要技术方法。你所得到的其余部分是一个经典的咨询客户管理问题,这个问题远比计算机问题更为人为问题。振作起来,这可能会更糟糕 - 如果您给予他们ODBC访问权限,并且他们发现他们可以在Access中编写他们自己的查询或者像这样简单的东西,FSM可以帮助您。

相关问题