ES 译文之 ES 必学的几个核心概念

官方原文

Elasticsearch 中有一些很基础但非常核心的概念,在正式开始学习前,你需要先了解下它们,这将对你后面的学习有极大的帮助。

近实时 NRT

Elasticsearch 是一个近实时的搜索平台。这也就意味着,文档从被索引到真正能被搜索有一个简短的延迟(通常是 1 秒)。

集群 Cluster

集群,即一个或多个节点(servers)的集合,它承载了我们保存的所有数据,并提供了在所有节点索引和搜索的能力。每个集群拥有一个唯一的名称标识,默认的名称为 "elasticsearch"。这个名字非常重要,每个节点只能加入到一个集群,而每个节点能否成为某集群的一部分,就是由这个名字决定的。

我们需要确保不同的环境,集群名称是不同的,否则节点将会加入到错误的集群。举个例子,你可以用 logging-dev、logging-stage、 logging-production 命名三个集群来分别表示开发、预发和生产三个环境。

集群中只有一个节点也可以完美工作。而且,你可以通过设置不同的集群名称,实现运行多个集群的目标。

节点 Node

节点是一个单一的服务,同时也是集群的一部分,负责保存数据,集群的索引和搜索能力需要各个节点的参与。和集群一样,每个节点也有自己的名字,节点的名称默认是通过 UUID 随机产生的,在节点启动时,会为其分配一个名称。如果不希望使用默认生成的名称,也可以自定义。这个名字也很重要,集群会通过它们来标识每个节点,在进行集群管理时,要知道哪些节点属于某个集群同样需要节点名称来识别。

通过为某个节点配置集群名称,就可以把它加入到指定的集群。节点默认会被加入到名称为"elaticsearch" 的集群。如果在一个网络中启动了多个节点,并且它们可以互相发现,那么这些节点就会自发组成一个名称为 "elaticsearch" 的集群。

一个集群可以由任意多个节点组成。如果网络中没有正在运行的节点,那么启动一个新节点将自动创建一个新的集群,而这个集群只包含了一个节点,默认名称为 "elasticsearch"。

索引 Index

索引,是有着相似性的文档的一组集合。怎么理解呢?举个例子,你可以用一个索引存储消费者一类的数据,一个索引保存商品类信息、还有一个索引保存订单数据。 每个索引都是通过名称(必须是小写)来识别的。当我们对某个索引中文档数据执行一些操作时,比如索引、搜索、更新和删除时,也要通过名字识别。

一个集群可以定义任意多个索引。

类型 Type

注:Type 在 Elasticsearch 6.0 已经被弃用了。不再支持多个类型

类型是用于在索引上实现一种逻辑上的分类/分区,这让我们可以在一个索引中存储不同类型的文档,比如,user 类型,blog 类型。但是,在 6.0 以后, 已经不支持在一个创建多个 Type 类型了,而且,Type 类型这个概念将会在下一个版本,也就是 7.0 彻底移除。

文档 Document

文档是 Elasticsearch 中能被索引的最小信息单元。比如,你可以用一个文档表示一个消费者,一个文档表示一个商品,还有一个文档表示一笔订单。文档是以 JSON 格式表示的,这是一种很常用的数据格式。

在一个索引/类型中,我们可以保存任意多个文档。要说明的是,虽然物理意义上,文档是保存在索引中的,但当前版本(6.5),一个文档的保存必须要指定索引/类型。

分片和副本 Sharps & Replica

毫无疑问,一个索引中存储的数据量可能突破单个节点的硬件限制。举个栗子,假设一个含有十亿个文档的索引将占用 1T 的磁盘空间,那么一个节点的磁盘空间可能不够。 即使有足够的空间,也会出现在单一节点请求处理太慢的问题。

如何解决这个问题呢?Elasticsearch 提供了一种能力,可以把一个索引拆分为多个部分,每个部分称为 sharps,即分片。创建索引时,你可以指定索引的分片数,每个分片其实都是一个独立的,功能齐全的 "索引 index",并且可能存在于集群中的任何一个节点上。

分片是非常重要的,有两个原因:

  • 它使集群可以实现水平容量扩展
  • 它使我们可以实现在不同分片(多个节点)之间并行操作,从而提高系统的性能/吞吐量。

那么,你是否会想,索引上的分片如何分布的呢?一个搜索请求如何查找和聚合不同分片的搜索结果呢?其实,Elasticsearch 已经帮我们解决了这些问题。 而且这个过程我们也是可见的。

在一个网络/云环境下,随时可能发生异常,比如某些情况下,切片/节点突然停止工作,或者直接从集群中直接消失了。因而,容错机制是非常必要且非常重要的。基于此,Elasticsearch 提供了为切片创建副本的能力,你可以设置为每个切片创建一个或多个副本。

以两点来介绍下副本的重要性。

  • 高可用,万一某个节点/切片挂了,依然可以正常工作。因此,千万要注意,副本切片和主切片永远不会分配在同一个节点上。
  • 高性能,操作可以在多个副本上并行执行,这可以提高你的搜索性能,提高搜索的吞吐量.

简言之,一个索引可以被拆分成多个切片,而一个索引也可以被复制 0 或多份。一旦完成副本复制,每个索引将会拥有一个主分片(原始分片,其他副本都从这个分片拷贝)和副本分片(主分片的副本)。

索引的分片和副本数可以在索引创建时定义。不过,在索引创建完成后,你也可以随时改变动态的改变副本数量。通过 _shrink 和 _split 两个接口,你也可以改变已创建的索引的分片数,但这不是一件小事情,最好是在创建索引时,就设置好正确的分片数。

默认情况下,Elasticsearch 会为每个索引分配 5 个主分片和 5 个副本,这也就意味着,如果你的集群中至少有两个节点,那么默认每个索引会有 5 个主分片和 5 个副本,即总共包含 10 个分片。

转载于:https://juejin.im/post/5cfcbedce51d45775a7002e7

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值