停止项目大小调整,开始搜索层自动缩放!

news2024/9/22 23:28:32

作者:来自 Elastic Matteo Piergiovanni,John Verwolf

我们新的 serverless 产品的一个关键方面是允许用户部署和使用 Elastic,而无需管理底层项目节点。为了实现这一点,我们开发了搜索层自动扩展,这是一种根据我们将在本博客中深入探讨的大量参数动态选择节点大小和数量的策略。这项创新确保你不再需要担心资源配置不足或过度配置。

无论你处理的是波动的流量模式、意外的数据峰值还是逐渐增长,搜索层自动扩展都会根据搜索活动无缝地将分配的硬件动态调整到搜索层。自动扩展是按项目执行的,对最终用户完全透明。

简介

Elastic serverless 是 Elastic 推出的一款完全托管产品,它使你无需管理底层 Elastic 基础设施即可部署和使用 Elastic 产品,而是专注于最大限度地利用数据。

自我管理基础设施面临的挑战之一是应对客户不断变化的需求。在动态的数据管理世界中,灵活性和适应性至关重要,而传统的扩展方法往往不够完善,需要手动调整,这既耗时又不精确。借助搜索层自动扩展,我们的 serverless 产品会自动调整资源以实时满足你的工作负载需求。

本文中描述的自动扩展特定于 Elastic serverless 产品中的 Elasticsearch 项目类型。可观察性和安全性可能具有针对其独特要求量身定制的不同自动扩展机制。

在深入了解自动扩展的细节之前,还需要了解另一个重要信息,即我们如何管理数据以实现强大且可扩展的基础设施。我们使用 S3 作为主要事实来源,提供可靠且可扩展的存储。为了提高性能并减少延迟,搜索节点使用本地缓存来快速访问经常请求的数据,而无需反复从 S3 检索数据。S3 存储和搜索节点缓存的这种组合形成了一个高效的系统,确保持久存储和快速数据访问都能有效满足用户的需求。

搜索层自动扩展输入

为了演示自动扩展的工作原理,我们将深入研究用于做出扩展决策的各种指标。

在启动新的 serverless Elasticsearch 项目时,用户可以选择两个会影响自动扩展行为的参数:

  • 增强窗口:定义搜索数据被视为增强的特定时间范围。
    • 增强数据:在增强窗口内的数据被归类为增强数据。所有在增强窗口范围内具有 @timestamp 的基于时间的文档以及所有非基于时间的文档都将属于增强数据类别。这种基于时间的分类允许系统在分配资源时优先考虑这些数据。
    • 非增强数据:增强窗口之外的数据被视为非增强数据。这些较旧的数据仍然可以访问,但与增强数据相比分配的资源较少。
  • 搜索能力:控制分配给项目中增强数据的虚拟计算单元 (virtual compute units - VCU) 数量的范围。搜索能力可以设置为:
    • 成本效益:限制增强数据的可用缓存大小,优先考虑成本效益而不是性能。非常适合希望以低成本存储大量数据的客户。
    • 平衡:确保所有增强数据都有足够的缓存,以便更快地进行搜索。
    • 性能:提供更多资源,以更快地响应更大容量和更复杂的查询。

增强窗口将决定项目的增强数据和非增强数据量。

我们将项目的增强数据定义为增强窗口内的数据量。

增强数据的总大小以及所选搜索能力范围的下限将决定项目的基本硬件配置。这种方法比扩展到零(或接近零)更受欢迎,因为它有助于保持后续请求的可接受延迟。这是通过保留我们的缓存并确保 CPU 可立即用于处理传入请求来实现的。这种方法避免了与从 CSP(cloud server provider) 配置硬件相关的延迟,并确保系统随时准备及时处理传入请求。

请注意,基本配置可以通过提取更多数据而随时间推移而增加,如果时间序列数据超出增强窗口,则基本配置会减少。

这是自动扩展的第一部分,我们提供了一个基本硬件配置,可以随时间推移适应用户的提升数据。

基于负载的自动扩展

基于交互式数据的自动扩展只是难题的一部分。它不考虑传入搜索流量对搜索节点造成的负载。为此,我们引入了一个名为 “search load -搜索负载” 的新指标。搜索负载是处理当前搜索流量所需的物理资源量的度量。

搜索负载考虑了搜索流量在给定时间对节点造成的资源使用情况,因此允许动态自动扩展。

什么是搜索负载?

