江苏省建设厅/优化大师有用吗
作者:Alejandro Sánchez
按照这个综合教程学习如何制作个性化的 Rally tracks
ES Rally 是什么?它的用途是什么?
ES Rally 是一个用于在 Elasticsearch® 上测试性能的工具,允许你运行和记录比较测试。
做出决策可能很困难,尤其是当你没有所需的信息并且只能根据过去积极或消极的变化进行猜测或经验时。
如果我们补充一点,数据世界必须是灵活的,因为它发展迅速,因此我们的 Elasticsearch 必须适应它,这个工具将帮助我们能够衡量我们随着时间的推移所做的所有变化和演变,并评估它们的影响 。 最重要的是,我们可以获得做出正确决策所需的信息。
使用 ES Rally
ES Rally 附带了几条开箱即用的 “tracks”。 track 描述一个或多个性能测试场景。
在许多情况下,这些测试可用于评估不同版本的 Elasticsearch 或底层硬件,以及已部署的集群。 然而,在这种特殊情况下,请务必记住,如果集群已经运行并提供流量,则由于并行使用会影响结果,因此指标可能不准确。 然而,给定的值仍然可以用于以后的评估和比较。
此时,你可能想知道是否可以使用 Elasticsearch 集群中已有的自己的数据集。 答案是肯定的。 并非所有优化或改进都只发生在 Elasticsearch 中。 它也可以在数据模型中完成,无论它是不断发展的还是你根据数据使用方式看到的改进。 你可以使用 ES Rally 来衡量这些更改的影响。 接下来我们将展示如何创建你自己的 “track”。
使用你的数据创建你自己的 track
首先,我们来看看先决条件。 ES Rally 可以通过多种方式安装,但以我的拙见,如果我们使用容器发行版,我们将节省时间并使事情变得简单。
另一方面,我们应该考虑磁盘空间。 ES Rally 将下载你指定其下载的索引,因此,如果你正在考虑下载 1TB 索引,则需要牢记这一点。 在这一点上,数据大小确实很重要 —— 俗话说,“不多也不少” —— 所以定义一个有代表性的数据大小很重要。 如果它太小,摄取速度指标可能不具有代表性,但如果它太大,track 的创建时间将会很长。
为此准备数据的一种方法是使用 Elasticsearch Reindex API 和 max_docs 参数来创建一个索引,该索引的大小适合稍后运行的测试。
比如:
Reindex 索引过程可能需要 30 秒以上,因此建议使用 wait_for_completion=false 选项启动它。 这将返回一个任务 ID,你可以使用该 ID 来跟踪流程的进度和完成情况。
注意:目前,ES Rally 在创建自定义赛道时是单线程的。 这是为了避免影响集群或运行任务的计算机的性能。 因此,此过程可能需要一些时间才能完成。 使用 screen 或 tmux 等虚拟终端将允许你在后台运行该进程。
入门
一旦确定了目标索引并且我们确保有足够的空间,让我们开始创建自定义 track(请相应地检查和调整,以避免硬编码密码,我们将使用 read -s 在当时输入它 ):
export loca_path='/path/where/save/esrally'
export user='user'
export track_name='test'
export ssl='true'
export verify_ssl='true'
export indice='test'
export es_host='es:port'
read -s passworddocker run --rm --name esrally \-v ${loca_path}:/rally/.rally/ \elastic/rally create-track \--track=${track_name} \--target-hosts=${es_host} \--client-options="timeout:60,use_ssl:${ssl},verify_certs:${verify_ssl},basic_auth_user:'${user}',basic_auth_password:'${password}'" \--indices="${indice}" \--output-path=/rally/.rally/tracks
我们将得到类似于以下内容的输出:
我们可以通过以下方式看到我们创建的自定义 track:
docker run --rm --name esrally \-v ${loca_path}:/rally/.rally/ \elastic/rally info --track-path=/rally/.rally/tracks/${track_name}
我们得到了什么?
我们来看看ES Rally上线后有什么。 这对于了解要适应什么以及如何有目标地运行未来的测试至关重要。
下图显示了 ES Rally 的默认配置、我们执行的执行日志以及我们创建的自定义 track。
- logging.json:这是我们定义事件如何记录在日志文件中的地方。
- logs/rally.log:这是我们执行 ES Rally 的日志被转储的地方。 默认情况下,该文件不会旋转,因此我们可以配置一个外部工具(例如 logrotate)来执行此操作。
- rally.ini:这是定义 ES Rally 配置的文件。
- track/track_name/:这将包含与我们的自定义 track 相关的文件,在这种特殊情况下:
- name-documents-1k.json:前 1,000 个文档
- name-documents-1k.json.bz2:前 1,000 个压缩文档
- name-documents.json:所有文档
- name-documents.json.bz2:所有压缩文档
- name.json:原始索引的定义(映射和设置)
- track.json:自定义 track 的配置(索引、语料库、时间表、challenges)
通常,我们将用来调整 ES Rally 运行的行为和测试的最相关文档是 rally.ini 以及每个自定义 track name.json 和 track.json。
现在我们有了自定义 track,我们该如何使用它呢?
在不深入讨论的情况下,让我们调整我们已经运行的第一个测试,我们将使用该测试作为基线来衡量集群中未来的变化(假设保留变量以正确执行):
docker run --rm --name esrally \-v ${loca_path}:/rally/.rally/ \elastic/rally race \--track-path=~/.rally/tracks/${track_name} \--target-hosts=${es_host} \--pipeline=benchmark-only \--client-options="timeout:60,use_ssl:true,basic_auth_user:'${user}',basic_auth_password:'${password}'"
这将为我们提供有关执行的信息,但不用担心,它会被保存以供以后使用。
我们使用 benchmark-only 的 pipeline 类型在已经运行的集群上启动它,这就是为什么我们可以看到警告,告诉我们所采取的不同步骤可能具有误导性的指标,此外还可以看到在 track.json 文件的 “schedule” 部分。
最后,指标部分将向我们显示每个 metric 的值。
注意:可以通过配置 reporting 将指标保存到 Elasticsearch。
[...]
要深入了解每一项,我们必须查看官方文档,其中对每一项都有详细解释。 然而,其中许多都是不言自明的,我们将找到与下面的案例最相关的内容。
改变的时刻
此时,我们已经有了自定义 track,并且已经使用 ES Rally 的默认配置以及该索引的原始映射和设置执行了至少一次。
让我们定义一个用例,数据模型优化。 我之所以特别提出这一点,是因为我在许多部署中看到了性能的显着提高和资源的显着节省,甚至对存储节省等基本资源成本也产生了积极的影响。
我知道这个用例可能是一个 challenge,特别是当我们无法控制数据模型时,因为它来自另一个领域或由外部应用程序管理。 但这将使我们能够将数字转化为性能和成本,从而更有效、更有利地、更优化地使用 Elasticsearch。
我的同事 Mattias Brunnert 撰写了一篇关于分析和优化 Elasticsearch 中的存储的博客文章,你可以在其中看到映射(或数据模型)在这方面的影响的示例。 我想强调的是,最佳的数据模型不仅会节省磁盘空间,还会提高摄取速度和查询速度。
因此,利用我们现在所处的位置,探索以下 api _field_usage_stats,它将向你展示如何使用数据。 例如,你可以从 n 个字段的索引映射中看到你正在使用哪些字段以及你没有使用哪些字段。 在此基础上,你可以定义符合你的需求和实际使用情况的新的、更优化的映射。
好吧,我们已经有了用例,我们分析了数据,并且发现我们可以改进自定义 track 中使用的索引的映射,因此我们继续编辑 name.json 文件以使其适应结果 我们的分析。
我们可以找到类似的内容,其中我们看到默认行为,即在推断文本数据类型时生成文本和关键字字段,但在本例中这显然是不正确的。
因此,我们调整了映射并保存了更改以继续重新运行相同的测试。
我们将得到与前一个类似的输出:
评价时刻
现在我们已经执行了两次自定义 track,区别在于映射的优化,我们将比较结果。
首先,正如我们之前提到的,结果存储在我们赋予它们的持久性中:
在这些 JSON 文件中,我们可以单独看到每个测试获得的结果,但 ES Rally 还允许我们比较执行的执行情况。 为此,我们首先列出执行的执行:
docker run --rm --name esrally -v ${loca_path}:/rally/.rally/ elastic/rally esrally list races
并且通过获取 Race ID,我们将执行以下命令进行比较:
docker run --rm --name esrally -v ${loca_path}:/rally/.rally/ \
elastic/rally esrally compare \
--baseline=ID_WITHOUT_CHANGES \
--contender=ID_WITH_CHANGES
这将为我们提供两次执行的比较:
注:这些数据仅供参考,不代表实际值; 它们是在实验室中执行的,数据样本由 100 个文档组成。
使用 ES Rally 优化 Elasticsearch
我们已经了解了如何将 ES Rally 与我们自己的数据集一起使用,如何修改它们以使其适应代表当前或未来情况的场景,以及如何比较和评估它们。 这将帮助我们衡量未来或计划中可能发生的变化,并确定是否会产生积极或消极的影响。 如果我们定期执行负载测试并确定我们距离达到 Elasticsearch 性能的操作或 SLA 限制的程度,那么它对于测量集群的性能也很有用。
ES Rally 可以通过多种方式进行配置,甚至可以以分布式方式执行,以测试大型 Elasticsearch 环境 - 例如,当执行 ES Rally 的单个节点不够或者出现执行瓶颈时。
尽管我们已经了解了如何从 Docker 运行它,但我还是给你留下了一个如何从 K8s 作为作业运行它的示例作为奖励:
想要了解有关 ES Rally 及其用例的更多信息?
我鼓励你查看官方文档或联系我们的咨询团队,以帮助你以最优化的方式在你的组织中使用它,以增加最大的价值。
请记住,数据是决策的关键。
本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。 当前不可用的任何特性或功能可能无法按时交付或根本无法交付。
原文:A step-by-step guide to creating custom ES Rally tracks | Elastic Blog
相关文章:

