好的想法是十分钱一打,真正无价的是能够实现这些想法的人。

elasticsearch主分片向副分片同步文件时,为什么不用zerocopy模式,而是要read到es,再write?

Elasticsearch | 作者 vsop_479 | 发布于2018年04月04日 | 阅读数:2662

系统提示:这个人太懒了,什么问题描述都没有写!

已邀请:

JackGe

赞同来自: vsop_479

在副分片向主分片请求进行数据恢复场景下,主分片要把副分片缺少的文件同步给副分片。无论主分片还是副分片都会打开指定shard目录下的文件,在用户态的内存中已经持有了这些文件的句柄和相关文件信息(文件名,文件大小等),读取segemt相关元数据信息,计算得到副分片缺少的文件(Store.java的recoveryDiff方法),这些操作是在用户态执行的,es需要知道这些文件信息,而不能直接将这些文件从磁盘读取到内核态直接发送到副分片。zerocopy模式运用在kafka中是不解析文件内容直接根据偏移量从磁盘读取到内核态发送给消费者。区别在于从磁盘读取后的内容是否需要在用户态中使用进行并计算。当然ES在数据恢复场景做了不少优化:1. 按文件大小排序先发送小文件  2.发送文件有流量控制 3.恢复shard个数有并发控制等等

vsop_479

赞同来自:

1: 限速,防止打满网卡,影响其他请求。 
2: 数据可以经userspace encryption/decryption. 
3: zero-copy不经userspace,能节省点cpu,但不值得。
 

Charele - Cisco4321

赞同来自:

别听楼上的胡说8道
 

vsop_479

赞同来自:

zero2.png

 

Charele - Cisco4321

赞同来自:

ES节点间通讯,可以加密,也可以不加密,那是外面的事情。
 
但“主分片向副分片同步文件”,这个就是直接拷文件,是不加密的。
所以你不能说“ 数据经userspace encryption/decryption. ”

要回复问题请先登录注册