Marklogic 启用审核事件评估将对API流量和群集运行状况产生什么影响?

Marklogic 启用审核事件评估将对API流量和群集运行状况产生什么影响?,marklogic,marklogic-9,Marklogic,Marklogic 9,对于我的一个用例,我需要在已经启用审计的20节点集群中启用eval事件。我想继续启用eval事件,并将审核日志提供给某人,但是,我担心它会对集群造成影响。 它会影响集群健康吗?目前已启用11个事件。审核的影响至少部分取决于应用程序代码的编写方式。如果有很多eval调用,那么它将产生更大的影响,如果eval调用很少的话 如果担心审核评估会对性能产生太大的影响,那么您可以通过仅包括或排除某些用户、组或文档URI来限制审核事件的数量 一如既往,变更应在实施之前进行测试,以确定对生产系统可能产生的影响

对于我的一个用例,我需要在已经启用审计的20节点集群中启用
eval
事件。我想继续启用
eval
事件,并将审核日志提供给某人,但是,我担心它会对集群造成影响。

它会影响集群健康吗?目前已启用11个事件。

审核的影响至少部分取决于应用程序代码的编写方式。如果有很多
eval
调用,那么它将产生更大的影响,如果
eval
调用很少的话

如果担心审核评估会对性能产生太大的影响,那么您可以通过仅包括或排除某些用户、组或文档URI来限制审核事件的数量


一如既往,变更应在实施之前进行测试,以确定对生产系统可能产生的影响。

审核的影响至少部分取决于应用程序代码的编写方式。如果有很多
eval
调用,那么它将产生更大的影响,如果
eval
调用很少的话

如果担心审核评估会对性能产生太大的影响,那么您可以通过仅包括或排除某些用户、组或文档URI来限制审核事件的数量


一如既往,变更应在实施前进行测试,以确定对生产系统可能产生的影响。

我写了以下内容,以提供一种可测量的方法,用于安全、客观地确定怀疑可能影响性能的变更的影响,以及如何隔离问题。其目的是提供一个“行动计划”,该计划应有助于使团队确信,做出这种性质的更改通常是非侵入性的和“安全的”——前提是您有一种方法来验证影响,隔离根本原因,并在任何可能的性能问题失控之前根据需要回滚

一个关键的部分是知道(或通过“有教育意义的猜测”)期待什么,如何寻找它,以及如果你的错误可能会发生什么。 在您的情况下,我的“有根据的猜测”是,在Eval()上启用审核日志对性能的影响可以忽略不计(假设系统当前运行良好,低于其最大容量,日志的卷存储具有可预测的IO速率,系统配置为“标准”等)

审核事件的开销与日志事件大致相同。在大多数情况下,代码路径很简单,绕过了大多数直接写入审核日志的系统代码。在单线程工作负载中,结果应该是确定的和可测量的。虽然您无法轻松获得“每个审核日志”时间(您无法将它们背对背地注入到度量中),但通过查看已知事件(如请求时间)的前后计时,您可以获得相当细粒度的度量。这使您能够根据自己的工作量最终回答问题。对于审核eval,与eval调用相比,我希望开销非常小。(低于0.1%——有根据的猜测)。这取决于您要写入的介质(是否加密)、远程/本地等,以及完成了多少争用和锁定。为什么这么低?Eval语句在设置和删除求值上下文、管理多个事务状态、增加的解析器开销、跨上下文封送值等方面会产生巨大的性能成本。您可以在QCOnsole中轻松地度量这一点。有鉴于此,如果您使用evals,它的“最佳实践”是在相当复杂的操作(即不是1+1)上这样做。与审计日志的开销和IO相比,运行eval的开销是一个速率限制。我猜至少有100倍,更有可能是10000倍——所以我从一个孔中取出了0.1%,我会给你买一杯饮料,如果它的价格超过10^2——应该得到验证,见下文。您可以通过启用一个与非常轻量级的操作相关联的“通用审核日志”,然后在循环中编写一些测试来测试“通用审核日志”的成本。这将为您提供最小的基线,但不应用于其他许多方面——这是不现实的,因此其他因素(如总体性能影响、争用等)的结果不应被视为您的用例将做什么的指标

会出什么问题?即使是一个很小的锁/争用点也会触发系统范围内的并发崩溃——如果该锁恰好位于大量线程的代码路径中,而这些线程只执行该锁——并且它们被“推送”得更快,那么系统就可以执行它们,如果时间安排是这样的,它们都在同一时间反复敲打同一个锁。一般来说,一套骰子可以带你去维加斯发财——通过摇骰子是永远不会发生的。 有时,它总是发生——确切的原因通常在事后很容易确定——但如何预防呢?基础工程——假设、测试、测量

在一个高度并行的应用程序中,同时在多个线程/内核中执行审计日志记录,由于审计日志本身的争用,每次调用的开销会更高。在多大程度上——取决于基于争用程度的高阶,在一个简单的高度并行的情况下,争用可以自发发生——是一个反馈循环。(一个线程阻止写入日志,导致另一个线程阻止等待第一个线程,依此类推)在极端情况下(极不现实,但可能——有意创建并不困难),这可能会通过使用多核来消除大部分或全部性能增益。任何实际应用程序都不可能具备必要的确切条件,但知道这是一种边缘情况对于预测措施非常有用。您可以进行基线测量,然后有意识地进行检查