Elasticsearch:创建自定义 ES Rally tracks 的分步指南
作者:Alejandro Snchez 按照这个综合教程学习如何制作个性化的 Rally tracks ES Rally 是什么?它的用途是什么? ES Rally 是一个用于在 Elasticsearch 上测试性能的工具,允许你运行和记录比较测试。 做出决策可能很困难&#x…...

5分钟JavaScript快速入门
目录 一.JavaScript基础语法 二.JavaScript的引入方式 三.JavaScript中的数组 四.BOM对象集合 五.DOM对象集合 六.事件监听 使用addEventListener()方法添加事件监听器 使用onX属性直接指定事件处理函数 使用removeEventListener()方法移除事件监听器 一.JavaScript基础…...

如何使用IP代理解决亚马逊账号IP关联问题?
亚马逊账号IP关联问题是指当同一个IP地址下有多个亚马逊账号进行活动时,亚马逊会将它们关联在一起,从而可能导致账号被封禁或限制。 为了避免这种情况,许多人选择使用IP代理。 IP代理为什么可以解决亚马逊IP关联问题? IP代理是…...

opencv之cvScalar
CV_INLINE CvScalar cvScalar( double val0, double val1 CV_DEFAULT(0), double val2 CV_DEFAULT(0), double val3 CV_DEFAULT(0)) { CvScalar scalar; scalar.val[0] val0; scalar.val[1] val1; scalar.val[2] val2; scalar.val[3] val3; return scalar; } 该函数的…...

