2.5.5 动作引擎 虽然这是数据导向的系统管道的核心,但它却最简单。一旦度量和值的系统是已知的,基于已知等式的系统将决定是否执行一组确定的动作,这些动作以提供的信息为基础。虽然基于阈值的触发是最常见的实现,但目前出现了一种概率方法,它可向用户呈现可能性和相关性,或者可以像搜索引擎那样向用户提供前N个相关的选择。 这会涉及规则管理。人们常用规则引擎(如Drools,http://www.drools.org)来管理规则。但管理复杂规则常常需要开发DSL(Domain-Specific Languages by Martin Fowler, Addison-Wesley, 2010)。Scala非常适合开发这种动作引擎。 2.5.6 关联引擎 决策系统越复杂,就越需要一个次级决策系统来优化它管理。DevOps正在变成DataOps(Getting Data Right by Michael Stonebraker et al., Tamr, 2015)。在数据驱动系统上收集到与性能相关的数据通常用于异常检测和半自动维护。 模型经常会漂移,其性能可能由于数据收集层的变化或群体的行为变化而恶化(将在第10章讨论模型漂移)。模型管理的另一方面是跟踪模型性能,在某些情况下,可通过各种共识方案来使用模型的“集体”智慧。 2.5.7 监控 监控系统会收集用于审计、诊断或性能调整的系统性能信息。虽然它与前面几节提出的问题相关,但监控解决方案往往包含诊断和历史存储的解决方案,以及关键数据(如飞机上的黑匣子)的持久性。在Java和Scala中,一种流行的工具是Java性能bean,它可以在Java控制台中进行监视。Java本身支持MBean,并用它来获取基于JMX的JVM信息。Kamon(http://kamon.io)是一个开源库,它也使用此机制来获取Scala和Akka度量。 Ganglia(http://ganglia.sourceforge.net/)和Graphite(http://graphite.wikidot.com)是另外一些流行的开源解决方案。这里不再介绍,因为第10章会对系统和模型监控进行更为详细地介绍。