Elastic Cloud Serverless:深入探讨大规模自动扩展和性能压力测试
作者:来自 Elastic David Brimley, Jason Bryan, Gareth Ellis 及 Stewart Miles

深入了解 Elasticsearch Cloud Serverless 如何动态扩展以处理海量数据和复杂查询。我们探索其在实际条件下的性能,深入了解其可靠性、效率和可扩展性。
简介
Elastic Cloud Serverless 的出现重塑了企业如何利用 Elasticsearch 的强大功能,而无需管理集群、节点或资源扩展。Elastic Cloud Serverless 的一项关键创新是其自动扩展功能,该功能可实时适应工作负载和流量的变化。本文探讨了自动扩展背后的技术细节、Elastic Cloud Serverless 在负载下的性能以及大量压力测试的结果。
什么是 Elastic Cloud Serverless?
Elastic Cloud Serverless 提供自动化、托管版本的 Elasticsearch,可根据需求进行扩展。与传统的 Elasticsearch 部署(用户必须配置和管理硬件或云实例)不同,Elastic Cloud Serverless 可管理基础设施扩展和资源分配。这对于工作负载多变的组织尤其有益,因为手动扩展和缩减基础设施可能很麻烦且容易出错。该系统的内置自动扩展功能可适应繁重的提取任务、搜索查询和其他操作,无需人工干预。
Elastic Cloud Serverless 有两个不同的层级,即搜索层(search tier)和索引层(indexing tier),每个层级都针对特定工作负载进行了优化。搜索层专用于处理查询执行,确保快速高效地响应搜索请求。同时,索引层负责提取和处理数据、管理写入操作以及确保数据正确存储和可搜索。通过解耦这些问题,Elastic Cloud Serverless 允许每个层根据工作负载需求独立扩展。这种分离提高了资源效率,因为索引的计算和存储需求(例如,处理高吞吐量提取)不会干扰搜索操作期间的查询性能。同样,搜索层资源可以扩展以处理复杂查询或流量高峰,而不会影响提取过程。这种架构可确保最佳性能、成本效益和弹性,使 Elastic Cloud Serverless 能够动态适应波动的工作负载,同时保持一致的用户体验。