通过 GithubActions 实现自动化部署 Hexo
一、在自己电脑上新建一个文件夹,打开 git bash here,输入以下命令 # 生成秘钥 ssh-keygen -f github-deploy-key之后会生成两个文件, 一个私钥文件为:github-deploy-key; 另一个公钥文件为:github-deploy-key.pub …...

如何快速导出vercel project中的环境变量
我在vercel中集成了某些插件或者链接了数据库,要如何快速的导出这些环境变量呢? 具体方法如下: npm i -g vercelvercel linkvercel env pull .env.local首先是安装vercel然后登录vercel 最后拉取环境变量到.env.local...

Java-8函数式编程设计-Functional-Interface
Java 8函数式编程设计-Functional-Interface 我自己的理解,函数式编程对用户最大的价值是促使开发者养成模块化编程的习惯,代码可读性和维护性提高很多。 通过阅读JDK 8的 java.util.function 和 java.util.stream 包源码,意在理解Java的函数…...

Linux TCP 参数设置
文章目录 Linux TCP 参数设置参考 Linux TCP 参数设置 查询tcp相关内核参数 sysctl -a|grep ipv4|grep -i --color tcp[rootlocalhost ~]# sysctl -a|grep ipv4|grep -i --color tcp sysctl: reading key "net.ipv6.conf.all.stable_secret" sysctl: reading key &…...

