为什么不要在数据库系统中使用MMAP?
数据库大神 Andy Pavlo 一直坚持着一个观点:不要在数据库系统中使用 MMAP,对于这个观点我不是太理解。最近闲逛数据库大神 Andy Pavlo 的 twitter 时发现,他和他的学生竟然发了一篇论文来论证这个结论,这我不得抓紧拜读一下。 论文不长,并且比较好理解。本文就基于这篇论文写一
2022-02-08
【Elasticsearch源码解析】通信模块篇——ES中两个特殊的通信组件(握手和保活)
一、前言 如果你仔细看 ES 源码的 TcpTransport 类构造函数,会发现其中除了有入方向和出方向的 handler 之外,还定义了两个特殊的类 TransportHandshaker 和 TransportKeepAlive: this.outboundHandler = new Outb
2021-12-22
【译】Linux上不同的磁盘IO方式,我们为Scylla选择了哪种方式及其原因
最近看到了一篇不错的对 Linux 下磁盘 I/O 进行概述的文章,作者是 ScyllaDB 公司的 CTO,好像还是 KVM(Kernal-based Virtual Machine)最初的开发者,也是一位大牛了。 原文地址:https://www.scylladb.com/2017/10/05/
2021-12-17
【Elasticsearch源码解析】通信模块篇——ES中对Transport连接是如何管理的
通过上一篇文章,节点间通讯的数据流动已经搞清楚了: 所有节点在启动时都注册上了所有 TransportAction 对应的 RequestHandler 发送节点使用特定 action 向接收节点发送请求,发送前注册对应的 ResponseHandler,通过 requestId 作为 key 存储
2021-12-06
【Elasticsearch源码解析】Guice
一、前言 最近萌生了考 Elastic 认证的想法,不过看了一下别人回忆总结的考题之后,发现 Elastic 认证考察点更倾向于 Elasticsearch 的使用,最新的考试也会考一些 Elasticsearch 7.13 的新特性,现阶段并不是很想了解这方面,就暂时搁置了。 本文会介绍一下 ES
2021-11-29
Netty的主从多线程,你真的理解了吗?
一、前言 Netty 是一个非常成熟的 Java NIO 库,被用在了许多大型项目中,比如 Elasticsearch、Vert.x 等。之前没有仔细阅读过 Netty 源码,但是通过网络上的文章对 Netty 的基本原理了解了一些。比如说,Netty 使用的是主从多线程模型,其中,boss 线程池
2021-08-02
【Elasticsearch源码解析】线程池篇——线程上下文ThreadContext
一、前言 上一篇文章讲了一下 ES 源码中线程池实现和具体的应用,本文会介绍一下 ES 中封装的线程上下文实现 ThreadContext 二、ThreadLocal 是什么 JDK 自带一个线程上下文 ThreadLocal 的实现,有了 ThreadLocal,用户可以定义出来仅在同一个线程共享
2021-07-28
Elasticsearch分片副本那些事
前言 从某种角度上说,ES 是十分易用的,利用 ES 完成一些基本的写入和查询操作,只需要简单看下文档就能学会。但是 ES 又有很多配置可以自定义,当你有实际的业务需要时,如何能有效利用现有的资源达到比较好的时延和吞吐量确又非常困难。本文就聊一下分片(shard)和副本(replica),来看看究竟
2021-07-12
【Elasticsearch源码解析】线程池篇——ES的线程池概述
一、前言 在 Java 中,线程池有着比较方便的实现类 ThreadPoolExecutor,但是这个实现类并不是开箱即用的,在实际的业务中需要一定的知识基础才能发挥出线程池的好处。Elasticsearch 中就封装了一系列更实用的线程池实现,本篇文章就结合 ES 源码来探索一下大神们是如何实现线
2021-04-18
【Elasticsearch源码解析】通信模块篇——ES中对Transport请求的处理浅析
书接上文,本文继续讲解 ES 的通信模块。第一部分介绍了 ES 的总体通信模块组成,并详细介绍了 ES 的 Rest 通信模块部分。本文就来介绍 ES 的 transport 通信模块部分。 一、底层 Netty 部分 还是看 ES 的底层默认 Netty 实现部分,Netty4Transport
2021-04-14