什么是Elasticsearch?
介绍
当人们问“什么是Elasticsearch?”时,有些人可能会回答说它是“一个索引”,“一个搜索引擎”,“分析数据库”,“一个大数据解决方案”,“它快速且可扩展”,或者“它有点像谷歌”。根据您对这项技术的熟悉程度,这些答案可能会使您更接近啊哈时刻,或者让您进一步困惑。但事实是,所有这些答案都是正确的,这是Elasticsearch吸引力的一部分。多年来,Elasticsearch及其周围被称为“弹性堆栈”的组件生态系统已被用于越来越多的用例,从网站或文档上的简单搜索、收集和分析日志数据,到用于数据分析和可视化的商业智能工具。那么,Elastic联合创始人Shay Bannon为妻子的烹饪食谱创建的简单搜索引擎是如何成长为当今最受欢迎的企业搜索引擎和10个最受欢迎的数据库管理系统之一的呢?在这篇文章中,我们将通过了解什么是Elasticsearch,它的工作原理以及它的使用方式来回答这个问题。让我们潜入其中。
什么是Elasticsearch?
从其核心来说,您可以将Elasticsearch视为可以处理JSON请求并返回JSON数据的服务器。
Elasticsearch是一个基于Apache Lucene并在Java中开发的分布式开源搜索和分析引擎。它最初是Lucene开源搜索框架的可扩展版本,然后增加了水平缩放Lucene指数的能力。Elasticsearch允许您快速、近实时地存储、搜索和分析大量数据,并在几毫秒内给出答案。它能够实现快速的搜索响应,因为它不是直接搜索文本,而是搜索索引。它使用基于文档的结构,而不是表格和模式,并带有广泛的REST API来存储和搜索数据。从其核心来说,您可以将Elasticsearch视为可以处理JSON请求并返回JSON数据的服务器。
Elasticsearch是如何工作的?
从根本上讲,Elasticsearch将数据组织成文档,这些文档是基于JSON的代表实体的信息单元。文档根据其特征分组为索引,类似于数据库。Elasticsearch使用倒置索引,这是一种将单词映射到文档位置的数据结构,以进行高效搜索。Elasticsearch的分布式架构能够以几乎实时的性能快速搜索和分析大量数据。
为了更好地了解Elasticsearch的工作原理,让我们介绍一些关于它如何组织数据及其后端组件的基本概念。
逻辑概念
文稿
文档是信息的基本单位,可以在以JSON表示的Elasticsearch中索引,JSON是全球互联网数据交换格式。您可以将文档想象成关系数据库中的行,代表给定的实体——您正在搜索的东西。在Elasticsearch中,文档可以不仅仅是文本,它可以是任何用JSON编码的结构化数据。这些数据可以是数字、字符串和日期等。每个文档都有一个唯一的ID和给定的数据类型,它描述了文档的实体类型。例如,文档可以代表百科全书文章或来自网络服务器的日志条目。
目录
索引是具有相似特征的文档的集合。索引是您可以在Elasticsearch中查询的最高级别实体。您可以认为该索引类似于关系数据库模式中的数据库。索引中的任何文档通常都与逻辑相关。例如,在电子商务网站的上下文中,您可以有一个客户索引,一个产品索引,一个订单索引,等等。索引由一个名称标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。
倒置索引
Elasticsearch中的索引实际上是所谓的倒置索引,这是所有搜索引擎工作的机制。它是一种数据结构,存储从内容(如单词或数字)到其在文档或一组文档中的位置的映射。基本上,它是一个类似哈希图的数据结构,将您从一个单词引导到文档。倒置索引不会直接存储字符串,而是将每个文档拆分为单个搜索词(即每个单词),然后将每个搜索词映射到这些搜索词出现的文档。例如,在下图中,“最佳”一词出现在文档2中,因此它被映射到该文档。这可以快速查找给定文档中查找搜索词的位置。通过使用分布式反向索引,Elasticsearch甚至可以从非常大的数据集中快速找到全文搜索的最佳匹配项。
倒置索引的视觉表示
后端组件
集群
Elasticsearch集群是由一个或多个节点实例连接在一起的一组。Elasticsearch集群的力量在于在集群中的所有节点上分配任务、搜索和索引。
节点
节点是集群一部分的单个服务器。节点存储数据并参与集群的索引和搜索功能。Elasticsearch节点可以以不同的方式配置:
主节点—控制Elasticsearch集群,并负责所有集群范围的操作,如创建/删除索引和添加/删除节点。
数据节点—存储数据并执行与数据相关的操作,如搜索和聚合。
客户端节点—将集群请求转发到主节点,并将数据相关请求转发到数据节点。
碎片
Elasticsearch提供了将索引细分为称为碎片的多个部分的能力。每个碎片本身就是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点上。通过在多个碎片上分发索引中的文档,并在多个节点上分发这些碎片,Elasticsearch可以确保冗余,这既可以防止硬件故障,又能随着节点添加到集群时增加查询容量。
复制品
Elasticsearch允许您制作一个或多个索引碎片的副本,这些碎片被称为“复制碎片”或只是“复制碎片”。基本上,副本碎片是主碎片的副本。索引中的每个文档都属于一个主碎片。副本提供数据的冗余副本,以防止硬件故障,并增加服务读取请求(如搜索或检索文档)的能力。
弹性堆栈(ELK)
什么是弹性堆栈(原ELK堆栈)?
Elasticsearch是Elastic Stack的核心组件,Elastic Stack是一套用于数据摄取、丰富、存储、分析和可视化的开源工具。它通常以其组件Elasticsearch、Logstash和Kibana命名为“ELK”堆栈,现在还包括Beats。虽然搜索引擎是其核心,但用户开始使用Elasticsearch进行日志数据,并希望找到一种轻松摄取和可视化这些数据的方法。
基巴纳
Kibana是Elasticsearch的数据可视化和管理工具,提供实时直方图、线图、饼图和地图。它允许您可视化您的Elasticsearch数据并浏览Elastic Stack。您可以通过从一个问题开始选择塑造数据的方式,以了解交互式可视化将引导您去哪里。例如,由于Kibana经常用于日志分析,它允许您回答有关您的网络点击来自哪里、您的分发URL等问题。
如果您没有在Elasticsearch之上构建自己的应用程序,Kibana是使用强大而灵活的用户界面搜索和可视化索引的好方法。然而,一个主要缺点是,每个可视化只能针对单个索引/索引模式工作。因此,如果您有严格不同数据的索引,则必须为每个索引创建单独的可视化。
原木
Logstash用于聚合和处理数据,并将其发送到Elasticsearch。这是一个开源的服务器端数据处理管道,可以同时从多个来源摄取数据,对其进行转换,然后将其发送进行收集。它还通过识别命名字段来构建结构,并将它们转换为在通用格式上收敛,从而转换和准备数据,无论格式如何。例如,由于数据通常以各种格式分散在不同的系统中,Logstash允许您将不同的系统(如Web服务器、数据库、亚马逊服务等)绑定在一起,并以连续的流媒体方式将数据发布到需要访问的任何地方。
节拍
Beats是轻量级、单一用途的数据运输代理的集合,用于将数百或数千台机器和系统的数据发送到Logstash或Elasticsearch。Beats非常适合收集数据,因为它们可以放在您的服务器上,与您的容器一起,或作为功能部署,然后在Elasticsearch中集中数据。例如,Filebeat可以坐在您的服务器上,监控日志文件进入,解析它们,并近乎实时地导入Elasticsearch。
Elasticsearch是用来做什么的?
现在,我们已经大致了解了什么是Elasticsearch,它背后的逻辑概念及其架构,我们更好地了解了它为什么以及如何用于各种用例。下面,我们将研究Elasticsearch的一些主要用例,并提供公司今天如何使用它的示例。
主要用例
应用程序搜索——适用于严重依赖搜索平台访问、检索和报告数据的应用程序。
网站搜索——存储大量内容的网站发现Elasticsearch是有效和准确搜索的非常有用的工具。Elasticsearch在网站搜索领域稳步取得进展,这并不奇怪。
企业搜索——Elasticsearch允许全企业范围的搜索,包括文档搜索、电子商务产品搜索、博客搜索、人员搜索以及您能想到的任何形式的搜索。事实上,它已经稳步渗透并取代了我们每天使用的大多数流行网站的搜索解决方案。从更特定于企业的角度来看,Elasticsearch习惯于在公司内联网中取得巨大成功。
日志和日志分析——正如我们所讨论的,Elasticsearch通常用于以近实时和可扩展的方式摄取和分析日志数据。它还提供了关于日志指标的重要运营见解,以推动行动。
基础设施指标和容器监控——许多公司使用ELK堆栈来分析各种指标。这可能涉及通过几个性能参数收集数据,这些参数因用例而异。
安全分析——Elasticsearch的另一个主要分析应用程序是安全分析。访问日志和有关系统安全的类似日志可以使用ELK堆栈进行分析,从而更全面地实时了解整个系统正在发生的事情。
业务分析——ELK Stack中的许多内置功能使其成为业务分析工具的一个不错的选择。然而,在大多数组织中,实施该产品和应用有陡峭的学习曲线。在公司除了Elasticsearch之外还有多个数据源的情况下尤其如此,因为Kibana只处理Elasticsearch数据。一个好的替代方案是Knowi,这是一个分析平台,与Elasticsearch原生集成,甚至允许非技术业务用户在没有ELK Stack知识或专业知识的情况下对Elasticsearch数据创建可视化和执行分析。
公司用例
Netflix
Netflix在各种用例中依靠ELK Stack来监控和分析客户服务运营和安全日志。例如,Elasticsearch是其消息系统背后的底层引擎。此外,该公司选择Elasticsearch是因为它的自动分片和复制、灵活的模式、漂亮的扩展模型以及具有许多插件的生态系统。Netflix已稳步将Elasticsearch的使用从几个孤立的部署增加到由数百个节点组成的十几个集群。
eBay
凭借无数以Elasticsearch为支柱的业务关键型文本搜索和分析用例,eBay创建了一个自定义的“Elasticsearch-as-a-Service”平台,允许在其内部基于OpenStack的云平台上轻松配置Elasticsearch集群。
沃尔玛
沃尔玛利用弹性堆栈揭示其数据的隐藏潜力,以深入了解客户购买模式,跟踪商店绩效指标和假日分析——所有这些都近乎实时。它还利用ELK的安全功能与SSO一起进行安全,为异常检测发出警报,并监控DevOps
为什么Elasticsearch很受欢迎
根据Stackshare的这项调查,以下是开发人员和公司选择Elasticsearch的主要原因:
- 强大的API
- 很棒的搜索引擎
- 开源
- 宁静
- 近实时搜索
- 免费
- 搜索一切
- 易于开始
- 分析
- 分布式
摘要
那么,什么是Elasticsearch?在这篇文章中,我们试图通过了解它是什么、它如何工作以及它如何使用的视角来回答这个问题,但我们仍然只是勉强触及学习它的一切。但根据我们所涵盖的内容,我们可以简要总结一下,Elasticsearch是搜索引擎的核心,其底层架构和组件使其快速且可扩展,位于互补工具生态系统的核心,这些工具一起可用于许多用例,包括搜索、分析、数据处理和存储。