嘉兴网站建设培训做网站的好处和坏处

当前位置: 首页 > news >正文

嘉兴网站建设培训,做网站的好处和坏处,上海响应式网站建设推荐,wordpress 分类函数前言 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎#xff0c;基于RESTful web接口。Elasticsearch是用Java语言开发的#xff0c;并作为Apache许可条款下的开放源码发布#xff0c;是一种流行的企业级搜索引擎。ElasticSearch…前言 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎基于RESTful web接口。Elasticsearch是用Java语言开发的并作为Apache许可条款下的开放源码发布是一种流行的企业级搜索引擎。ElasticSearch用于云计算中能够达到实时搜索稳定可靠快速安装使用方便。官方客户端在Java、.NETC#、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示Elasticsearch是最受欢迎的企业搜索引擎其次是Apache Solr也是基于Lucene。 Elasticsearch 面试题 1、elasticsearch 了解多少说说你们公司 es 的集群架构索引数据大小分片有多少以及一些调优手段 。 2、elasticsearch 的倒排索引是什么 3、elasticsearch 索引数据多了怎么办如何调优部署 4、elasticsearch 是如何实现 master 选举的 5、详细描述一下 Elasticsearch 索引文档的过程 6、详细描述一下 Elasticsearch 搜索的过程 7、Elasticsearch 在部署时对 Linux 的设置有哪些优化方法 8、lucence 内部结构是什么 9、Elasticsearch 是如何实现 Master 选举的 10、Elasticsearch 中的节点比如共 20 个其中的 10 个选了一个master另外 10 个选了另一个 master怎么办 11、客户端在和集群连接时如何选择特定的节点执行请求的 12、详细描述一下 Elasticsearch 索引文档的过程。 1、elasticsearch 了解多少说说你们公司 es 的集群架构索引数据大小分片有多少以及一些调优手段 。 面试官想了解应聘者之前公司接触的 ES 使用场景、规模有没有做过比较大规模的索引设计、规划、调优。 解答如实结合自己的实践场景回答即可。 比如ES 集群架构 13 个节点索引根据通道不同共 20索引根据日期每日递增 20索引10 分片每日递增 1 亿数据每个通道每天索引大小控制150GB 之内。 仅索引层面调优手段 1.1、设计阶段调优 1根据业务增量需求采取基于日期模板创建索引通过 roll over API 滚动索引 2使用别名进行索引管理 3每天凌晨定时对索引做 force_merge 操作以释放空间 4采取冷热分离机制热数据存储到 SSD提高检索效率冷数据定期进行 shrink操作以缩减存储 5采取 curator 进行索引的生命周期管理 6仅针对需要分词的字段合理的设置分词器 7Mapping 阶段充分结合各个字段的属性是否需要检索、是否需要存储等。…….. 1.2、写入调优 1写入前副本数设置为 0 2写入前关闭 refresh_interval 设置为-1禁用刷新机制 3写入过程中采取 bulk 批量写入 4写入后恢复副本数和刷新间隔 5尽量使用自动生成的 id。 1.3、查询调优 1禁用 wildcard 2禁用批量 terms成百上千的场景 3充分利用倒排索引机制能 keyword 类型尽量 keyword 4数据量大时候可以先基于时间敲定索引再检索 5设置合理的路由机制。 1.4、其他调优 部署调优业务调优等。 上面的提及一部分面试者就基本对你之前的实践或者运维经验有所评估了。 2、elasticsearch 的倒排索引是什么 面试官想了解你对基础概念的认知。 解答通俗解释一下就可以。 传统的我们的检索是通过文章逐个遍历找到对应关键词的位置。 而倒排索引是通过分词策略形成了词和文章的映射关系表这种词典映射表即为倒排索引。有了倒排索引就能实现 o1时间复杂度的效率检索文章了极大的提高了检索效率。 学术的解答方式 倒排索引相反于一篇文章包含了哪些词它从词出发记载了这个词在哪些文档中出现过由两部分组成——词典和倒排表。 加分项倒排索引的底层实现是基于FSTFinite State Transducer数据结构。 lucene 从 4版本后开始大量使用的数据结构是 FST。FST 有两个优点 1空间占用小。通过对词典中单词前缀和后缀的重复利用压缩了存储空间 2查询速度快。O(len(str))的查询时间复杂度。 3、elasticsearch 索引数据多了怎么办如何调优部署 面试官想了解大数据量的运维能力。 解答索引数据的规划应在前期做好规划正所谓“设计先行编码在后”这样才能有效的避免突如其来的数据激增导致集群处理能力不足引发的线上客户检索或者其他业务受到影响。 如何调优正如问题 1 所说这里细化一下 3.1 动态索引层面 基于模板时间rollover api 滚动创建索引举例设计阶段定义blog 索引的模板格式为blog_index_时间戳的形式每天递增数据。这样做的好处不至于数据量激增导致单个索引数据量非常大接近于上线 2 的32 次幂-1索引存储达到了 TB甚至更大。 一旦单个索引很大存储等各种风险也随之而来所以要提前考虑及早避免。 3.2 存储层面 冷热数据分离存储热数据比如最近 3 天或者一周的数据其余为冷数据。 对于冷数据不会再写入新数据可以考虑定期 force_merge 加 shrink 压缩操作节省存储空间和检索效率。 3.3 部署层面 一旦之前没有规划这里就属于应急策略。 结合 ES 自身的支持动态扩展的特点动态新增机器的方式可以缓解集群压力注意如果之前主节点等规划合理不需要重启集群也能完成动态新增的。 4、elasticsearch 是如何实现 master 选举的 面试官想了解 ES 集群的底层原理不再只关注业务层面了。 解答 前置前提 1只有候选主节点mastertrue的节点才能成为主节点。 2最小主节点数min_master_nodes的目的是防止脑裂。 核对了一下代码核心入口为 findMaster选择主节点成功返回对应 Master否则返回 null。选举流程大致描述如下 第一步确认候选主节点数达标elasticsearch.yml 设置的值 discovery.zen.minimum_master_nodes 第二步比较先判定是否具备 master 资格具备候选主节点资格的优先返回 若两节点都为候选主节点则 id 小的值会主节点。注意这里的 id 为 string 类型。 题外话获取节点 id 的方法。 1GET /_cat/nodes?vhip,port,heapPercent,heapMax,id,name 2ip port heapPercent heapMax id name
5、详细描述一下 Elasticsearch 索引文档的过程 面试官想了解 ES 的底层原理不再只关注业务层面了。 解答 这里的索引文档应该理解为文档写入 ES创建索引的过程。 文档写入包含单文档写入和批量 bulk 写入这里只解释一下单文档写入流程。 记住官方文档中的这个图。 第一步客户写集群某节点写入数据发送请求。如果没有指定路由/协调节点请求的节点扮演路由节点的角色。 第二步节点 1 接受到请求后使用文档_id 来确定文档属于分片 0。请求会被转到另外的节点假定节点 3。因此分片 0 的主分片分配到节点 3 上。 第三步节点 3 在主分片上执行写操作如果成功则将请求并行转发到节点 1和节点 2 的副本分片上等待结果返回。所有的副本分片都报告成功节点 3 将向协调节点节点 1报告成功节点 1 向请求客户端报告写入成功。 如果面试官再问第二步中的文档获取分片的过程 回答借助路由算法获取路由算法就是根据路由和文档 id 计算目标的分片 id 的过程。 1shard hash(_routing) % (num_of_primary_shards) 6、详细描述一下 Elasticsearch 搜索的过程 面试官想了解 ES 搜索的底层原理不再只关注业务层面了。 解答 搜索拆解为“query then fetch” 两个阶段。 query 阶段的目的定位到位置但不取。 步骤拆解如下 1假设一个索引数据有 5 主1 副本 共 10 分片一次请求会命中主或者副本分片中的一个。 2每个分片在本地进行查询结果返回到本地有序的优先队列中。 3第 2步骤的结果发送到协调节点协调节点产生一个全局的排序列表。 fetch 阶段的目的取数据。 路由节点获取所有文档返回给客户端。 7、Elasticsearch 在部署时对 Linux 的设置有哪些优化方法 面试官想了解对 ES 集群的运维能力。 解答 1关闭缓存 swap; 2堆内存设置为Min节点内存/2, 32GB; 3设置最大文件句柄数 4线程池队列大小根据业务需要做调整 5磁盘存储 raid 方式——存储有条件使用 RAID10增加单节点性能以及避免单节点存储故障。 8、lucence 内部结构是什么 面试官想了解你的知识面的广度和深度。 解答 Lucene 是有索引和搜索的两个过程包含索引创建索引搜索三个要点。可以基于这个脉络展开一些。 9、Elasticsearch 是如何实现 Master 选举的 1Elasticsearch 的选主是 ZenDiscovery 模块负责的主要包含 Ping节点之间通过这个 RPC 来发现彼此和 Unicast单播模块包含一个主机列表以控制哪些节点需要 ping 通这两部分 2对所有可以成为 master 的节点node.master: true根据 nodeId 字典排序每次选举每个节点都把自己所知道节点排一次序然后选出第一个第 0 位节点暂且认为它是 master 节点。 3如果对某个节点的投票数达到一定的值可以成为 master 节点数 n/21并且该节点自己也选举自己那这个节点就是 master。否则重新选举一直到满足上述条件。 4补充master 节点的职责主要包括集群、节点和索引的管理不负责文档级别的管理data 节点可以关闭 http 功能*。 10、Elasticsearch 中的节点比如共 20 个其中的 10 个 选了一个 master另外 10 个选了另一个 master怎么办 1当集群 master 候选数量不小于 3 个时可以通过设置最少投票通过数量discovery.zen.minimum_master_nodes超过所有候选节点一半以上来解决脑裂问题 3当候选数量为两个时只能修改为唯一的一个 master 候选其他作为 data节点避免脑裂问题。 11、客户端在和集群连接时如何选择特定的节点执行请求的 TransportClient 利用 transport 模块远程连接一个 elasticsearch 集群。它并不加入到集群中只是简单的获得一个或者多个初始化的 transport 地址并以 轮询 的方式与这些地址进行通信。 12、详细描述一下 Elasticsearch 索引文档的过程。 协调节点默认使用文档 ID 参与计算也支持通过 routing以便为路由提供合适的分片。 shard hash(document_id) % (num_of_primary_shards)
1当分片所在的节点接收到来自协调节点的请求后会将请求写入到 MemoryBuffer然后定时默认是每隔 1 秒写入到 Filesystem Cache这个从 MomeryBuffer 到 Filesystem Cache 的过程就叫做 refresh 2当然在某些情况下存在 Momery Buffer 和 Filesystem Cache 的数据可能会丢失ES 是通过 translog 的机制来保证数据的可靠性的。其实现机制是接收到请求后同时也会写入到 translog 中 当 Filesystem cache 中的数据写入到磁盘中时才会清除掉这个过程叫做 flush 3在 flush 过程中内存中的缓冲将被清除内容被写入一个新段段的 fsync将创建一个新的提交点并将内容刷新到磁盘旧的 translog 将被删除并开始一个新的 translog。 4flush 触发的时机是定时触发默认 30 分钟或者 translog 变得太大默认为 512M时 补充关于 Lucene 的 Segement 1Lucene 索引是由多个段组成段本身是一个功能齐全的倒排索引。 2段是不可变的允许 Lucene 将新的文档增量地添加到索引中而不用从头重建索引。 3对于每一个搜索请求而言索引中的所有段都会被搜索并且每个段会消耗CPU 的时钟周、文件句柄和内存。这意味着段的数量越多搜索性能会越低。 4为了解决这个问题Elasticsearch 会合并小段到一个较大的段提交新的合并段到磁盘并删除那些旧的小段。