搜索负载(search load)是处理当前搜索流量所需的物理资源量的度量。我们将其报告为每个节点所需的处理器数量的度量。但是,这里有一些细微差别。

在扩展时,我们在具有设置值的 CPU、内存和磁盘的硬件配置之间上下移动。这些值根据给定的比率一起缩放。例如,为了获得更多 CPU,我们将扩展到具有更多内存和更多磁盘的硬件配置的节点。

搜索负载间接考虑了这些资源。它通过使用搜索线程在给定测量间隔内所花费的时间来做到这一点。如果线程在等待资源 (IO) 时阻塞,这也会增加线程的执行时间。如果除了排队之外,所有线程都 100% 利用率,则表示需要扩大规模。相反,如果没有排队并且搜索线程池的利用率低于 100%,则表示可以缩小规模。

如何计算搜索负载?

搜索负载由两个因素组成:

  • 线程池负载:处理正在处理的搜索流量所需的处理器核心数。
  • 队列负载:在可接受的时间范围内处理排队的搜索请求所需的处理器核心数。

为了描述如何计算搜索负载,我们将逐步介绍每个方面以解释基本原理。

我们将从描述线程池负载(Thread Pool Load)开始。首先,我们监控负责在采样间隔内处理搜索请求的线程的总执行时间,称为 totalThreadExecutionTime(总线程执行时间)。将此采样间隔的长度乘以处理器核心以确定最大 availableTime。为了获得 threadUtilization(线程利用率)百分比,我们将总线程执行时间除以这​​个 availableTime。

double availableTime = samplingInterval * processorCores;
double threadUtilization = totalThreadExecutionTime / availableTime;

例如,采样间隔为 1 秒的 4 核机器将有 4 秒的可用时间(4 核 * 1 秒)。如果总任务执行时间为 2 秒,则线程池利用率(hread pool utilization)为 50%(2 秒 / 4 秒 = 0.5)。

然后,我们将 threadUtilization 百分比乘以 numProcessors 以确定 processingsUsed,它衡量使用的处理器核心数。我们通过指数加权移动平均线(有利于最近添加的移动平均线)记录此值,以平滑小规模的活动突发。这会产生用于 threadPoolLoad 的值。

double processorsUsed = threadUtilization * numProcessors;
exponentialWeightedMovingAvg.add(processorUtilization);
double threadPoolLoad = exponentialWeightedMovingAvg.get();

接下来,我们将描述如何确定队列负载(Queue Load)。计算的核心是配置 maxTimeToClearQueue,它设置搜索请求可以排队的最大可接受时间范围。我们需要知道给定线程在此时间范围内可以执行多少个任务,因此我们将 maxTimeToClearQueue 除以搜索执行时间的指数加权移动平均值。接下来,我们将 searchQueueSize 除以此值,以确定在配置的时间范围内清除队列需要多少个线程。要将其转换为所需的处理器数量,我们将其乘以 processorsPerThread 的比率。这会产生用于 queueLoad 的值。

double taskPerThreadWithinSetTimeframe = maxTimeToClearQueue / ewmaTaskExecutionTime;
double queueThreadsNeeded = searchQueueSize / taskPerThreadWithinSetTimeframe;
double queueLoad = queueThreadsNeeded * processorsPerThread;

那么给定节点的搜索负载(Search Load )就是 threadPoolLoad 和 queueLoad 的总和。

搜索负载报告

每个搜索节点都会定期向主节点发布负载读数。这将在设定的时间间隔后或检测到负载大幅变化时发生。

主节点会分别跟踪每个搜索节点的状态,并根据各种生命周期事件执行记账。添加/删除搜索节点时,主节点会添加或删除其各自的负载条目。

主节点还会报告每个条目的质量评级:ExactMinimum MissingExact 表示最近报告了该指标,而 Missing 则表示新节点尚未报告搜索负载。

当主节点在配置的时间段内未收到来自搜索负载的更新时(例如,如果某个节点暂时不可用),搜索负载质量被视为最低。当搜索节点的负载值考虑了不被视为未来工作的工作(例如下载随后将缓存的文件)时,质量也会报告为最低。

质量用于通知扩展决策。当任何节点的质量不准确时,我们不允许缩小规模。但是,无论质量评级如何,我们都允许扩大规模。

自动扩缩器 - Autoscaler

