社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Elasticsearch

Elasticsearch线上搜索引擎读写内核原理深度认知-搜索系统线上实战

秦凯新的技术社区 • 6 年前 • 498 次点击  
阅读 41

Elasticsearch线上搜索引擎读写内核原理深度认知-搜索系统线上实战

本套技术专栏是作者(秦凯新)平时工作的总结和升华,并深度整理大量网上资源和专业书籍。通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何学术交流,可随时联系。

1 ES 分布式架构设计

elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。

es中存储数据的基本单位是索引,比如说你现在要在es中存储一些订单数据,你就应该在es中创建一个索引,order_idx,所有的订单数据就都写到这个索引里面去,一个索引差不多就是相当于是mysql里的一张表。

-> index(mysql里的一张表)
-> type(一个index里可以有多个type,每个type的字段都是差不多的,但是有一些略微的差别。
         比如在订单index里,建两个type,一个是实物商品订单type,一个是虚拟商品订单type,
         这两个type大部分字段是一样的,少部分字段是不一样的) 
-> mapping (mapping就是这个type的表结构定义)
-> document (一条document就代表了mysql中某个表里的一行,每个document有多个field,每个field就代表了这个document中的一个字段的值)
-> field(具体索引字段)
复制代码

  • 设计一个索引,这个索引可以拆分成多个shard,每个shard存储部分数据。
  • 每一个shard的数据实际是有多个备份,每个shard都有一个primaryshard,负责写入数据,但是还有几个replica shard。primary shard写入数据之后,会将数据同步到其他几个replica shard上去。
  • es集群多个节点,会自动选举一个节点为master节点,这个master节点其实就是干一些管理的工作的,比如维护索引元数据拉,负责切换primary shard和replica shard身份等。
  • 如果master节点宕机了,那么会重新选举一个节点为master节点。
  • 如果是非master节点宕机了,那么会由master节点让那个宕机节点上的primary shard的身份转移到其他机器上的replica shard。

2 ES 写数据过程深入剖析

2.1 ES 写数据总体流程

  • 客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)
  • coordinating node,对document进行路由,将请求转发给对应的node(拥有primary shard 的节点)
  • 拥有primary shard 的node处理写入请求,然后将数据同步到replica node
  • coordinating node,如果发现primary node和所有replica node都搞定之后,就返回响应结果给客户端。

2.2 ES 写数据内核原理剖析

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29421
 
498 次点击