龙空技术网

搜索引擎新算法DIAMethics小析

青山读文史 177

前言:

此刻我们对“六种查找算法效率比较”都比较讲究,我们都想要学习一些“六种查找算法效率比较”的相关资讯。那么小编同时在网络上汇集了一些对于“六种查找算法效率比较””的相关知识,希望大家能喜欢,小伙伴们一起来了解一下吧!

DIAMethics是谷歌开发的一个新的算法框架,能够用于端到端基准测试和查询引擎性能监控,包括对各种内部查询引擎进行基准测试。它由许多组件组成,这些组件支持自动工作负载汇总、数据匿名化、基准执行、监视、回归识别和警报等任务。

DIAMethics算法工作原理

DIAMethics的体系结构是高度模块化的,能够对具体细节进行抽象化,还能利用通用规范格式和可插拔的软件驱动程序支持多个系统。总体来说,DIAMethics能够支持对生产系统和工作负载进行基准测试,是一个强大的算法统一框架。

DIAMethics有两个主要目标。第一个主要目标是实现基准测试的完全可组合,通过增强算法可重要性,完成大规模的基准测试。第二个目标是针对能够评估查询的内部系统,以及支持这些系统的客户工作负载,实现对它们的完整基准测试和分析。

完成这两个目标依赖于两个关键概念。

第一个是规范交换格式。

对于广泛的抽象概念来说,当两个组件需要通信时,它们通过定义良好的交换格式进行通信,这种形式就被称为规范。

规范依赖于组件,更进一步来说,是组建模块简化了从一种格式到另一种格式的转换。如果组件能够依照规范的模式,那么DIAMethics可以实现“插入”,确保其正常运转。

第二个关键概念是系统驱动程序。

为了与所有支持的查询引擎交互,DIAMethics采用驱动程序,即能够以规范工作负载表示为处理对象,将其转换为每个查询引擎的查询处理请求模块,同时从查询引擎上的查询执行中收集分析指标,将这些指标转换为一个整体框架,最后通过自己的规范分析格式进一步处理。

图2具体展示了DIAMethics如何实际利用规范交换格式和系统驱动程序。

图2

如图所示,在对各种查询引擎和工作负载进行基准测试时,算法需要用到五个组件,即工作负载提取器,查询和数据扰码器,数据移动器,工作负载运行器,系统监视和警报组件。

每个组件都可以作为DIAMethics框架的入口点。例如,有些用户可能不需要创建生产工作负载,因为他们可以通过其他方式随时获得一个,有些用户想使用像TPC-H这样的标准基准。

又或者,用户可能只需要面向相同的查询工作负载,对他们测试不同的存储后端,因此他们只需要使用数据移动器,以此生成相同工作负载的多个实例。

从本质上讲,DIAMethics组件的设计方式就是将它们混合起来,专门针对每个基准测试用例进行匹配。

DIAMethics算法基本原理

谷歌内部查询引擎具有高度可扩展性,每天能够处理来自多个客户的数十亿次查询,包括内部和外部。

例如,在谷歌的运行文件系统Colossus 上的分布式日志系统中,记录了所服务的每个查询,以及许多内部系统特定的信息,虽然每个查询引擎的日志格式不同,但它们能以不同的方式存储有很多共同的信息。

日志条目本质上包含相同的信息,只是以不同的方式呈现。具体来说,DIAMethics的对象是规范化表示的日志条目,查询其对特定文本的描述,这些描述可以被视作其概要文件的特性其值组合。

DIAMethics以用户自定义基准生成的工作负载为基础,利用这种规范化表示来驱动提取和汇总过程。

本质上,工作负载提取器连接到各自的日志系统,提取可能有助于基准测试的所有相关日志条目。然后,汇总器使用该信息,选择这些日志的优化子集,这些日志可以用作自定义的、有代表性的查询工作负载。

但是,这些查询通常基于敏感的用户数据,因此不能用于任何外部应用程序,或者基准测试系统。

为了解决这个问题,用户可以选择使用DIAMethics的数据扰频器来匿名化他们的数据。数据扰码器扫描原始客户数据,并对其应用各种匿名化技术,以确保没有敏感信息泄露到基准数据集。