自动扩缩器是 Elastic serverless 的一个组件,旨在通过根据实时指标调整项目中节点的大小和数量来优化性能和成本。它监控来自 Elasticsearch 的指标,确定理想的硬件配置,并将配置应用于托管的 Kubernetes 基础架构。了解搜索层指标所涉及的输入和计算后,我们现在可以探索自动扩缩器如何利用这些数据来动态调整项目节点大小和数量,以实现最佳性能和成本效益。

自动扩缩器每 5 秒监控一次搜索层指标。当收到有关总交互式和非交互式数据大小的新指标以及搜索能力范围时,自动扩缩器将确定可能的硬件配置范围。这些配置的范围从最小到最大,由搜索能力范围定义。

然后,自动扩缩器使用 Elasticsearch 报告的搜索负载在可用范围内选择 “所需” 硬件配置,该配置至少具有与测量的搜索负载相匹配的处理器核心数量。

此所需配置可作为稳定阶段的输入,在此阶段,自动扩缩器将决定是否可以立即应用所选的扩缩方向;如果不能,则将其丢弃。缩减有一个 15 分钟的稳定窗口,这意味着需要 15 分钟的连续缩减事件才能发生缩减。扩大规模没有稳定期。扩展事件是非阻塞(non-blocking)的;因此,我们可以在后续操作仍在进行时继续做出扩展决策。对此的唯一限制由上述稳定窗口定义。

然后根据 Elasticsearch 中索引的最大副本数检查配置,以确保有足够的搜索节点来容纳所有配置的副本。

最后,将配置应用于托管的 Kubernetes 基础架构,该基础架构会相应地配置项目大小。

结论

搜索层自动扩展彻底改变了 Elasticsearch serverless 项目的管理。通过利用详细的指标,自动扩展器可确保项目始终保持最佳规模。借助无服务器,用户可以专注于业务需求,而不必担心管理基础设施或在工作负载发生变化时措手不及。

这种方法不仅可以在高需求期间提高性能,还可以在活动较少时降低成本,同时对最终用户完全透明。

因此,用户可以将更多精力放在核心活动上,而不必担心手动调整项目以满足不断变化的需求。这项创新标志着 Elasticsearch 在无服务器计算领域迈出了重要一步,使其既强大又易于使用。

试试看!

准备好自己尝试一下了吗?开始免费试用。
想要获得 Elastic 认证吗?了解下一期 Elasticsearch 工程师培训何时开始!

原文:Elasticsearch Serverless: Search tier autoscaling — Search Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为路由的AAA是什么?

1.AAA及用户管理概述 华为路由的AAA是Authentication(认证)、‌Authorization(授权)和Accounting(计费)的简称,‌是一种提供认证、‌授权和计费的安全管理机制。‌ AAA作为一种网络安全管理机制,‌主要提供以下功能和服务:‌ 认证&#xff…

Linux系统编程:线程 1

1.线程的概念 线程——轻量级的进程,线程是CPU执行的最小单位,进程是资源分配的基本单位,线程的创建和调度的时空开销都比进程小; 2.线程的组成 线程组成:线程pid,程序计数器,寄存器集合&…

pdf文件密码忘记,有办法可以打开pdf文件吗?

为确保PDF文件的重要信息不轻易外泄,我们一般会给pdf文件设置打开密码,确保pdf文件的隐私与安全,但随着时间的推移,让我们遗忘了原本设置的密码,这时我们该怎么办呢? 当大家遇到这种情况时,可能…

箱号/柜号是什么?各种单据处理有没有省力的办法?

集装箱编号,作为全球独一无二的标识符,其结构严谨且信息丰富。该编号由四部分构成:首先是三个字母组成的箱主代码,这代表了集装箱的拥有者,即船公司或租箱公司的专属标识;紧接着是固定字母“U”&#xff0c…

SpringBoot快速入门(自动创建)

目录 前言 步骤 1 创建项目 2 选择生成器springBoot 3 修改后,如图所示 4 点击下一步 5 点击Web----SpringWeb 6 点击创建 6.1 如果发生报错如: 6.2 替换合适版本,等待重新加载 7 添加contronller类 7.1 添加HelloController 类 8 ​​创建…

Linux驱动入门实验班——SR501红外模块驱动(附百问网视频链接)

目录 一、工作方式 二、接口图 三、编写思路 1.构造file_operations结构体 2.实现read函数 3.编写入口函数 4.编写中断处理函数 5.编写出口函数 6.声明出入口函数以及协议 四、源码 五、课程链接 一、工作方式 SR501人体红外感应模块有两种工作模式: …

PMP和软考高项知识的重叠和差异

