ES 集群上,业务单点如何优化升级?

  • 时间:
  • 浏览:2
  • 来源:幸运快3_快3安卓版_幸运快3安卓版

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!

  • ES 基础
  • ES 集群
  • ES 集群上业务优化

一、ES 基础

ES 的安放入载,网上一大片,我这边沒有重复。还可不可否看看我以前做的小笔记:

Spring Boot 2.0 M7 整合 ES 5 、Kibana 和 X-pack

其中 ES 三大部分:

  • 文档(Document)

    文档,在面向对象观念假若另另一个多多对象。在 ES 后面 ,是另另一个多多大 JSON 对象,是指定了唯一 ID 的最底层以前根对象。文档的位置由 _index、_type 和 _id 唯一标识。文档元数据:
    • _index :文档在哪存放
    • _type : 文档表示的对象类别
    • _id :文档唯一标识
  • 索引(Index)

    索引,用于区分文档成组,即分到一组的文档集合。索引,用于存储文档和使文档可被搜索。比如项目索引命名为 project ,交易索引命名为 trade 等。
  • 类型(Type)

    类型,用于区分索引中的文档,即在索引中对数据逻辑分区。比如设计项目分为 ui 、 ux 那此类型。还可不可否倒进该类目进行区分。但一般操作,很少用到这麼 僵化 的。

可见, _index 索引的重要性。避免某个索引存储不相关的数据。

二、ES 集群

ES 集群搭建,文章你这个你这个。我这边假若一一列举了。先看 ES 集群分布式图

集群(Cluster)

跟服务器集群例如,多个 ElasticSearch 运行实例(节点 Node)的组合体是 ElasticSearch 集群。

ElasticSearch 是纯天然分布式的,还可不可否通过水平扩容为集群换成更多节点。

ElasticSearch 集群是去中心化的,只另另一个多多多主节点(Master)。但会 主节点是动态选举,但会 不不突然出现单点故障。

那节点是那此?

节点(Node)

后面 说过,另另一个多多 ElasticSearch 运行实例假若节点。任何节点都还可不可否被选举成为主节点。主节点负责集群内你这个你这个变更,比如文档的增加、删除等。你这个你这个集群不不以前主节点流量的增大成为瓶颈。以前任何节点都有成为主节点。

如图,P1 P2 P0 是节点内的主分片,你这个 R 是副分片。

那分片是那此?

分片(Shard)

分片,是 ES 节点中最小的工作单元。分片仅保存详细数据的一部分。分片包括主分片和副分片,主分片是副分片的拷贝。主分片和副分片基本这麼 大的区别。

以前是全文搜索,会查询到每个分片,但会 将每个分片的结果进行全局地整理,并避免返回。

举个例子:比如新建了另另一个多多索引 project , 存储项目相关的数据。那具体的某个 project A 的数据会被切分,存储在不同的分片上。这麼 根据 project A 的 _id 咋样路由到具体的分片上呢?

分片的路由公式是原先的:

shard = hash(routing) % number_of_primary_shards
  • hash 函数生成数字,经过取余算法得到余数。余数假若分片的位置。
  • routing 是可变值,支持自定义。默认文档 _id
  • number_of_primary_shards 主分片的数量

三、ES 集群上业务优化

假若以前以前那个例子,另另一个多多索引 project , 存储项目相关的数据。项目的数量级这麼 大,亿量级,万亿量级。那另另一个多多大索引的查询啥的都有突然出现瓶颈。这以前该为什么优化呢?

这以前是详细都有想到了,一句常说的:空间换时间。

这以前是详细都有也想到了,MySQL 分库

你这个你这个大索引的拆分,也详细都有太难。例如分片的路由规则,根据具体业务指定即可。

这里,你这个人儿还可不可否定义 2000 个索引,分别名为 project_1、project_2、project_3…

但会 在 ES 集群后面 架一层简单的 proxy 。后面 核心的业务路由规则还可不可否原先:

index_id = project_id % 2000
  • project_id 项目自增 ID
  • index_id 得出来的索引对应的 ID

总结一张图:

  • ES proxy 层:做总索引和真正分索引的映射
  • ES 索引配置管理:做索引与业务的映射
  • ES 集群:假若后面 讲的

参考资料

  • https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-index-field.html

以下专题教程我说您会有兴趣

  • 《Spring Boot 2.x 系列教程》 https://www.bysocket.com/springboot
  • 《Java 核心系列教程》 https://www.bysocket.com/archives/2200

(关注微信公众号,领取 Java 精选干货学习资料) 

(换成我微信:bysocket01。加入纯技术交流群,成长技术)