Dubbo之消费端服务RPC调用
在消费端服务是基于接口调用Provider端提供的服务,所以在消费端并没有服务公共接口的实现类。 使用过程中利用注解DubboReference将目标接口作为某个类的字段属性,在解析该类时获取全部字段属性并单独关注解析存在注解DubboReference的字段属性。通过步…...

报表控件Stimulsoft 新版本2024.1中,功能区工具栏新功能
今天,我们将讨论Stimulsoft Reports、Dashboards 和 Forms 2024.1版本中的一项重要创新 - 在一行中使用功能区工具栏的能力。 Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinF…...

零样本带解释性的医学大模型
带解释性的医学大模型 提出背景解法拆解方法的原因对比以前解法 零样本带解释性的医学大模型如何使用CLIP模型和ChatGPT来进行零样本医学图像分类用特定提示查询ChatGPT所生成的医学视觉特征描述相似性得分在不同症状上的可视化,用于解释模型的预测注意力图的可视化…...

英文输入法(C 语言)
题目来自于博主算法大师的专栏:最新华为OD机试C卷AB卷OJ(CJavaJSPy) https://blog.csdn.net/banxia_frontend/category_12225173.html 题目 主管期望你来实现英文输入法单词联想功能,需求如下: 依据用户输入的单词前…...

万众一心 · 喜赢未来,2023宇凡微年会暨阳朔之旅
宇凡微 万众一心 喜赢未来 2024宇凡微年会暨阳朔之旅 在一起,做时间的朋友,迈向第一 前言 INTRODUCTION 感恩宇凡微过去七年砥砺路,携手宇凡微未来七年新征程。2024年1月24日~1月27日,宇凡微在广西桂林阳朔举办了以“感恩有…...

【Spring】 AOP面向切面编程
文章目录 AOP是什么?一、AOP术语名词介绍二、Spring AOP框架介绍和关系梳理三、Spring AOP基于注解方式实现和细节3.1 Spring AOP底层技术组成3.2 初步实现3.3 获取通知细节信息3.4 切点表达式语法3.5 重用(提取)切点表达式3.6 环绕通知3.7 切…...

R语言入门笔记2.6
描述统计 分类数据与顺序数据的图表展示 为了下面代码便于看出颜色参数所对应的值,在这里先集中介绍, col1是黑色,2是粉红,3是绿色,4是天蓝,5是浅蓝,6是紫红,7是黄色,…...

PS人像处理磨皮插件
PS人像处理插件 Portraiture 人像照片进行自动磨皮和平滑处理Arcsoft Portrait 3 自动化人像磨皮软件 批量处理功能DR增强插件 含有磨皮滤镜Beautify Panel 高级质感磨皮插件PT Portrait 人像检测自动完成磨皮优化Retouch4me AI智能人能磨皮美容软件 1、Retouch4me_Heal…...

类型转换(C++)
一、C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型 …...

