解密Elasticsearch:深入探究这款搜索和分析引擎

💡 原文中文,约5500字,阅读约需13分钟。
📝

内容提要

最近使用Elasticsearch实现画像系统,调研了竞品架构选型,重温了redis原理。Elasticsearch的通讯使用netty,内存分为on heap和off heap,不能回收的部分有node query cache、shard request cache、file data cache、segments cache。持久化分为快照和translog日志。应用方面,使用es解决人群预估、人群包圈选和人包判定问题。优化方面,需要优化mapping,使用线程池和适当的拒绝策略,调整refresh policy等。瓶颈方面,可以使用redis或MongoDB存储人包数据。总结来说,Elasticsearch在实时检索方面表现出色,但实时写会降低检索性能。

🎯

关键要点

  • 最近使用Elasticsearch实现画像系统,调研竞品架构选型,重温redis原理。
  • Elasticsearch的通讯使用netty,节点间RPC通讯基于Netty4Transport。
  • 内存分为on heap和off heap,不能回收的部分包括node query cache、shard request cache等。
  • 持久化分为快照和translog日志,类似于redis的RDB+AOF模式。
  • Elasticsearch在实时检索方面表现出色,但实时写会降低检索性能。
  • 应用方面,使用Elasticsearch解决人群预估、人群包圈选和人包判定问题。
  • 人群预估需要秒级返回结果,人群包圈选要求分钟级构建。
  • 人包判定接口要求10毫秒返回结果,优化查询性能至关重要。
  • 优化方面包括mapping优化、使用线程池、调整refresh policy等。
  • 瓶颈方面可以使用redis或MongoDB存储人包数据。
  • 总结来说,Elasticsearch在实时场景下表现优异,但实时写入会影响检索性能。
➡️

继续阅读