分布式特性edit

在本章开头,我们提到过 Elasticsearch 可以横向扩展至数百个(甚至数千个)服务器节点,同时可以处理PB级数据。我们的教程给出了一些使用 Elasticsearch 的示例,但并未涉及任何内部机制。Elasticsearch 天生就是分布式的,并且在设计时屏蔽了分布式的复杂性。

Elasticsearch 在分布式方面几乎是透明的。教程中并不要求了解分布式系统、分片、集群发现或其他的各种分布式概念。可以使用笔记本上的单节点轻松地运行教程里的程序,但如果你想要在 100 个节点的集群上运行程序,一切都将完全以相同的方式工作。

Elasticsearch 尽可能地屏蔽了分布式系统的复杂性。这里列举了一些在后台自动执行的操作:

  • 分配文档到不同的容器 或 分片(shard) 中,这些容器或分片可以储存在一个节点上, 也可以存储在多个节点上
  • 在集群的节点中均衡分配这些分片,以分散索引和搜索负载
  • 复制每个分片以提供数据的冗余副本,从而防止硬件故障导致的数据丢失
  • 将集群中任一节点的请求路由到存有相关数据的节点
  • 集群扩容时无缝整合新节点,节点丢失时重新分配节点以恢复集群状态

当阅读本书时,将会遇到有关 Elasticsearch 分布式特性的补充章节。这些章节将介绍有关集群扩容、故障转移(分布式集群) 、应对文档存储(分布式文档存储) 、执行分布式搜索(执行分布式检索),分片(shard)及其工作原理(分片内部原理) 。

这些章节并非必读,无需了解内部机制就可以使用 Elasticsearch,但是它们将从另一个角度帮助你了解更完整的 Elasticsearch 知识。可以根据需要跳过它们,或者想更完整地理解时再回头阅读也无妨。