2.23数据结构
单向循环链表 创建单向循环链表,创建节点 ,头插,按位置插入,输出,尾删,按位置删除功能 //main.c #include "loop_list.h" int main() {loop_p Hcreate_head();insert_head(H,12);insert_head(…...

c++笔记理解
1.封装 (1)构造函数不是必须在的 可以通过行为修改属性 (2)private和protected区别在于继承那里要学 (3)类默认是私有,struct是共有 私有的好处:控制数据的有效性,意…...

二进制部署k8s集群之cni网络插件
目录 k8s的三种网络模式 pod内容器之间的通信 同一个node节点中pod之间通信 不同的node节点的pod之间通信 flannel网络插件 flannel的三种工作方式 VxLAN host-GW UDP Flannel udp 模式 Flannel VXLAN 模式 flannel插件的三大模式的总结 calico网络插件 k8s 组网…...

二维矩阵子集的最大值
登录—专业IT笔试面试备考平台_牛客网 正好遇到了 对于一维,我们只需要贪一次 int ans -1E9; int suf -1E9; for (int i 0; i < n; i) {if (i && (a[i] - a[i - 1]) % 2 0) {suf 0;}suf std::max(suf, 0) a[i];ans std::max(ans, suf); } ans就是最大值…...

瑞_23种设计模式_装饰者模式
文章目录 1 装饰者模式(Decorator Pattern)1.1 介绍1.2 概述1.3 装饰者模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析5 总结5.1 装饰者模式的优缺点5.2 装饰者模式的使用场景5.3 装饰者模式 VS 代理模式 &#x…...

使用Python制作进度条有多少种方法?看这一篇文章就够了!
前言 偶然间刷到一个视频,说到:当程序正在运算时,会有一个较长时间的空白期,谁也不知道程序运行的进度如何,不如给他加个进度条。 于是我今个就搜寻一下,Python版的进度条都可以怎么写! 送书…...

SpringBoot-2.7.6基于SLF4J日志门面的日志框架切换
SpringBoot 没有强制性的日志记录依赖项,但 Commons Logging API 除外,它通常由 Spring Framework 的模块提供。 要使用 Logback,您需要将其包含在类路径中。 推荐的方法是您只需要通过启动器,这都取决于 . 对于 Web 应用程序 ,因为它可传递地依赖于日志记录启动器。 如果…...

MongoDB聚合运算符:$binarySize
$binarySize聚合运算符返回给定字符串或二进制数据的字节数。 语法 { $binarySize: <string or binData> }使用 <string or bindData>可以是任何能够被解析为字符串和二进制数据的表达式;如果表达式解析为null,则$binarySize也返回null&a…...

Android的ViewModel
前言 在Compose的学习中,我们在可组合函数中使用rememberSaveable保存应用数据,但这可能意味着将逻辑保留在可组合函数中或附近。随着应用体量不断变大,您应将数据和逻辑从可组合函数中移出。 而在之前的应用架构学习中&…...

Android 圆环带刻度条进度动画效果实现
效果图 需求是根据传感器做一个重力球效果,先实现了动画后续加上跟传感器联动. 又是摆烂的一天, 尚能呼吸,未来可期啊 View源码 package com.android.circlescalebar.view;import android.content.Context; import android.content.res.Typ…...

94. 二叉树的中序遍历
// 定义一个名为Solution的类,用于解决二叉树的中序遍历问题 class Solution { // 定义一个公共方法,输入是一个二叉树的根节点,返回一个包含中序遍历结果的整数列表 public List<Integer> inorderTraversal(TreeNode root) { // …...

汽车信息安全概述
随着智能网联汽车的迅猛发展,车辆不再是简单的交通工具,而是集数据收集、处理与通信于一体的移动智能终端。然而,这一变革也使得汽车成为黑客攻击的新目标。汽车信息安全问题日益凸显,成为行业关注的焦点。本文将深入探讨汽车信息…...

Linux——基础IO
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、C语言IO1、写文件2、读文件3、stdin & stdout & stderr 二、系统文件I/O1、写文件…...