[每周一更]-(第125期):模拟面试|NoSQL面试思路解析
文章目录
-
- 39|Elasticsearch 高可用:怎么保证 Elasticsearch 的高可用?
-
- 1. Elasticsearch 的节点有什么角色?一个节点可以扮演多个角色吗?
- 2. 在实践中,怎么合理安排不同节点扮演的角色?
- 3. 什么是候选主节点和投票节点?投票节点可以被选为主节点吗?为什么要引入投票节点?
- 4. 可以说一下你们公司的 Elasticsearch 是如何部署的吗?性能如何?
- 5. 你用 Elasticsearch 解决过什么问题?为什么用 Elasticsearch?可以用别的框架吗?
- 6. Elasticsearch 为什么引入分片?为了解决什么问题?
- 7. 当一个写入请求发送到 Elasticsearch 之后,发生了什么?
- 8. Elasticsearch 是实时的吗?
- 9. Elasticsearch 的 Translog 是拿来干什么的?它可以保证数据一定不丢失吗?
- 10. 什么是 Commit Point?用来干什么?
- 11. Elasticsearch 在合并段的时候,会影响到已有的查询吗?一个查询怎么知道应该用合并前的段,还是应该用合并后的段?
- 12. 如果我的写入数据流量很大,怎么保证我的 Elasticsearch 不会崩溃?
- 13. 你知道什么是协调节点吗?它的作用是什么?怎么保证协调节点高可用?
- 40|Elasticsearch查询:怎么优化 Elasticsearch 的查询性能?
-
- 1. 你的业务写入和查询的性能如何?Elasticsearch 的性能瓶颈是多少?
- 2. 如何设计 Elasticsearch 的索引?
- 3. 你有没有优化过 Elasticsearch 的查询性能?怎么优化?为什么可以这么优化?
- 4. 为什么 Elasticsearch 的分页查询也那么慢?可以怎么优化?
-
- 优化方法:
- 5. 你有没有优化过 Elasticsearch 的 JVM?怎么优化的?
- 6. 如果 Elasticsearch 经常出现 Full GC,怎么排查和优化?
- 7. 怎么为 Elasticsearch 选择适合垃圾回收算法?
- 8. swap 对 Elasticsearch 有什么影响?应该怎么调整?
- 9. 为什么 Elasticsearch 容易出现文件描述符耗尽的问题?可以怎么优化?
-
- 优化措施:
- 41|MongoDB:MongoDB 是怎么做到高可用的?
-
- 1. 你们公司的 MongoDB 是如何部署的?可用性有多高?
- 2. 你用 MongoDB 解决过什么问题?你为什么要用 MongoDB?用 MySQL 行不行?
- 3. 和关系型数据库比起来,MongoDB 有哪些优势?
- 4. MongoDB 是如何分片的?
- 5. MongoDB 的块是什么?
- 6. 什么情况下会触发块迁移?怎么迁移?
- 7. MongoDB 的负载均衡(再平衡)是指什么?
- 8. MongoDB 的配置服务器有什么作用?
- 9. MongoDB 的复制机制是怎样的?
- 10. 为什么 MongoDB 的 oplog 总是很多?
- 11. 怎么控制 MongoDB 的写入语义?你用的是什么语义?为什么用这个语义?
- 12. 有没有遇到过配置服务器崩溃的问题?怎么提高配置服务器的可用性?
- 13. 当 MongoDB 的主节点崩溃之后,如何选出一个新的主节点?
- 14. 怎么样可以让 MongoDB 在主从选举的时候优先选择同机房的从节点?
- 42|MongoDB高性能:怎么优化 MongoDB 的查询性能?
-
- 1. 你的业务里面使用 MongoDB 的性能如何?能撑住多大的读写流量?
- 2. 你有没有遇到过 MongoDB 的性能问题?后面是如何解决的?
- 3. 当我一个查询请求落到了 MongoDB 之上后,MongoDB 是怎么执行这个查询的?
- 4. mongos 是什么?拿来干什么?怎么优化它的性能?
- 5. 怎么设计 MongoDB 的索引?怎么判定一个索引是否合适?
- 6. 什么是 ESR 规则?为何要遵守 ESR 规则?不遵守行不行?
- 7. 大文档有什么问题?可以怎么解决大文档引发的问题?
- 8. 什么时候要嵌入文档?有什么优势?
- 9. 怎么优化 MongoDB 的排序(分页)查询?
- 10. 为什么要尽可能只查询必要的字段?
- 11. 怎么优化 MongoDB 所在的操作系统?这些优化为什么会有效果?
39|Elasticsearch 高可用:怎么保证 Elasticsearch 的高可用?
- Elasticsearch 的节点有什么角色?一个节点可以扮演多个角色吗?
- 在实践中,怎么合理安排不同节点扮演的角色?
- 什么是候选主节点和投票节点?投票节点可以被选为主节点吗?为什么要引入投票节点?
- 可以说一下你们公司的 Elasticsearch 是如何部署的吗?性能如何?
- 你用 Elasticsearch 解决过什么问题?为什么用 Elasticsearch?可以用别的框架吗?
- Elasticsearch 为什么引入分片?为了解决什么问题?
- 当一个写入请求发送到 Elasticsearch 之后,发生了什么?
- Elasticsearch 是实时的吗?
- Elasticsearch 的 Translog 是拿来干什么的?它可以保证数据一定不丢失吗?
- 什么是 Commit Point?用来干什么?
- Elasticsearch 在合并段的时候,会影响到已有的查询吗?一个查询怎么知道应该用合并前的段,还是应该用合并后的段?
- 如果我的写入数据流量很大,怎么保证我的 Elasticsearch 不会崩溃?
- 你知道什么是协调节点吗?它的作用是什么?怎么保证协调节点高可用?
1. Elasticsearch 的节点有什么角色?一个节点可以扮演多个角色吗?
Elasticsearch 的节点主要有以下几种角色:
- 主节点(Master Node):负责集群的管理和协调,如索引创建、删除和集群状态管理。
- 数据节点(Data Node):用于存储数据和执行数据相关的操作(如搜索、聚合)。
- 协调节点(Coordinating Node):处理客户端请求,并将请求路由到相应的节点。
- 超时节点(Ingest Node):用于预处理文档(如数据清洗、转换)后再索引。
一个节点可以扮演多个角色,例如一个数据节点也可以是主节点。
2. 在实践中,怎么合理安排不同节点扮演的角色?
在实践中,可以根据集群规模和资源情况合理安排节点角色:
- 小型集群:可以将少数节点设置为数据节点和主节点,简化部署。
- 中型和大型集群:建议分离主节点和数据节点,主节点负责管理,数据节点专注于数据存储和查询,以提高性能和稳定性。
- 添加协调节点:在流量高的情况下,可以增加专门的协调节点,减轻数据节点和主节点的负担。
3. 什么是候选主节点和投票节点?投票节点可以被选为主节点吗?为什么要引入投票节点?
- 候选主节点(Candidate Master):在选举过程中,任何节点都可以成为候选主节点。
- 投票节点(Voting Node):参与主节点选举的节点。投票节点是具备选举资格的节点,但未必是当前主节点。
投票节点可以被选为主节点。引入投票节点的原因是为了提高选举的可靠性和容错能力,确保在网络分区或节点故障的情况下,能够通过多数投票机制选举出有效的主节点。
4. 可以说一下你们公司的 Elasticsearch 是如何部署的吗?性能如何?
我们公司的 Elasticsearch 部署通常包括以下策略:
- 多节点集群:采用至少三个主节点以确保高可用性。
- 数据和主节点分离:数据节点专门负责存储和查询,主节点负责集群管理。
- 监控与备份:使用监控工具(如 Elasticsearch X-Pack)跟踪集群健康状态,定期备份数据。
这种部署策略下,性能表现良好,能够高效处理大规模数据和查询请求。
5. 你用 Elasticsearch 解决过什么问题?为什么用 Elasticsearch?可以用别的框架吗?
我曾用 Elasticsearch 解决过以下问题:
- 日志分析:使用 Elasticsearch 进行大规模日志数据的索引和分析,便于快速查询和可视化展示。
- 全文检索:通过 Elasticsearch 的强大搜索功能,实现复杂的全文检索需求。
选择 Elasticsearch 的原因包括其高性能、分布式特性和丰富的查询功能。虽然可以使用其他框架(如 Solr 或传统数据库),但 Elasticsearch 在实时性和处理大数据方面表现更优。
6. Elasticsearch 为什么引入分片?为了解决什么问题?
Elasticsearch 引入分片的原因主要包括:
- 水平扩展:通过将数据划分为多个分片,可以将数据分布到多个节点上,实现水平扩展。
- 并行处理:分片可以并行处理搜索请求,提高查询性能。
- 容错性:可以为每个分片创建副本,提高数据的可用性和容错能力。
7. 当一个写入请求发送到 Elasticsearch 之后,发生了什么?
当一个写入请求发送到 Elasticsearch 时,主要步骤如下:
- 路由:根据文档 ID 和配置的路由算法确定目标分片。
- 索引:将文档写入目标分片,并更新相关的索引结构。
- Translog:将写入操作记录到 Translog,以确保操作的持久性。
- 刷新:根据刷新策略,将内存中的文档更新到硬盘索引中,确保可查询性。
8. Elasticsearch 是实时的吗?
Elasticsearch 不是严格的实时系统,而是近实时(Near Real-Time,NRT)系统。数据写入后,通常需要经过短暂的延迟才能被查询到,这个延迟由配置的刷新间隔决定,默认是 1 秒。
9. Elasticsearch 的 Translog 是拿来干什么的?它可以保证数据一定不丢失吗?
Translog(事务日志)用于记录未持久化的写入操作,以确保在发生故障时可以恢复数据。它的主要作用包括:
- 数据持久化:在写入操作后,Translog 确保操作记录不会丢失。
- 故障恢复:在节点崩溃或重启时,可以通过 Translog 恢复丢失的写入操作。
虽然 Translog 大幅提高了数据的可靠性,但并不能保证数据一定不丢失。如果 Translog 在刷新之前被删除或损坏,仍有可能导致部分数据丢失。
10. 什么是 Commit Point?用来干什么?
Commit Point 是指在写入操作完成后,数据最终被持久化到硬盘的时间点。它用于确保数据的持久性和一致性,主要作用包括:
- 保证数据一致性:确保所有写入操作在特定时间点被可靠地持久化。
- 优化性能:通过将多个写入操作合并,减少对硬盘的写入频率,提高性能。
11. Elasticsearch 在合并段的时候,会影响到已有的查询吗?一个查询怎么知道应该用合并前的段,还是应该用合并后的段?
在合并段的过程中,Elasticsearch 设计了非阻塞的查询机制,合并不会影响到已有的查询。一个查询会同时访问合并前和合并后的段,查询引擎会智能地决定使用哪个段来获取数据,确保查询结果的一致性和正确性。
12. 如果我的写入数据流量很大,怎么保证我的 Elasticsearch 不会崩溃?
为保证高流量写入下 Elasticsearch 不会崩溃,可以采取以下措施: