一、es整体架构有四个概念
节点:相当于你一个图书馆大楼
索引:一个图书馆的一个分类区
分片:一个分类区的一个书架
段:一个书架的一层书(每一层书都有自己的目录卡片,倒排索引,书一旦摆上,就不能再插入中间,隔断时间会把零散的基层合并整理到一层就是所说的merge)
refresh: 将数据写入内存,可搜索到,但是没有落盘 refresh默认1s
flush:数据落磁盘,同时删除log文件(容灾,防止机器故障,重启后可恢复)log文件大于某个值,或者距离上次flush时间超过N分钟,或者手动调用flush触发。
merge:整理segment,将小或少的segment整理成大的segment
二、并发
写入并发
同一个shard的写入操作是串行的,单线程,保证数据一致性,省去复杂的锁竞争
不同shard之间完全并行写入,分片越多,写入吞吐越高的原因
主分片写入成功,并行同步到所有副本分片
读取并发
查询请求到协调节点后,会路由到对应分片的主分片或任意一个副本分片
副本越多,读吞吐量越高,但是写入成本也越高
近实时特性
数据写入后默认1秒才能被搜索到(refresh间隔)
不是严格实时,而是近实时
并发安全-乐观锁
使用版本号实现乐观并发控制(典型的CAS机制,没有锁,性能好)
三、架构
采用master(主备)+ dataNode(shard副本集) + 均衡Node方式
flush触发条件
log大小达到阈值
距离上次flush超过30分钟
手动调用
节点关闭
水平扩展
新增节点,自动触发再平衡策略,把已有节点上的分片迁移一部分到新节点,让整个集群分片分布均匀,整个过程自动完成,无需人工干预。单分片大小控制在20G-50G最佳。
四、性能
ES写入快
不用等落盘,直接写内存,refresh为1秒
多分片并行写,水平扩展好
ES查询快
多副本分担
倒排索引
性能
写入 qps:12万,rt:2.5ms
读取 qps:14万,rt:4ms