PMP和高项是项目管理证书,备考了高项之后,也可以参加PMP考试,今天我们就来说一说PMP和高项知识的重叠度以及差异。(文末PMP资料) 一、知识体系的重叠 1、 项目管理过程 PMP和高项都强调项目管理的全过程,包…

电脑屏幕录制指南,2024四大免费录屏软件推荐!

无论是制作教学视频、录制在线课程、捕捉游戏精彩瞬间,还是进行远程技术支持,一款优秀的录屏软件都是必不可少的工具。今天,我们就来聊聊几款免费且功能强大的录屏软件。 Foxit录屏大师 链接:www.foxitsoftware.cn/REC/ Foxit录…

BGP 反射器联邦实验

要求: 1.如图连接网络,合理规划IP地址,AS 200内IGP协议为OSPF 2.R1属于AS 100;R2-R3-R4小AS 234 R5-R6-R7小AS 567,同时声明大AS 200,R8属于AS 300 3.R2-R5 R4-R7 之间为联邦EBGP邻居关系 4.R1-R8之…

实时捕捉与追溯:得物基于 eBPF 打造云上网络连接异常摄像头

近期我们容器 SRE 团队基于 eBPF 技术建设网络连接异常感知能力,灰度上线过程中发现了生产环境 10 以上的应用配置错误、程序 Bug 等问题。在和应用负责同学同步风险过程中,大家都挺好奇我们如何实现在对应用无侵入的情况下发现服务连接异常的。本篇文档…

贷齐乐hpp+php特性注入

文章目录 运行过程waf第一层waf拦截第二层waf拦截 数据库查询语句注入思路注入 运行过程 foreach ($_REQUEST as $key > $value) {$_REQUEST[$key] dowith_sql($value);}$request_uri explode("?", $_SERVER[REQUEST_URI]);if (isset($request_uri[1])) {$rewr…

77.游戏分析工具计算数据偏移

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:76.游戏分析工具读取内存存到对象数据分析器一 以它的代码为基础进行修改 COBJContext…

免费领取 | S-SDLC差距分析2024发布会,服务名额先到先得

​2024全新版S-SDLC研发安全能力成熟度模型即将发布!可帮助企业进一步引入行业最佳实践,弥补安全开发能力短板,快速提升软件安全开发整体水平。 8月15日,我们将开启直播,正式发布2024全新版S-SDLC研发安全能力成熟度模…

代码随想录算法训练营第十五天

力扣题部分: 110.平衡二叉树 题目链接:. - 力扣(LeetCode) 题面: 给定一个二叉树,判断它是否是平衡二叉树 平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1 思路(递归): 还是递归三部曲(关于三部曲的具体内容和对递归看法建议可见昨…

Vulnhub JIS-CTF靶机详解

项目地址 https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/ 修改靶机的网卡 开机时长按shift,进入此页面 选择root模式进入 将只读模式改为读写模式 mount -o remount,rw / 查看本机的网卡名称 …

【数据分享】《青海省统计年鉴》2000-2023

而今天要限时免费分享的数据就是2000-2023年间出版的《青海省统计年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 青海省,位于中国西北部,青藏高原的东北部,是一个资源丰富、民族众多的地区。…

利用WebSocket实现来单提醒和用户催单

文章目录 概要整体架构流程技术细节小结 概要 来单提醒: 业务场景:在电商平台、外卖平台等应用场景中,当有新的订单产生时,系统需要及时通知相关人员处理新订单。 目的:确保订单能够得到快速响应,提高客户…

XSS盲打与cookie劫持

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 XSS盲打(加载远程攻击payload) XSS偷cookie cookie收集 在线XSS收集平台的使用 1. BeeF框架的使用 BeeF简介 安装和使用 XSS 一些实战应用 1. XSS PDF 2. 公网投毒 3. 网站挂马…

WUP-CH34X ch34x系列芯片USB转串口通信uniapp插件使用说明

插件地址:WUP-CH34X 系列芯片USB转串口通信安卓库 简介 本文档是针对 CH340/CH341/CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104/CH9143的 USB 转串口安卓库的开发说明文档。 主要介绍如何使用芯片的 USB 转异步串口功能(以下简称 CH34XUART…

python 使用正则表达式判断图片路径是否是超链接

在Python中,判断一个给定的字符串(假设为图片路径)是否是网页链接(URL),你可以通过检查该字符串是否符合URL的基本格式来实现。虽然这个方法不能保证链接一定指向图片,但它能判断该字符串是否是…