在最简单的情况下,数据扰频器将独立于其他列的任意排值。这样的排列将确保每列的值分布保持不变,但是跨列的相关性被打破,从而降低了泄露的可能性。此外,扰频器可能会通过散列、将它们映射到不同的域,或添加少量噪声来进一步混淆值,从而使结果数据集具有大致相同的统计属性,但分布在不同的值上。

最后,根据用户的基准测试用例,他们可能会选择在各种存储层,或不同的文件格式上比较基准测试。

DIAMethics自带的数据移动工具允许算法的准备基准,以便在各种后端上执行,从而使用户能够全面了解其执行模式。

无论数据是来自DIAMethics提取还是由用户提供,一旦查询和数据被存储在正确的位置,DIAMethics会就部署一个工作负载运行器,它读取一组描述执行参数的配置文件,以具有指定执行约束的指定系统基点,自动运行基准测试。

在DIAMethics的模块化原则上,算法允许用户编写可插拔的配置,也就是说,以相同的系统配置来说,它可以用于一组不同的基准测试。

通过定义这些配置,用户可以确定基准测试的参数。例如,他们可以决定是在生产服务器上运行基准测试,还是使用不同的系统设置单独运行基准测试。

同样,他们也可能选择TPC-H工作负载的通用执行和平台优化版本,以检查查询优化器做出的选择。在所有的基准测试执行中,DIAMethics都遵循标准的实验过程,为了提供真实的结果,算法允许用户多次重复测试,即执行相同的工作负载和系统配置。

最后,端到端工作流程的最后一步是对执行结果的解释。DIAMethics的监控组件为框架用户提供了操作选择,允许用户轻松地解释基准测试的历史结果。这项操作选择会定期出现,在出现新的执行结果时,算法还能自动更新其操作选项。

如果需要,用户还可以使用警报,这样在执行模式与之前观测值或预期模式不同时,他们可以第一时间获得通知。

在谷歌内部对不同系统进行基准测试,DIAMethics允许用户在几分钟内设置自动基准测试,无需担心执行可重复基准测试的具体实现细节。从本质上讲,这项算法可以在谷歌内部实现高效和一致的大规模基准测试。

DIAMethics算法工作流程

DIAMethics算法工作流程包括工作负载器、数据和查询扰频器、数据转移器、工作负载运行器、系统监控和警报。

首先是工作负载器。对任何系统进行基准测试来说,定义适当评估系统的基准都是一个主要问题。

实际上,在不同的时间段,单个系统经历的工作负载可能会有多种类型。例如,当用户在探索模式下使用数据库时,对于大多数查询来说,它们可能是长时间运行的资源密集型分析查询,可能是用于记录检索的单点查找查询。

在不同类型的应用程序中,用户可以在系统中定义不同查询的类型,这里的用户可以是单人也可能是多人。

传统上,系统的部署是为不同的应用程序需求量身定制的,针对预期要评估的查询类型,每个系统的部署都进行了特别优化。

然而,随着向分布式、大规模、联合和云端系统部署的转变,完全控制系统架构的优势不再存在。查询引擎被简单地视为一个端点,其功能需求也转化为,在不需要用户优化的背景下,完整地处理用户的查询操作。

因此,查询引擎服务商需要同时满足不同的需求,这使得开发商们必须新创建一种方法,用来测试系统在用户工作负载上的性能。

对于关系系统,现在已经有了诸如TPC-H、TPC-C或TPC-DS之类的基准,这些基准主要将关系工作负载划分为OLTP和OLAP,而对于用户的特定混合工作负载,至今为止仍没有代表性的基准。

而DIAMethics不仅能处理标准化的基准测试,还能处理特定于用户的基准测试。这种算法能将用户的工作负载压缩,使其成为一小组有代表性的查询,然后将这些压缩查询作为基准测试工作负载。

要创建特定于用户的基准,首先需要提取日志条目,之后将其转换为规范表示,这种表现需要包含驱动摘要所需的特性。

特性可以是表征查询细节的任何东西,这些细节对基准的创建十分有用。DIAMethics支持两种类型的特性,即语法特性和分析特性。

一方面,算法可以通过解析查询来提取语法特性,例如,查询语句中的连接数或查询中使用的聚合函数。另一方面,性能分析特性可能包含诸如查询延迟、CPU使用情况,以及读写到磁盘的数据量等特征。