你可以在以下博客文章中阅读有关 Elastic Cloud Serverless 架构的更多信息。
压力测试 Elastic Cloud Serverless
全面的压力测试评估了 Elastic Cloud Serverless 处理大量波动工作负载的能力。这些测试旨在衡量系统提取数据、处理搜索查询以及在极端条件下保持性能的能力。需要注意的是,系统的性能可能超出我们在此处介绍的范围,具体取决于客户端数量和批量索引大小等因素。在这里,我们将介绍这些测试的方法和结果。
测试范围和方法
我们压力测试的主要目标是回答关键问题:
- Elastic Cloud Serverless 如何处理大量并发客户端的大规模提取和搜索查询?
- 它能否动态扩展以适应工作负载的突然激增?
- 系统是否在较长时间内保持稳定性?
对搜索用例进行压力测试。
在 Elastic Cloud Serverless 中,你可以从三种项目类型中进行选择:Elasticsearch、可观察性和安全性。我们使用 Github Archive 数据集并模拟可能的摄取和搜索行为,开始了对 Elasticsearch 搜索用例的压力测试之旅。在测试之前,我们通过摄取 186GB/4300 万个文档的基础语料库来准备系统。然后,我们在十分钟内逐渐添加客户端,以便 Elasticsearch 有时间适当扩展。数据是通过 Bulk API 使用 Datastreams 摄取的。
对索引层进行压力测试。
首先,让我们谈谈索引数据(摄取)。Elastic Cloud Serverless 中的摄取自动扩展会动态调整资源以满足数据摄取需求,从而确保最佳性能和成本效益。系统持续监控摄取吞吐量、资源利用率(CPU、内存和网络)和响应延迟等指标。当这些指标超过预定义的阈值时,自动扩缩器会按比例提供额外的容量来处理当前和预期的需求,同时为意外峰值保留缓冲。数据管道的复杂性和系统施加的资源限制也会影响扩展决策。通过动态添加或删除容量,摄取自动扩缩可确保无缝扩展而无需人工干预。
在 Elastic Cloud Serverless 等资源效率得到优化的自动扩缩系统中,可能会出现工作负载突然大幅增加超出系统立即扩展的能力的情况。在这种情况下,客户端可能会收到 HTTP 429 状态代码,表示系统不堪重负。为了处理这些情况,客户端应实施指数退避策略,以逐渐延长的间隔重试请求。在压力测试期间,我们会主动跟踪 429 响应,以评估系统在高需求下的反应,从而提供有关自动扩缩有效性的宝贵见解。你可以在此处阅读有关我们如何自动扩缩索引的更深入的博客文章。现在,让我们看看我们在索引层的压力测试中遇到的一些结果。
在扩大规模的同时建立索引:
| Corpus | Bulk Size | Actual Volume | Indexing Period (minutes) | Volume / hr | Median Throughput (docs/s) | 90th PCT Indexing latency (seconds) | Avg. % Error Rate (429s, other) |
|---|---|---|---|---|---|---|---|
| 1TB | 2500 | 1117.43 GB | 63 | 1064.22 GB | 70,256.96 | 7.095 | 0.05% |
| 2TB | 2500 | 2162.02 GB | 122 | 1063.29 GB | 68,365.23 | 8.148 | 0.05% |
| 5TB | 2500 | 5254.84 GB | 272 | 1159.16 GB | 74,770.27 | 7.46 | 0 |
对于 1TB 和 2TB 语料库的初始测试,我们分别实现了 1064 GB/小时和 1063 GB/小时的吞吐量。对于 5TB,我们实现了更高的 1160 GB/小时的摄取速度,因为我们观察到摄取层继续扩大,从而提供了更好的吞吐量。
在完全扩展的情况下进行索引:
| Clients | Bulk Size | Actual Volume | Duration | Volume / hr | Median Throughput (docs/s) | 99th PCT Indexing latency (seconds) | Avg. % Error Rate (429s, other) |
|---|---|---|---|---|---|---|---|
| 3,000 | 2,000 | 1 TB | 8 minutes | 7.5 TB | 499,000 | 33.5 | 0.0% |
使用最大规模的索引层时,ECS 在 8 分钟内提取了 1TB 的数据,每秒索引的速率约为 499K 文档/秒。这相当于每天 180TB 的推断容量。
从最小规模到最大规模的索引:
| Clients | Bulk Size | Actual Volume | Duration | Volume / hr | Median Throughput (docs/s) | 99th PCT Indexing latency (seconds) | Avg. % Error Rate (429s, other) |
|---|---|---|---|---|---|---|---|
| 2,048 | 1,000 | 13 TB | 6 hours | 2.1 TB | 146,478 | 55.5 | 1.55% |
在对 2TB 数据进行测试时,我们逐渐扩展到 2048 个客户端,并设法以每秒 146K 文档的速度提取数据,在 1 小时内完成 2TB 的数据。推算下来,每天的数据量为 48TB。
72 小时稳定性测试:
| Clients | Bulk Size | Actual Volume | Indexing Period (hours) | Volume / hr | Median Throughput (docs/s) | 99th PCT Indexing latency (seconds) | Avg. % Error Rate (429s, other) |
|---|---|---|---|---|---|---|---|
| 128 | 500 | 61 TB | 72 | ~868.6 GB | 51,700 | 7.7 | <0.05% |
在 72 小时的稳定性测试中,我们使用 128 个客户端提取了 60TB 的数据。Elasticsearch 在扩展索引和搜索层的同时,保持了令人印象深刻的 870GB/小时的吞吐量,错误率极低。这证明了 Elasticsearch 能够在较长时间内保持高吞吐量,同时保持较低的故障率。
对搜索层进行压力测试。
Elastic Cloud Serverless 中的搜索层自动扩展功能会根据数据集大小和搜索负载动态调整资源,以保持最佳性能。系统将数据分为两类:增强型和非增强型。增强型数据包括用户定义的增强窗口内的基于时间的文档(带有 @timestamp 字段的文档)和所有非基于时间的文档,而非增强型数据则不在此窗口内。用户可以设置增强窗口来定义增强数据的时间范围,并选择搜索能力级别(按需、高性能或高吞吐量)来控制资源分配。你可以在此处阅读有关配置搜索能力和搜索增强窗口的更多信息。
自动扩展器监控查询延迟、资源利用率(CPU 和内存)和查询队列长度等指标。当这些指标表明需求增加时,系统会相应地扩展资源。此扩展是按项目执行的,对最终用户是透明的。
负载下的搜索稳定性:
| Corpus | Actual Volume (from corpus tab) | Duration | Average Search Rate (req/s) | Max Search Rate (req/s) | Response Time (P50) | Response Time (P99) |
|---|---|---|---|---|---|---|
| 5TB | 5254.84 GB | 120 minutes | 891 | 3,158 | 36 ms | 316 ms |
使用 5TB 的数据,我们测试了一组运行超过 2 小时的 8 次搜索,包括复杂查询、聚合和 ES|QL。每次搜索的客户端数量从 4 个增加到 64 个。总共有 32 到 512 个客户端执行搜索。随着客户端数量从 32 个增加到 512 个,性能保持稳定。当使用 512 个客户端运行时,我们观察到搜索请求率为每秒 3,158 个查询,P50 响应时间为 36 毫秒。在整个测试过程中,我们观察到搜索层扩展符合预期,可以满足需求。
24 小时搜索稳定性测试:
| Corpus | Actual Volume | Duration | Average Search Rate (req/s) | Max Search Rate (req/s) | Response Time (P50) | Response Time (P99) |
|---|---|---|---|---|---|---|
| 40TB | 60 TB | 24 hours | 183 | 250 | 192 ms | 520 ms |
一组 7 次搜索、聚合和一个 ES|QL 查询用于查询 40TB(主要是)增强数据。客户端数量从每次搜索 1 个增加到 12 个,总共 7 个到 84 个搜索客户端。在将搜索能力设置为平衡的情况下,我们观察到 192 毫秒(P50)的响应时间。你可以在此处阅读有关配置搜索能力和搜索增强窗口的更多信息。
并发索引和搜索
在同时运行索引和搜索的测试中,我们的目标是以 6 个“chunks/块”的形式提取 5TB。我们将提取数据的客户端从 24 个增加到 480 个,批量大小为 2500 个文档。对于搜索,客户端从每次搜索 2 个增加到 40 个。总共有 16 到 320 个客户端执行搜索。
我们观察到两个层级都自动扩展,并且搜索延迟始终保持在 24 毫秒(p50)和 1359 毫秒(p99)左右。系统在保持性能的同时进行索引和搜索的能力对于许多用例至关重要。
结论
上面讨论的压力测试侧重于 Elasticsearch 项目中的搜索用例,该项目设计为具有特定字段类型、字段数量、客户端和批量大小的配置。这些参数经过量身定制,以在与用例相关的明确条件下评估 Elastic Cloud Serverless,从而提供有关其性能的宝贵见解。但是,需要注意的是,结果可能无法直接反映你的工作负载,因为性能取决于各种因素,例如查询复杂性、数据结构和索引策略。
这些基准作为基准,但实际结果将根据你的独特用例和要求而有所不同。还应注意,这些结果并不代表性能上限。
我们压力测试的关键结论是 Elastic Cloud Serverless 表现出非凡的稳健性。它每天可以提取数百 TB 的数据,同时保持强大的搜索性能。这使其成为大规模搜索工作负载的强大解决方案,可确保高数据量下的可靠性和效率。在即将发布的文章中,我们将进一步探索对 Elastic Cloud Serverless 进行压力测试,以实现可观察性和安全性用例,重点介绍其在不同应用领域的多功能性,并深入了解其功能。
了解有关 Elastic Cloud Serverless 的更多信息,并开始 14 天免费试用,亲自测试一下。
原文:Elastic Cloud Serverless: A Deep Dive into Autoscaling and Performance Stress Testing at Scale - Search Labs
相关文章:
Elastic Cloud Serverless:深入探讨大规模自动扩展和性能压力测试
作者:来自 Elastic David Brimley, Jason Bryan, Gareth Ellis 及 Stewart Miles 深入了解 Elasticsearch Cloud Serverless 如何动态扩展以处理海量数据和复杂查询。我们探索其在实际条件下的性能,深入了解其可靠性、效率和可扩展性。 简介 Elastic Cl…...
新一代零样本无训练目标检测
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年12月2日21点02分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…...
es 3期 第13节-多条件组合查询实战运用
#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性ÿ…...
全局token验证
全局token验证 简介 通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用…...
实时美颜技术详解:美颜SDK与直播APP开发实践
通过集成美颜SDK(软件开发工具包),开发者能够轻松为直播APP提供实时美颜效果,改善用户的直播体验。本篇文章,小编将深入探讨实时美颜技术,重点分析美颜SDK的核心技术及其在直播APP中的应用实践。 一、实时…...
电子应用设计方案-41:智能微波炉系统方案设计
智能微波炉系统方案设计 一、引言 随着科技的不断进步,人们对于厨房电器的智能化需求日益增长。智能微波炉作为现代厨房中的重要设备,应具备更便捷、高效、个性化的功能,以满足用户多样化的烹饪需求。 二、系统概述 1. 系统目标 - 提供精确…...
P5736 【深基7.例2】质数筛
题目描述 输入 𝑛个不大于 105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 第一行输入一个正整数 𝑛,表示整数个数。 第二行输入 𝑛 个正整数 𝑎…...
数据结构初阶1 时间复杂度和空间复杂度
本章重点 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度OJ练习 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢?比如对于以下斐波那契数列: long long Fib(int N) { if(N < 3) return 1;return Fib(N-1) Fib(N-2); }斐…...
E130 PHP+MYSQL+动漫门户网站的设计与实现 视频网站系统 在线点播视频 源码 配置 文档 全套资料
动漫门户网站 1.摘要2. 开发背景和意义3.项目功能4.界面展示5.源码获取 1.摘要 21世纪是信息的时代,随着信息技术与网络技术的发展,其已经渗透到人们日常生活的方方面面,与人们是日常生活已经建立密不可分的联系。本网站利用Internet网络, M…...
OSCP - Proving Grounds - Fanatastic
主要知识点 CVE-2021-43798漏洞利用 具体步骤 执行nmap 扫描,22/3000/9090端口开放,应该是ssh,grafana 和Prometheus Nmap scan report for 192.168.52.181 Host is up (0.00081s latency). Not shown: 65532 closed tcp ports (reset) PORT STA…...
ArcMap 分享统计点要素、路网、降雨量等功能操作
ArcMap 分享统计点要素、路网等功能等功能操作今天进行 一、按格网统计点要素 1、创建公里网格统计单元 点击确定后展示 打开连接 点击后 展示 2、处理属性 1)查看属性表 每个小格都统计出了点的数量 2)查看属性 符号系统 点击应用后展示结果&#x…...
概率论——假设检验
解题步骤: 1、提出假设H0和H1 2、定类型,摆公式 3、计算统计量和拒绝域 4、定论、总结 Z检验 条件: 对μ进行检验,并且总体方差已知道 例题: 1、假设H0为可以认为是570N,H1为不可以认为是570N 2、Z…...
爬虫项目练手
python抓取优美图库小姐姐图片 整体功能概述 这段 Python 代码定义了一个名为 ImageDownloader 的类,其主要目的是从指定网站(https://www.umei.cc)上按照不同的图片分类,爬取图片并保存到本地相应的文件夹中。不过需要注意&…...
C程序设计:解决Fibonacci.数列问题
‘ 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、…...
35页PDF | 元数据与数据血缘落地实施(限免下载)
一、前言 这份报告详细介绍了元数据与数据血缘的概念、重要性以及在企业数据中台中的应用。报告阐述了数据中台的核心价值在于整合和管理体系内的数据,以提升数据资产化能力并支持业务决策。报告还涵盖了元数据的分类(技术元数据和业务元数据࿰…...
Lua元表和元方法的使用
元表是一个普通的 Lua 表,包含一组元方法,这些元方法与 Lua 中的事件相关联。事件发生在 Lua 执行某些操作时,例如加法、字符串连接、比较等。元方法是普通的 Lua 函数,在特定事件发生时被调用。 元表包含了以下元方法࿱…...
基于Pyhton的人脸识别(Python 3.12+face_recognition库)
使用Python进行人脸编码和比较 简介 在这个教程中,我们将学习如何使用Python和face_recognition库来加载图像、提取人脸编码,并比较两个人脸是否相似。face_recognition库是一个强大的工具,它基于dlib的深度学习模型,可以轻松实…...
Spring Boot+Netty
因工作中需要给第三方屏幕厂家下发广告,音频,图片等内容,对方提供TCP接口于是我使用Netty长链接进行数据传输 1.添加依赖 <!-- netty依赖--><dependency><groupId>io.netty</groupId><artifactId>netty-all&…...
LCR 023. 相交链表
一.题目: LCR 023. 相交链表 - 力扣(LeetCode) 二.我的原始解法-无: 三.其他人的正确及好的解法,力扣解法参考: 哈希表法及双指针法:LCR 023. 相交链表 - 力扣(LeetCode࿰…...
Linux命令行下载工具
1. curl 1.1. 介绍 curl是一个功能强大的命令行工具,用于在各种网络协议下传输数据。它支持多种协议,包括但不限于 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、SMTP、POP3、IMAP 等,这使得它在网络数据交互场景中有广泛的应用。curl可以模拟浏览器…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
