Elasticsearch的第一个版本于 2010 年作为分布式可扩展搜索引擎发布,允许用户快速搜索并获得关键见解。十二年的发展和超过 65,000 次提交后,Elasticsearch 继续为用户提供久经考验的解决方案,以解决各种搜索问题。得益于 1,500 多名贡献者(包括数百名 Elastic 全职员工)的努力,Elasticsearch 不断发展以应对搜索领域出现的新挑战。
在 Elasticsearch 生命周期的早期,当有人提出数据丢失问题时,Elastic 团队经历了多年的努力来重写集群协调系统,以确保确认的数据得到安全存储。当发现在大型集群中管理索引很麻烦时,Elastic 团队致力于实施完善的ILM 解决方案,通过允许用户预定义索引模式和生命周期操作来自动化这项工作。由于用户发现需要存储大量指标和时间序列数据,因此添加了更好的压缩等各种功能以减少数据大小。随着搜索大量冷数据的存储成本增加,我们投资于创建可搜索的快照作为一种直接在低成本对象存储上搜索用户数据的方法。
这些投资为 Elasticsearch 的下一次演进奠定了基础。随着云原生服务和新编排系统的增长,我们决定是时候发展 Elasticsearch 以改善使用云原生系统时的体验了。我们相信,这些变化为在云上运行 Elasticsearch 带来了运营、性能和成本改进的机会。
运维或编排 Elasticsearch 时的主要挑战之一是它依赖于许多持久状态,因此它是一个有状态的系统。三个主要状态是事务日志、索引存储和集群元数据。这种状态意味着存储必须是持久的,并且在节点重新启动或替换期间不能丢失。
Elastic Cloud 上现有的 Elasticsearch 架构必须跨多个可用区复制索引,以在中断的情况下提供冗余。我们打算将这些数据的持久性从本地磁盘转移到对象存储,例如 AWS S3。通过依赖外部服务来存储这些数据,我们将不再需要索引复制,从而显着减少用于写吞吐的硬件资源。由于 AWS S3、GCP 云存储和 Azure Blob 存储等云对象存储具备跨可用区复制数据的特性,此架构还提供了非常高的持久性保证。而这点,在腾讯云Elasticsearch service上,我们也可以采用类似的方式,通过COS做到这个点。
将索引存储转移到外部服务中还将允许我们通过分离读写职责来重新构建 Elasticsearch。我们打算将架构简化为一个索引层和一个搜索层,而不是让主节点和副本节点同时处理这两种工作负载。分离这些工作负载将使它们能够独立扩展,并且选择更适合各自的用例的硬件资源。它还有助于解决搜索和索引负载可能相互影响的长期挑战。
在进行了数月的概念验证和实验阶段之后,我们确信这些对象存储服务能够满足我们对索引存储和集群元数据的设想。我们的测试和基准表明,这些存储服务可以满足我们在 Elastic Cloud 中看到的最大集群的高索引需求。此外,支持对象存储中的数据降低了索引成本,并允许简单地调整搜索性能。为了搜索数据,Elasticsearch 将使用久经考验的可搜索快照模型,其中数据永久保存在云原生对象存储中,本地磁盘用作频繁访问数据的缓存。
为了帮助区分,我们将现有模型描述为“节点到节点”复制的模型。在此模型的热层中,主分片和副本分片都执行相同的繁重工作来处理摄取和服务搜索请求。这些节点是“有状态的”,因为它们依靠本地磁盘来安全地保存它们托管的分片的数据。此外,主分片和副本分片不断通信以保持同步。他们通过将在主分片上执行的操作复制到副本分片来做到这一点,这意味着这些操作(主要是 CPU)的成本是针对每个指定的副本产生的。为摄取执行这项工作的相同分片和节点也为搜索请求提供服务,因此必须在考虑到这两种工作负载的情况下进行配置和扩展。
除了搜索和摄取之外,节点到节点复制模型中的分片还处理其他CPU密集型的任务,例如合并 Lucene 段。虽然这种设计有其优点,但根据我们多年来从客户那里学到的知识以及更广泛的云生态系统的发展,我们看到了很多机会。
新架构可实现许多即时和未来的改进,包括:
为了验证这种方法,我们实施了广泛的概念证明,其中数据仅在单个节点上建立索引,并且通过云对象存储实现复制。我们发现,通过消除将计算资源用于索引复制的需求,我们可以将索引吞吐量提高 75% 。此外,与索引数据并在本地写入数据的操作相比较,简单地从对象存储中提取数据所需要的CPU计算量将大大减少。这意味着搜索节点将能够完全将其 CPU 用于搜索。
这些性能测试是在一个两节点集群上针对所有三个主要公共云提供商(AWS、GCP 和 Azure)进行的。随着我们追求在生产环境中做到Stateless,我们打算继续建立更大的基准。
索引吞吐量
CPU使用率
Elastic Cloud 上的无状态架构将允许您减少索引开销、独立扩展摄取和搜索、简化数据层管理并加速操作,例如扩展或升级。这是 Elastic Cloud 平台实现重大现代化的第一个里程碑。在腾讯云的Elasticsearch Service上,我们也将按此技术方向演进。
有兴趣在其他人之前尝试此解决方案吗?您可以通过我们的社区Slack频道与我们联系。我们希望您的反馈有助于塑造我们新架构的方向。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。