如何做网站服务器映射,网站建设不挣钱,软件公司取名,网络营销公司搭建平台中间件的常考方向#xff1a; 中间件如何做到高可用和高性能的#xff1f; 你在实践中怎么做的高可用和高性能的#xff1f;
Elasticsearch节点角色
Elasticsearch的节点可以分为很多种角色#xff0c;并且一个节点可以扮演多种角色#xff0c;下面列举几种主要的 中间件如何做到高可用和高性能的 你在实践中怎么做的高可用和高性能的
Elasticsearch节点角色
Elasticsearch的节点可以分为很多种角色并且一个节点可以扮演多种角色下面列举几种主要的 候选主节点可以被选举为主节点的节点。主节点主要负责集群本身的管理比如创建索引。类似的还有仅投票节点这类节点只参与主从选举但是自身并不会被选举为主节点。 协调节点协调节点负责协调请求的处理过程。一个查询请求会被发送到协调节点上协调节点确定数据节点然后让数据节点执行查询最后协调节点合并数据节点返回的数据集。大多数节点都会兼任这个角色。 数据节点存储数据的节点。当协调节点发来查询请求的时候也会执行查询并且把结果返回给协调节点。类似的还有热数据节点、暖数据节点、冷数据节点它们只是用于存储不同热度的数据。 给节点设置不同的角色的原则如果有足够的资源就考虑一个节点只扮演一个角色资源不足的话就考虑一个节点扮演多个角色。
写入数据 写入数据的过程整体如上所述 文档首先被写入到Buffer里面这个是Elasticsearch自己的Buffer 定时刷新到Page Cache里这个过程叫做refresh默认一秒钟执行一次。 刷新到磁盘里这个时候还会同步记录一个Commit Point
在写入Page Cache之后会产生很多段Segment一个段里面包含了多个文档。文档只有写到了这里之后才可以被搜索到。
从支持搜索的角度来说Elasticsearch是近实时的。
不断写入会不断产生段而每一个段都需要消耗CPU、内存和文件句柄所以需要考虑合并。但是这些段本身还在支持搜索因此在合并段的时候不能对已有的查询产生影响。
基本的过程如下类似数据迁移 已有的段不动 创建一个新的段把已有段的数据写过去标记为删除的文档就不会被写到段里面 告知查询使用新的段 等使用老的段的查询都结束了直接删掉老的段 那么查询怎么知道应该使用合并段了呢这依赖于统一的机制就是Commit Point里面记录了哪些段是可用的。
所以当合并段之后产生了一个新的Commit Point里面有合并后的段但是没有被合并的段相当于告知了查询使用新的段。
Translog
Elasticsearch在写入的时候还要写入Translog。可以把这个看作是MySQL里和redo log差不多的东西如果宕机了可以通过Translog来恢复数据。
MySQL写入的时候修改了内存里的值然后记录了日志也就是binlog、redo log和undo log
Elasticsearch写入的时候也是写入了Buffer里然后记录了Translog
两者的区别是Translog是固定间隔刷新到磁盘上的默认是5秒。 Translog是只追加的也就是顺序写的所以效率很高。只有刷新到磁盘的时候才会非常慢。
但是就算有Translog还是有数据丢失的可能最差情况下会丢失5秒的数据。
Elasticsearch索引与分片
一个Elasticsearch的索引并不仅仅指倒排索引还包括了对应的文档。这个和关系型数据库下的语义是不同的。
Elasticsearch的一个索引有多个分片每个分片又有主从结构类似于数据库的分库分表。可以这样理解 一个索引是一个逻辑表 分片就是分库分表 每个分片都有主从结构在分库分表里面一般也是用主从集群来存储数据 Elasticsearch会尽量把分片分散在不同的节点上这一点和kafka尽量把分区分散在不同broker上是一样的为了保证在节点崩溃的时候将影响最小化。
主分片崩溃后是怎么选出新的主分片呢 主节点选择一个分片作为主分片类似于Redis Sentinel里的机制如果主节点宕机了Sentinel会从节点里选出一个作为主节点 面试准备 公司有没有使用Elasticsearch用来解决什么问题 Elasticsearch性能怎么样读写流量多大存储数据量多大 创建的索引有多大有多少个分片如何确定分片数量的 有没有采用一些措施来保证Elasticsearch的可用性有没有用过Elasticsearch的网关 Elasticsearch有没有出过问题如何解决的
项目介绍的时候也可以强调一下项目可用性的一个关键点就是Elasticsearch从而打开话题。面试的时候可以收集一些使用Elasticsearch的基本案例这样面试讲到一些理论的时候也可以用这些案例来佐证。
和Elasticsearch相关的面试题目有很多比如 有没有用过Elasticsearch用来解决什么问题 用Elasticsearch的过程中有没有遇到过什么问题最后是如何解决的 为什么Elasticsearch是近实时的 Elasticsearch的flush指的是什么refresh又是什么 Elasticsearch的写入过程是什么样的