在数据和查询扰频器流程方面,为了完善基准测试,除了找到一组具有代表性的查询来执行测试之外,算法还需要确保用于这些基准测试的数据具有代表性。

从这个角度来说,数据集的选择将驱动存储和查询处理决策,而数据集的选择取决于正在执行的查询模式、存储后端、数据的复杂性和数据值分布。

数据扰频器是解决代表性数据问题的一个步骤,它提供了一种简单而有效的方法,即使用生产数据进行查询基准测试。这样做的目的是提供一种工具,允许用户快速清理代表性的生产数据集,以便他们能够利用清理后的版本,使用实际的生产查询来进行性能基准测试。

一旦工作负载摘要确定了代表工作负载的查询,DIAMethics就可以使用这些查询处理的输入,对生产数据进行快照,使用该快照构建输入数据的版本,最后用于基准测试。

这项工作流程并不总是直截了当的,主要是因为生产数据可能包含敏感的字段和值等等,导致它们不应该用于基准测试目的。

在数据扰频器中,DIAMethics会打破值之间的相关性,通过对数据的值进行散列来混淆它们,从而保护数据,或者通过在数据中加入少量的噪声,保证分布不会发生明显的变化,这样在很大程度上就能解决这个问题。

虽然扰频器没有提供关于隐私的正式保证,但它确实可以以合理的方式更改输入数据,这让它足以在安全的环境中进行性能基准测试。

数据移动器则充当了格式之间的中介。数据移动器的工作原理是,通过转换相同的输入源以适应不同的存储后端,为DIAMethics提供从相同工作负载生成多个基准测试的能力。

数据移动器试图保存的其他信息则是分片信息,例如,分片的数量和分区方案,输入存储属性和数据定义属性等,通常,如果没有保存输入数据集中的优化,那么可能会影响存储后端的性能。

如图3所示,一旦数据移动发生,输入工作负载将被重写,以便使用新生成的数据源,而不是使用原始输入源。

图3

DIAMethics的基准执行组件是工作负载运行器。运行器接受多个执行配置作为输入,每个执行配置包含四个要素。

第一个要素是用于基准测试的系统及其配置,第二个要素是多项基准配置,第三个要素是可供基准测试的工作量数目,第四个要素是警报,如果在运行基准测试时检测到任何问题,将触发许多警报配置。

工作负载运行器以每个基准配置和每个系统配置为基础,在它们之上分别部署工作负载来运行每个执行配置。

DIAMethics的元数据数据库中配备有配置存储。当工作负载运行器被请求处理执行配置时,配置存储会确定元数据数据库中该配置的细节,检索它引用的所有必需的系统、基准测试、工作负载和警报配置。

接下来,运行者可以部署一个中间编排器来配置系统和基准测试、运行查询、保存它们的分析指标,并评估任何潜在的警报,如图4所示。虽然默认执行是按一定顺序的,但工作负载运行器还提供了不同程度的并行性。

例如,运行器可以一次性发送所有目标系统的相同工作负载,但在系统内,为了有更好的信息隔离性,工作负载运行器可以被设置为顺序发出查询。

图4

在工作负载运行器执行工作负载之后,信息将被导出到特定于DIAMethics的日志中,这些日志可以允许用户通过结果可视化监视基准性能,也可以实现自动监视性能退化并发出警报。

系统监控是DIAMethics的核心目标,因为它可以帮助用户跟踪系统的性能。同时,对于系统开发人员来说,它也可以帮助跟踪相同工作负载的增量变化,因为对他们来说,观察可视化代码库的变化是否改善了系统性能是很有用的。

DIAMethics会自动检索工作负载运行器生成的日志,使用记录的分析指标进行可视化。

具体来说,算法使用静态列表来可视化一段时间内的工作负载执行情况,包括基本统计数据,包括延迟、CPU时间、溢出字节等,以及被执行的系统捕获,或者其他任何被客户端认为重要的指标。

图5a显示了一个在相同基准下,对不同系统执行时间进行性能跟踪的示例。

图5

这个例子观察三个不同系统的执行,其中一个是在两种不同的系统设置下执行的。同时在十天的时间内跟踪它们的性能,并报告平均执行时间。主要监控聚合指标则是延迟几何平均值,如图5a所示,但这并不是DIAMethics底层监控的唯一功能。

标签: #六种查找算法效率比较